diff --git a/.gitignore b/.gitignore index 218c33abd964..31e4fd2ef157 100755 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,8 @@ /db_template_writer.php /components/ILIAS/Database/sql/dbupdate_custom.php /install_client.php +/lang/customizing/*.po +/lang/customizing/ilias_*.lang # Directories /public diff --git a/components/ILIAS/Accessibility/Accessibility.php b/components/ILIAS/Accessibility/Accessibility.php index 99b3fe01d8c7..789487c99aed 100644 --- a/components/ILIAS/Accessibility/Accessibility.php +++ b/components/ILIAS/Accessibility/Accessibility.php @@ -20,6 +20,9 @@ namespace ILIAS; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; + class Accessibility implements Component\Component { public function init( @@ -33,5 +36,9 @@ public function init( array | \ArrayAccess &$internal, ): void { // ... + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'acc' + ); } } diff --git a/components/ILIAS/Accessibility/lang/acc.pot b/components/ILIAS/Accessibility/lang/acc.pot new file mode 100644 index 000000000000..15261ac03adf --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc.pot @@ -0,0 +1,132 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: acc\n" + +msgid "acc_add_document_btn_label" +msgstr "" + +msgid "acc_crit_type_usr_language" +msgstr "" + +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "" + +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "" + +msgid "acc_ctrl_cpt_txt" +msgstr "" + +msgid "acc_deleted_documents_p" +msgstr "" + +msgid "acc_deleted_documents_s" +msgstr "" + +msgid "acc_doc_crit_attached" +msgstr "" + +msgid "acc_doc_crit_changed" +msgstr "" + +msgid "acc_doc_crit_detached" +msgstr "" + +msgid "acc_doc_delete" +msgstr "" + +msgid "acc_doc_detach_crit_confirm_title" +msgstr "" + +msgid "acc_doc_sure_detach_crit" +msgstr "" + +msgid "acc_document" +msgstr "" + +msgid "acc_form_attach_criterion_head" +msgstr "" + +msgid "acc_form_criterion" +msgstr "" + +msgid "acc_form_document" +msgstr "" + +msgid "acc_form_document_content_changed" +msgstr "" + +msgid "acc_form_document_info" +msgstr "" + +msgid "acc_form_document_new" +msgstr "" + +msgid "acc_form_document_new_info" +msgstr "" + +msgid "acc_form_document_title" +msgstr "" + +msgid "acc_form_document_title_info" +msgstr "" + +msgid "acc_form_edit_criterion_head" +msgstr "" + +msgid "acc_form_edit_doc_head" +msgstr "" + +msgid "acc_form_new_doc_head" +msgstr "" + +msgid "acc_forward_mail" +msgstr "" + +msgid "acc_function" +msgstr "" + +msgid "acc_last_rep_visited" +msgstr "" + +msgid "acc_saved_sorting" +msgstr "" + +msgid "acc_sure_delete_documents_p" +msgstr "" + +msgid "acc_sure_delete_documents_s" +msgstr "" + +msgid "acc_tbl_docs_action_add_criterion" +msgstr "" + +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "" + +msgid "acc_tbl_docs_head_created" +msgstr "" + +msgid "acc_tbl_docs_head_criteria" +msgstr "" + +msgid "acc_tbl_docs_head_last_change" +msgstr "" + +msgid "acc_tbl_docs_head_sorting" +msgstr "" + +msgid "acc_tbl_docs_head_title" +msgstr "" + +msgid "acc_tbl_docs_title" +msgstr "" + +msgid "acc_tree_off" +msgstr "" + +msgid "acc_tree_on" +msgstr "" diff --git a/components/ILIAS/Accessibility/lang/acc_ar.po b/components/ILIAS/Accessibility/lang/acc_ar.po new file mode 100644 index 000000000000..8c5578492131 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_ar.po @@ -0,0 +1,172 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +msgid "acc_forward_mail" +msgstr "اعادة ارسال الرسالة" + +msgid "acc_function" +msgstr "وظيفة" + +msgid "acc_last_rep_visited" +msgstr "Repository/Last Visited" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +msgid "acc_tree_off" +msgstr "الشجرة لا تعمل" + +msgid "acc_tree_on" +msgstr "الشجرة تعمل" diff --git a/components/ILIAS/Accessibility/lang/acc_bg.po b/components/ILIAS/Accessibility/lang/acc_bg.po new file mode 100644 index 000000000000..07e227c03e33 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_bg.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +#, fuzzy +msgid "acc_forward_mail" +msgstr "Forward Mail" + +#, fuzzy +msgid "acc_function" +msgstr "Function" + +#, fuzzy +msgid "acc_last_rep_visited" +msgstr "Repository/Last Visited" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +#, fuzzy +msgid "acc_tree_off" +msgstr "Tree Off" + +#, fuzzy +msgid "acc_tree_on" +msgstr "Tree On" diff --git a/components/ILIAS/Accessibility/lang/acc_cs.po b/components/ILIAS/Accessibility/lang/acc_cs.po new file mode 100644 index 000000000000..f84b3b79e661 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_cs.po @@ -0,0 +1,172 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +msgid "acc_forward_mail" +msgstr "Přeposlat poštu" + +msgid "acc_function" +msgstr "Funkce" + +msgid "acc_last_rep_visited" +msgstr "Úložiště/Naposledy navštíveno" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +msgid "acc_tree_off" +msgstr "Strom vypnutý" + +msgid "acc_tree_on" +msgstr "Strom zapnutý" diff --git a/components/ILIAS/Accessibility/lang/acc_da.po b/components/ILIAS/Accessibility/lang/acc_da.po new file mode 100644 index 000000000000..ed1d00fc1741 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_da.po @@ -0,0 +1,173 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +msgid "acc_forward_mail" +msgstr "Videresend" + +msgid "acc_function" +msgstr "Funktion" + +#, fuzzy +msgid "acc_last_rep_visited" +msgstr "Repository/Last Visited" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +msgid "acc_tree_off" +msgstr "Trænavigation fra" + +msgid "acc_tree_on" +msgstr "Trænavigation til" diff --git a/components/ILIAS/Accessibility/lang/acc_de.po b/components/ILIAS/Accessibility/lang/acc_de.po new file mode 100644 index 000000000000..8a050aacfead --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_de.po @@ -0,0 +1,135 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: acc\n" + +msgid "acc_add_document_btn_label" +msgstr "Dokument hinzufügen" + +msgid "acc_crit_type_usr_language" +msgstr "Benutzersprache" + +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "Sie können das Vorlagekriterium mit der entsprechenden Konfiguration nicht zuweisen. Es existiert bereits eine identische Zuweisung." + +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "Sie können die Konfiguration des Vorlagekriteriums nicht wie gewünscht ändern. Es existiert bereits eine identische Zuweisung." + +msgid "acc_ctrl_cpt_txt" +msgstr "Info Barrierefreiheit" + +msgid "acc_deleted_documents_p" +msgstr "Die gewählten Dokumente wurden gelöscht." + +msgid "acc_deleted_documents_s" +msgstr "Das Dokument wurde gelöscht." + +msgid "acc_doc_crit_attached" +msgstr "Das Vorlagekriterium wurde zugewiesen." + +msgid "acc_doc_crit_changed" +msgstr "Das Vorlagekriterium wurde aktualisiert." + +msgid "acc_doc_crit_detached" +msgstr "Das Vorlagekriterium wurde entfernt." + +msgid "acc_doc_delete" +msgstr "Dokument löschen" + +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Vorlagekriterium entfernen" + +msgid "acc_doc_sure_detach_crit" +msgstr "Sind Sie sicher, dass das Vorlagekriterium entfernt werden soll?" + +msgid "acc_document" +msgstr "Dokument" + +msgid "acc_form_attach_criterion_head" +msgstr "Vorlagekriterium hinzufügen" + +msgid "acc_form_criterion" +msgstr "Vorlagekriterium" + +msgid "acc_form_document" +msgstr "Dokument" + +msgid "acc_form_document_content_changed" +msgstr "Der Inhalt der hochgeladenen Datei wurde durch ILIAS bereinigt. Bitte prüfen Sie das Ergebnis und laden im Zweifel eine neue Datei hoch." + +msgid "acc_form_document_info" +msgstr "Bitte wählen Sie eine entsprechende Datei von Ihrem lokalen Dateisystem. Sie können eine einfache Text-Datei oder eine HTML-Datei hochladen. Es wird nur ein Teil des HTML-Sprachumfangs unterstützt. Bitte beachten Sie, dass HTML-Dateien beim Hochladen bereinigt werden, und nur der Inhalt des body-Elements übernommen wird." + +msgid "acc_form_document_new" +msgstr "Inhalt ändern" + +msgid "acc_form_document_new_info" +msgstr "Wählen Sie eine neue Datei von Ihrem lokalen Dateisystem, um das Dokument zu ändern. Sie können eine einfache Text-Datei oder eine HTML-Datei hochladen. Es wird nicht der komplette HTML-Sprachumfang unterstützt. Bitte beachten Sie, dass HTML-Dateien beim Hochladen bereinigt werden, und nur der Inhalt des body-Elements übernommen wird. Der bestehende Inhalt des Dokuments wird ausgetauscht." + +msgid "acc_form_document_title" +msgstr "Titel" + +msgid "acc_form_document_title_info" +msgstr "Geben Sie hier einen Titel für das Dokument ein." + +msgid "acc_form_edit_criterion_head" +msgstr "Vorlagekriterium bearbeiten" + +msgid "acc_form_edit_doc_head" +msgstr "Dokument bearbeiten" + +msgid "acc_form_new_doc_head" +msgstr "Dokument erstellen" + +msgid "acc_forward_mail" +msgstr "Weiterleiten" + +msgid "acc_function" +msgstr "Funktion" + +msgid "acc_last_rep_visited" +msgstr "Magazin/Zuletzt besucht" + +msgid "acc_saved_sorting" +msgstr "Die Sortierung wurde gespeichert." + +msgid "acc_sure_delete_documents_p" +msgstr "Sind Sie sicher, dass Sie die gewählten Dokumente löschen möchten?" + +msgid "acc_sure_delete_documents_s" +msgstr "Sind Sie sicher, dass Sie das gewählte Dokument löschen möchten?" + +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Vorlagekriterium hinzufügen" + +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "Kein Vorlagekriterium zugewiesen" + +msgid "acc_tbl_docs_head_created" +msgstr "Erstellungsdatum" + +msgid "acc_tbl_docs_head_criteria" +msgstr "Vorlagekriterien" + +msgid "acc_tbl_docs_head_last_change" +msgstr "Letzte Änderung" + +msgid "acc_tbl_docs_head_sorting" +msgstr "Sortierung" + +msgid "acc_tbl_docs_head_title" +msgstr "Titel" + +msgid "acc_tbl_docs_title" +msgstr "Dokumente" + +msgid "acc_tree_off" +msgstr "Baumansicht aus" + +msgid "acc_tree_on" +msgstr "Baumansicht an" diff --git a/components/ILIAS/Accessibility/lang/acc_el.po b/components/ILIAS/Accessibility/lang/acc_el.po new file mode 100644 index 000000000000..5457e7b8bcf4 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_el.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +#, fuzzy +msgid "acc_forward_mail" +msgstr "Forward Mail" + +#, fuzzy +msgid "acc_function" +msgstr "Function" + +#, fuzzy +msgid "acc_last_rep_visited" +msgstr "Repository/Last Visited" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +#, fuzzy +msgid "acc_tree_off" +msgstr "Tree Off" + +#, fuzzy +msgid "acc_tree_on" +msgstr "Tree On" diff --git a/components/ILIAS/Accessibility/lang/acc_en.po b/components/ILIAS/Accessibility/lang/acc_en.po new file mode 100644 index 000000000000..3a31dfba5913 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_en.po @@ -0,0 +1,135 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: acc\n" + +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "It is not possible to set the language you have selected as the criterion for displaying this document, as it has already been set as the criterion for displaying a different Accessibility document." + +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "It is not possible to change the criterion for displaying this document to the language you have selected. That language is being used as the criterion for displaying a different Accessibility document." + +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Documents" + +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +msgid "acc_doc_crit_attached" +msgstr "The criterion for displaying this Accessibility document has been set successfully." + +msgid "acc_doc_crit_changed" +msgstr "The criterion for displaying this Accessibility document has been changed." + +msgid "acc_doc_crit_detached" +msgstr "The criterion for displaying this Accessibility document has been removed." + +msgid "acc_doc_delete" +msgstr "Delete Document" + +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Remove Language Criterion" + +msgid "acc_doc_sure_detach_crit" +msgstr "Are you sure that you no longer want this language to be the criterion for displaying this Accessibility document?" + +msgid "acc_document" +msgstr "Document" + +msgid "acc_form_attach_criterion_head" +msgstr "Select Language Criterion for Displaying Accessibility Info Document" + +msgid "acc_form_criterion" +msgstr "Criterion" + +msgid "acc_form_document" +msgstr "Document" + +msgid "acc_form_document_content_changed" +msgstr "The uploaded file has had its html <head> information removed by ILIAS. Please check the result and upload a new file if necessary." + +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will have their <head> information removed – only the contents of the body element will be used." + +msgid "acc_form_document_new" +msgstr "Change Content" + +msgid "acc_form_document_new_info" +msgstr "Here you can select a file from your local filesystem to change the contents of this Accessibility document. You can either upload a plain text file, or a simple HTML file. HTML files will have their <head> information removed - only the contents of the body element will be used. The existing contents of the Accessibility document will be replaced. The document’s acceptance history will not be affected." + +msgid "acc_form_document_title" +msgstr "Title" + +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +msgid "acc_form_edit_criterion_head" +msgstr "Edit Language Criterion" + +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +msgid "acc_forward_mail" +msgstr "Forward Mail" + +msgid "acc_function" +msgstr "Function" + +msgid "acc_last_rep_visited" +msgstr "Repository/Last Visited" + +msgid "acc_saved_sorting" +msgstr "The new order has been saved." + +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete this document?" + +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No language criterion assigned" + +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +msgid "acc_tbl_docs_head_criteria" +msgstr "Criterion" + +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +msgid "acc_tbl_docs_head_sorting" +msgstr "Order" + +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +msgid "acc_tbl_docs_title" +msgstr "Documents" + +msgid "acc_tree_off" +msgstr "Tree Off" + +msgid "acc_tree_on" +msgstr "Tree On" diff --git a/components/ILIAS/Accessibility/lang/acc_es.po b/components/ILIAS/Accessibility/lang/acc_es.po new file mode 100644 index 000000000000..a2f38571e0c5 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_es.po @@ -0,0 +1,135 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: acc\n" + +msgid "acc_add_document_btn_label" +msgstr "Agregar documento" + +msgid "acc_crit_type_usr_language" +msgstr "Idioma del perfil" + +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "No puedes adjuntar este criterio con este valor. Ya existe un criterio idéntico adjunto." + +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "No puedes cambiar el criterio como se desea. Ya existe un criterio idéntico adjunto." + +msgid "acc_ctrl_cpt_txt" +msgstr "Concepto de control de accesibilidad" + +msgid "acc_deleted_documents_p" +msgstr "Los documentos han sido eliminados." + +msgid "acc_deleted_documents_s" +msgstr "El documento ha sido eliminado." + +msgid "acc_doc_crit_attached" +msgstr "El criterio ha sido adjuntado." + +msgid "acc_doc_crit_changed" +msgstr "El criterio ha sido cambiado." + +msgid "acc_doc_crit_detached" +msgstr "El criterio para mostrar este documento de accesibilidad ha sido eliminado." + +msgid "acc_doc_delete" +msgstr "Eliminar documento" + +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Eliminar criterio de idioma" + +msgid "acc_doc_sure_detach_crit" +msgstr "¿Está seguro de que ya no desea que este idioma sea el criterio para mostrar este documento de accesibilidad?" + +msgid "acc_document" +msgstr "Documento" + +msgid "acc_form_attach_criterion_head" +msgstr "Seleccionar criterio de idioma para mostrar el documento de información de accesibilidad" + +msgid "acc_form_criterion" +msgstr "Criterio" + +msgid "acc_form_document" +msgstr "Documento" + +msgid "acc_form_document_content_changed" +msgstr "ILIAS ha eliminado la información html <head> del archivo subido. Por favor, revise el resultado y cargue un nuevo archivo si es necesario." + +msgid "acc_form_document_info" +msgstr "Seleccione un archivo de su sistema de archivos local. Puede subir un archivo de texto plano o un archivo HTML sencillo. Los archivos HTML tendrán su información <head> eliminada – solo se utilizará el contenido del elemento body." + +msgid "acc_form_document_new" +msgstr "Cambiar contenido" + +msgid "acc_form_document_new_info" +msgstr "Aquí puede seleccionar un archivo de su sistema de archivos local para cambiar el contenido de este documento de accesibilidad. Puede subir un archivo de texto plano o un archivo HTML sencillo. Los archivos HTML tendrán su información <head> eliminada - solo se utilizará el contenido del elemento body. El contenido existente del documento de accesibilidad será reemplazado. El historial de aceptación del documento no se verá afectado." + +msgid "acc_form_document_title" +msgstr "Título" + +msgid "acc_form_document_title_info" +msgstr "Por favor, introduzca un título para el documento." + +msgid "acc_form_edit_criterion_head" +msgstr "Editar criterio de idioma" + +msgid "acc_form_edit_doc_head" +msgstr "Editar documento" + +msgid "acc_form_new_doc_head" +msgstr "Crear documento" + +msgid "acc_forward_mail" +msgstr "Reenviar correo" + +msgid "acc_function" +msgstr "Función" + +msgid "acc_last_rep_visited" +msgstr "Repositorio/Último visitado" + +msgid "acc_saved_sorting" +msgstr "El nuevo orden ha sido guardado." + +msgid "acc_sure_delete_documents_p" +msgstr "¿Está seguro de que desea eliminar los documentos seleccionados?" + +msgid "acc_sure_delete_documents_s" +msgstr "¿Está seguro de que desea eliminar este documento?" + +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Agregar Criterio" + +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No se ha asignado ningún criterio de idioma" + +msgid "acc_tbl_docs_head_created" +msgstr "Fecha de creación" + +msgid "acc_tbl_docs_head_criteria" +msgstr "Criterio" + +msgid "acc_tbl_docs_head_last_change" +msgstr "Último cambio" + +msgid "acc_tbl_docs_head_sorting" +msgstr "Orden" + +msgid "acc_tbl_docs_head_title" +msgstr "Título" + +msgid "acc_tbl_docs_title" +msgstr "Documentos" + +msgid "acc_tree_off" +msgstr "Árbol desactivado" + +msgid "acc_tree_on" +msgstr "Árbol activado" diff --git a/components/ILIAS/Accessibility/lang/acc_et.po b/components/ILIAS/Accessibility/lang/acc_et.po new file mode 100644 index 000000000000..37ee4eff4bd9 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_et.po @@ -0,0 +1,172 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +msgid "acc_forward_mail" +msgstr "Saada edasi" + +msgid "acc_function" +msgstr "Funktsioon" + +msgid "acc_last_rep_visited" +msgstr "Repository/Last Visited" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +msgid "acc_tree_off" +msgstr "Puust välja" + +msgid "acc_tree_on" +msgstr "Puu vaade" diff --git a/components/ILIAS/Accessibility/lang/acc_fa.po b/components/ILIAS/Accessibility/lang/acc_fa.po new file mode 100644 index 000000000000..eecfb88953e5 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_fa.po @@ -0,0 +1,172 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +msgid "acc_forward_mail" +msgstr "ارسال ایمیل به دیگری" + +msgid "acc_function" +msgstr "عملکرد" + +msgid "acc_last_rep_visited" +msgstr "مخزن/آخرین بازدید" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +msgid "acc_tree_off" +msgstr "Tree Off" + +msgid "acc_tree_on" +msgstr "Tree On" diff --git a/components/ILIAS/Accessibility/lang/acc_fr.po b/components/ILIAS/Accessibility/lang/acc_fr.po new file mode 100644 index 000000000000..8b189a5ff2d1 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_fr.po @@ -0,0 +1,135 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: acc\n" + +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +msgid "acc_doc_delete" +msgstr "Delete Document" + +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +msgid "acc_document" +msgstr "Document" + +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +msgid "acc_form_criterion" +msgstr "Criterion" + +msgid "acc_form_document" +msgstr "Document" + +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +msgid "acc_form_document_new" +msgstr "Change Content" + +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +msgid "acc_form_document_title" +msgstr "Title" + +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +msgid "acc_forward_mail" +msgstr "Transférer email" + +msgid "acc_function" +msgstr "Fonction" + +msgid "acc_last_rep_visited" +msgstr "Catalogue/Dernière Page Visitée" + +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +msgid "acc_tbl_docs_title" +msgstr "Documents" + +msgid "acc_tree_off" +msgstr "Arborescence Désactivée" + +msgid "acc_tree_on" +msgstr "Arborescence Activée" diff --git a/components/ILIAS/Accessibility/lang/acc_hr.po b/components/ILIAS/Accessibility/lang/acc_hr.po new file mode 100644 index 000000000000..06945690feb4 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_hr.po @@ -0,0 +1,172 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +msgid "acc_forward_mail" +msgstr "Forward Mail" + +msgid "acc_function" +msgstr "Function" + +msgid "acc_last_rep_visited" +msgstr "Repository/Last Visited" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +msgid "acc_tree_off" +msgstr "Tree Off" + +msgid "acc_tree_on" +msgstr "Tree On" diff --git a/components/ILIAS/Accessibility/lang/acc_hu.po b/components/ILIAS/Accessibility/lang/acc_hu.po new file mode 100644 index 000000000000..eb0d70480fa7 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_hu.po @@ -0,0 +1,135 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: acc\n" + +msgid "acc_add_document_btn_label" +msgstr "Dokumentum hozzáadása" + +msgid "acc_crit_type_usr_language" +msgstr "A profil nyelve" + +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "Ezt a nyelv már megjelenítési feltétele egy másik Hozzáférhetőségi dokumentumnak, nem állíthatja be ehhez is." + +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "Ezt a nyelv már megjelenítési feltétele egy másik Hozzáférhetőségi dokumentumnak, nem állíthatja be ehhez is." + +msgid "acc_ctrl_cpt_txt" +msgstr "Hozzáférhetőségi dokumentumok" + +msgid "acc_deleted_documents_p" +msgstr "A dokumentumokat sikeresen törölte." + +msgid "acc_deleted_documents_s" +msgstr "A dokumentumot sikeresen törölte." + +msgid "acc_doc_crit_attached" +msgstr "A Hozzáférhetőségi dokumentum megjelenítési feltételét sikeresen hozzárendelte." + +msgid "acc_doc_crit_changed" +msgstr "A Hozzáférhetőségi dokumentum megjelenítési feltételét sikeresen módosította." + +msgid "acc_doc_crit_detached" +msgstr "A Hozzáférhetőségi dokumentum megjelenítési feltételét sikeresen eltávolította." + +msgid "acc_doc_delete" +msgstr "Dokumentum törlése" + +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Nyelvi feltétel eltávolítása" + +msgid "acc_doc_sure_detach_crit" +msgstr "Biztos, hogy eltávolítja ezt a nyelvi feltételt?" + +msgid "acc_document" +msgstr "Dokumentum" + +msgid "acc_form_attach_criterion_head" +msgstr "Nyelvi feltétel hozzárendelése a Hozzáférhetőségi dokumentum megjelenítési feltételéhez" + +msgid "acc_form_criterion" +msgstr "Feltétel" + +msgid "acc_form_document" +msgstr "Dokumentum" + +msgid "acc_form_document_content_changed" +msgstr "Az ILIAS eltávolított a feltöltött fájl <head> tartalmát. Kérjük, ellenőrizze a végeredményt és szükség esetén töltsön fel új fájlt." + +msgid "acc_form_document_info" +msgstr "Válasszon egy fájlt a saját gépéről. Feltölthet egy egyszerű szöveges fájlt vagy egy egyszerű HTML-fájlt. A HTML fájl <head> tartalmát eltávolítjuk, csak a törzselem tartalmát használjuk." + +msgid "acc_form_document_new" +msgstr "Tartalom módosítása" + +msgid "acc_form_document_new_info" +msgstr "Válasszon egy fájlt a saját gépéről, amit a Hozzáférhetőségi Dokumentum új tartalmának szeretne. Feltölthet egy egyszerű szöveges fájlt vagy egy egyszerű HTML-fájlt. A HTML fájl <head> tartalmát eltávolítjuk, csak a törzselem tartalmát használjuk. A már létező tartalmat lecseréljük." + +msgid "acc_form_document_title" +msgstr "Cím" + +msgid "acc_form_document_title_info" +msgstr "Adja meg a dokumentum címét." + +msgid "acc_form_edit_criterion_head" +msgstr "Nyelvi feltétel módosítása" + +msgid "acc_form_edit_doc_head" +msgstr "Dokumentum módosítása" + +msgid "acc_form_new_doc_head" +msgstr "Dokumentum létrehozása" + +msgid "acc_forward_mail" +msgstr "Továbbítás" + +msgid "acc_function" +msgstr "Funkció" + +msgid "acc_last_rep_visited" +msgstr "Tartalomtár/Utoljára látogatott" + +msgid "acc_saved_sorting" +msgstr "A rendezést sikeresen mentette." + +msgid "acc_sure_delete_documents_p" +msgstr "Biztos, hogy törli a kiválasztott dokumentumokat?" + +msgid "acc_sure_delete_documents_s" +msgstr "Biztos, hogy törli a kiválasztott dokumentumot?" + +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Feltétel hozzáadása" + +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "Egy nyelvi feltétel sincs hozzárendelve" + +msgid "acc_tbl_docs_head_created" +msgstr "Létrehozása dátuma" + +msgid "acc_tbl_docs_head_criteria" +msgstr "Feltétel" + +msgid "acc_tbl_docs_head_last_change" +msgstr "Utolsó módosítás" + +msgid "acc_tbl_docs_head_sorting" +msgstr "Rendezés" + +msgid "acc_tbl_docs_head_title" +msgstr "Cím" + +msgid "acc_tbl_docs_title" +msgstr "Dokumentumok" + +msgid "acc_tree_off" +msgstr "Tartalomfa kikapcsolása" + +msgid "acc_tree_on" +msgstr "Tartalomfa bekapcsolása" diff --git a/components/ILIAS/Accessibility/lang/acc_it.po b/components/ILIAS/Accessibility/lang/acc_it.po new file mode 100644 index 000000000000..16b3e30a6a89 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_it.po @@ -0,0 +1,135 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: acc\n" + +msgid "acc_add_document_btn_label" +msgstr "Aggiungi Documento" + +msgid "acc_crit_type_usr_language" +msgstr "Lingua del profilo" + +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "Non puoi allegare questo criterio con questo valore. C'è già un criterio identico allegato." + +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "Non è possibile cambiare il criterio come desiderato. C'è già un criterio identico allegato." + +msgid "acc_ctrl_cpt_txt" +msgstr "Controllo dell'accessibilità" + +msgid "acc_deleted_documents_p" +msgstr "I documenti sono stati cancellati." + +msgid "acc_deleted_documents_s" +msgstr "I documenti sono stati cancellati." + +msgid "acc_doc_crit_attached" +msgstr "Il criterio è stato inserito." + +msgid "acc_doc_crit_changed" +msgstr "Il criterio è stato cambiato." + +msgid "acc_doc_crit_detached" +msgstr "Il criterio è stato rimosso." + +msgid "acc_doc_delete" +msgstr "Cancella documento" + +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Rimuovi criteri" + +msgid "acc_doc_sure_detach_crit" +msgstr "Sei sicuro di voler rimuovere il criterio?" + +msgid "acc_document" +msgstr "Documento" + +msgid "acc_form_attach_criterion_head" +msgstr "Inserisci criterio" + +msgid "acc_form_criterion" +msgstr "Criterio" + +msgid "acc_form_document" +msgstr "Documento" + +msgid "acc_form_document_content_changed" +msgstr "Il contenuto del file caricato è stato purificato da ILIAS. Per favore controlla il risultato e carica un nuovo file, se necessario." + +msgid "acc_form_document_info" +msgstr "Seleziona un file dal tuo filesystem locale. Puoi caricare un file di testo semplice o un semplice file HTML. I file HTML saranno purificati, solo il contenuto dell'elemento body sarà utilizzato." + +msgid "acc_form_document_new" +msgstr "Cambia il contenuto" + +msgid "acc_form_document_new_info" +msgstr "Seleziona un file dal tuo filesystem locale. Puoi caricare un file di testo semplice o un semplice file HTML. I file HTML saranno purificati, solo il contenuto dell'elemento body sarà utilizzato. Il contenuto esistente sarà sostituito." + +msgid "acc_form_document_title" +msgstr "Titolo" + +msgid "acc_form_document_title_info" +msgstr "Inserisci un titolo per il documento." + +msgid "acc_form_edit_criterion_head" +msgstr "modifica Criterio Assegnazione" + +msgid "acc_form_edit_doc_head" +msgstr "modifica Documento" + +msgid "acc_form_new_doc_head" +msgstr "Crea documento" + +msgid "acc_forward_mail" +msgstr "Inoltra Mail" + +msgid "acc_function" +msgstr "Funzione" + +msgid "acc_last_rep_visited" +msgstr "Archivio/Ultima Visita" + +msgid "acc_saved_sorting" +msgstr "L'ordinamento è stato salvato." + +msgid "acc_sure_delete_documents_p" +msgstr "Sei sicuro di voler cancellare i documenti selezionati?" + +msgid "acc_sure_delete_documents_s" +msgstr "Sei sicuro di voler cancellare il documento?" + +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Aggiungi criterio" + +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "Nessun criterio assegnato" + +msgid "acc_tbl_docs_head_created" +msgstr "Data di creazione" + +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteri" + +msgid "acc_tbl_docs_head_last_change" +msgstr "Ultima modifica" + +msgid "acc_tbl_docs_head_sorting" +msgstr "Ordinamento" + +msgid "acc_tbl_docs_head_title" +msgstr "Titolo" + +msgid "acc_tbl_docs_title" +msgstr "Documenti" + +msgid "acc_tree_off" +msgstr "Contrai albero" + +msgid "acc_tree_on" +msgstr "Espandi albero" diff --git a/components/ILIAS/Accessibility/lang/acc_ja.po b/components/ILIAS/Accessibility/lang/acc_ja.po new file mode 100644 index 000000000000..4e2f4a2b80b0 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_ja.po @@ -0,0 +1,135 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: acc\n" + +msgid "acc_add_document_btn_label" +msgstr "ドキュメントを追加" + +msgid "acc_crit_type_usr_language" +msgstr "プロファイル言語" + +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "この値をこの基準に添付できません。" + +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "ご希望の基準へ変更できません。すでに添付と同一の基準があります。" + +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +msgid "acc_deleted_documents_p" +msgstr "ドキュメントは削除されました。" + +msgid "acc_deleted_documents_s" +msgstr "ドキュメントは削除されました。" + +msgid "acc_doc_crit_attached" +msgstr "基準が添付されました。" + +msgid "acc_doc_crit_changed" +msgstr "基準が変更されました。" + +msgid "acc_doc_crit_detached" +msgstr "基準が外されました。" + +msgid "acc_doc_delete" +msgstr "ドキュメントを削除" + +msgid "acc_doc_detach_crit_confirm_title" +msgstr "基準を外す" + +msgid "acc_doc_sure_detach_crit" +msgstr "本当に基準を外しますか?" + +msgid "acc_document" +msgstr "ドキュメント" + +msgid "acc_form_attach_criterion_head" +msgstr "基準を外す" + +msgid "acc_form_criterion" +msgstr "基準" + +msgid "acc_form_document" +msgstr "ドキュメント" + +msgid "acc_form_document_content_changed" +msgstr "アップロードファイルのコンテンツはILIASがクリヤにします。必要に応じて結果と新しいファイルのアップロードを確認してください。" + +msgid "acc_form_document_info" +msgstr "ローカルファイルシステムからファイルを選択してください。Pain textファイルまたはsimple HTMLファイルをuploadできます。HTMLファイルはクリヤにされてbody要素のコンテンツのみが使用されます。" + +msgid "acc_form_document_new" +msgstr "コンテンツを変更" + +msgid "acc_form_document_new_info" +msgstr "ローカルファイルシステムからファイルを選択してください。Pain textファイルまたはsimple HTMLファイルをuploadできます。HTMLファイルはクリヤにされてbody要素のコンテンツのみが使用されます。" + +msgid "acc_form_document_title" +msgstr "Title" + +msgid "acc_form_document_title_info" +msgstr "ドキュメントのタイトルを入力してください。" + +msgid "acc_form_edit_criterion_head" +msgstr "基準の割当てを編集" + +msgid "acc_form_edit_doc_head" +msgstr "ドキュメントを編集" + +msgid "acc_form_new_doc_head" +msgstr "ドキュメントを作成" + +msgid "acc_forward_mail" +msgstr "転送メール" + +msgid "acc_function" +msgstr "機能" + +msgid "acc_last_rep_visited" +msgstr "リポジトリ/前回訪問" + +msgid "acc_saved_sorting" +msgstr "並び替えは保存されました" + +msgid "acc_sure_delete_documents_p" +msgstr "本当に選択のドキュメントを削除しますか?" + +msgid "acc_sure_delete_documents_s" +msgstr "本当にドキュメントを削除しますか?" + +msgid "acc_tbl_docs_action_add_criterion" +msgstr "基準を追加" + +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "割当ての基準がありません" + +msgid "acc_tbl_docs_head_created" +msgstr "作成日" + +msgid "acc_tbl_docs_head_criteria" +msgstr "基準" + +msgid "acc_tbl_docs_head_last_change" +msgstr "最終変更" + +msgid "acc_tbl_docs_head_sorting" +msgstr "並び替え" + +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +msgid "acc_tbl_docs_title" +msgstr "ドキュメント" + +msgid "acc_tree_off" +msgstr "ツリー表示しない" + +msgid "acc_tree_on" +msgstr "ツリー表示する" diff --git a/components/ILIAS/Accessibility/lang/acc_ka.po b/components/ILIAS/Accessibility/lang/acc_ka.po new file mode 100644 index 000000000000..8343351196b2 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_ka.po @@ -0,0 +1,172 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +msgid "acc_forward_mail" +msgstr "პასუხი" + +msgid "acc_function" +msgstr "ფუნქცია" + +msgid "acc_last_rep_visited" +msgstr "Repository/Last Visited" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +msgid "acc_tree_off" +msgstr "ხე გათიშულია" + +msgid "acc_tree_on" +msgstr "ხე ჩართულია" diff --git a/components/ILIAS/Accessibility/lang/acc_lt.po b/components/ILIAS/Accessibility/lang/acc_lt.po new file mode 100644 index 000000000000..19b7c40d3dbf --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_lt.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +#, fuzzy +msgid "acc_forward_mail" +msgstr "Forward Mail" + +#, fuzzy +msgid "acc_function" +msgstr "Function" + +#, fuzzy +msgid "acc_last_rep_visited" +msgstr "Repository/Last Visited" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +#, fuzzy +msgid "acc_tree_off" +msgstr "Tree Off" + +#, fuzzy +msgid "acc_tree_on" +msgstr "Tree On" diff --git a/components/ILIAS/Accessibility/lang/acc_nl.po b/components/ILIAS/Accessibility/lang/acc_nl.po new file mode 100644 index 000000000000..3e914ae16bf1 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_nl.po @@ -0,0 +1,172 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +msgid "acc_forward_mail" +msgstr "E-mail doorsturen" + +msgid "acc_function" +msgstr "Functie" + +msgid "acc_last_rep_visited" +msgstr "Studiecentrum/Laatst bezocht" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +msgid "acc_tree_off" +msgstr "Boom uit" + +msgid "acc_tree_on" +msgstr "Boom aan" diff --git a/components/ILIAS/Accessibility/lang/acc_pl.po b/components/ILIAS/Accessibility/lang/acc_pl.po new file mode 100644 index 000000000000..663bcdd158f4 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_pl.po @@ -0,0 +1,172 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +msgid "acc_forward_mail" +msgstr "Przekaż mail" + +msgid "acc_function" +msgstr "Funkcja" + +msgid "acc_last_rep_visited" +msgstr "Dostępne zasoby/Ostatnio odwiedzone:" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +msgid "acc_tree_off" +msgstr "Widok drzewa wyłączony" + +msgid "acc_tree_on" +msgstr "Widok drzewa włączony" diff --git a/components/ILIAS/Accessibility/lang/acc_pt.po b/components/ILIAS/Accessibility/lang/acc_pt.po new file mode 100644 index 000000000000..523c1035f419 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_pt.po @@ -0,0 +1,172 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +msgid "acc_forward_mail" +msgstr "Encaminhar mail" + +msgid "acc_function" +msgstr "Função" + +msgid "acc_last_rep_visited" +msgstr "Repositório/Última visita" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +msgid "acc_tree_off" +msgstr "Árvore Off" + +msgid "acc_tree_on" +msgstr "Árvore On" diff --git a/components/ILIAS/Accessibility/lang/acc_ro.po b/components/ILIAS/Accessibility/lang/acc_ro.po new file mode 100644 index 000000000000..46bb5fd79bb6 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_ro.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +#, fuzzy +msgid "acc_forward_mail" +msgstr "Forward Mail" + +#, fuzzy +msgid "acc_function" +msgstr "Function" + +#, fuzzy +msgid "acc_last_rep_visited" +msgstr "Repository/Last Visited" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +#, fuzzy +msgid "acc_tree_off" +msgstr "Tree Off" + +#, fuzzy +msgid "acc_tree_on" +msgstr "Tree On" diff --git a/components/ILIAS/Accessibility/lang/acc_ru.po b/components/ILIAS/Accessibility/lang/acc_ru.po new file mode 100644 index 000000000000..15c5a2e45e29 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_ru.po @@ -0,0 +1,172 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +msgid "acc_forward_mail" +msgstr "Перенаправить почту" + +msgid "acc_function" +msgstr "Действие" + +msgid "acc_last_rep_visited" +msgstr "Репозиторий/Последнее посещенное" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +msgid "acc_tree_off" +msgstr "Дерево выключено" + +msgid "acc_tree_on" +msgstr "Дерево включено" diff --git a/components/ILIAS/Accessibility/lang/acc_sk.po b/components/ILIAS/Accessibility/lang/acc_sk.po new file mode 100644 index 000000000000..5533e395d8b5 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_sk.po @@ -0,0 +1,173 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +msgid "acc_forward_mail" +msgstr "Přeposlat poštu" + +msgid "acc_function" +msgstr "Funkce" + +#, fuzzy +msgid "acc_last_rep_visited" +msgstr "Repository/Last Visited" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +msgid "acc_tree_off" +msgstr "Strom vypnutý" + +msgid "acc_tree_on" +msgstr "Strom zapnutý" diff --git a/components/ILIAS/Accessibility/lang/acc_sl.po b/components/ILIAS/Accessibility/lang/acc_sl.po new file mode 100644 index 000000000000..404d1a55ae5d --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_sl.po @@ -0,0 +1,135 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: acc\n" + +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +msgid "acc_doc_delete" +msgstr "Delete Document" + +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +msgid "acc_document" +msgstr "Document" + +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +msgid "acc_form_criterion" +msgstr "Criterion" + +msgid "acc_form_document" +msgstr "Document" + +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +msgid "acc_form_document_new" +msgstr "Change Content" + +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +msgid "acc_form_document_title" +msgstr "Title" + +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +msgid "acc_forward_mail" +msgstr "Forward Mail" + +msgid "acc_function" +msgstr "Function" + +msgid "acc_last_rep_visited" +msgstr "Repository/Last Visited" + +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +msgid "acc_tbl_docs_title" +msgstr "Documents" + +msgid "acc_tree_off" +msgstr "Tree Off" + +msgid "acc_tree_on" +msgstr "Tree On" diff --git a/components/ILIAS/Accessibility/lang/acc_sq.po b/components/ILIAS/Accessibility/lang/acc_sq.po new file mode 100644 index 000000000000..e112aaf25432 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_sq.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +#, fuzzy +msgid "acc_forward_mail" +msgstr "Forward Mail" + +#, fuzzy +msgid "acc_function" +msgstr "Function" + +#, fuzzy +msgid "acc_last_rep_visited" +msgstr "Repository/Last Visited" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +#, fuzzy +msgid "acc_tree_off" +msgstr "Tree Off" + +#, fuzzy +msgid "acc_tree_on" +msgstr "Tree On" diff --git a/components/ILIAS/Accessibility/lang/acc_sr.po b/components/ILIAS/Accessibility/lang/acc_sr.po new file mode 100644 index 000000000000..5a933c9d579c --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_sr.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +#, fuzzy +msgid "acc_forward_mail" +msgstr "Forward Mail" + +#, fuzzy +msgid "acc_function" +msgstr "Function" + +#, fuzzy +msgid "acc_last_rep_visited" +msgstr "Repository/Last Visited" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +#, fuzzy +msgid "acc_tree_off" +msgstr "Tree Off" + +#, fuzzy +msgid "acc_tree_on" +msgstr "Tree On" diff --git a/components/ILIAS/Accessibility/lang/acc_sv.po b/components/ILIAS/Accessibility/lang/acc_sv.po new file mode 100644 index 000000000000..9f507a92a5ba --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_sv.po @@ -0,0 +1,135 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: acc\n" + +msgid "acc_add_document_btn_label" +msgstr "Lägg till dokument" + +msgid "acc_crit_type_usr_language" +msgstr "Användarspråk" + +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "Du kan inte tilldela mallkriteriet med motsvarande konfiguration. En identisk tilldelning finns redan." + +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "Du kan inte ändra konfigurationen av mallkriteriet efter önskemål. En identisk tilldelning finns redan." + +msgid "acc_ctrl_cpt_txt" +msgstr "Info om tillgänglighet" + +msgid "acc_deleted_documents_p" +msgstr "De valda dokumenten har raderats." + +msgid "acc_deleted_documents_s" +msgstr "Dokumentet har tagits bort." + +msgid "acc_doc_crit_attached" +msgstr "Mallkriteriet har tilldelats." + +msgid "acc_doc_crit_changed" +msgstr "Mallkriteriet har uppdaterats." + +msgid "acc_doc_crit_detached" +msgstr "Mallkriteriet har tagits bort." + +msgid "acc_doc_delete" +msgstr "Radera dokument" + +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Ta bort kriteriet för mall" + +msgid "acc_doc_sure_detach_crit" +msgstr "Är du säker på att mallkriteriet ska tas bort?" + +msgid "acc_document" +msgstr "Dokument" + +msgid "acc_form_attach_criterion_head" +msgstr "Lägg till mallkriterium" + +msgid "acc_form_criterion" +msgstr "Kriterium för mall" + +msgid "acc_form_document" +msgstr "Dokument" + +msgid "acc_form_document_content_changed" +msgstr "Innehållet i den uppladdade filen har rensats av ILIAS. Kontrollera resultatet och ladda upp en ny fil om du är osäker." + +msgid "acc_form_document_info" +msgstr "Välj en lämplig fil från ditt lokala filsystem. Du kan ladda upp en enkel textfil eller en HTML-fil. Endast delar av HTML-språket stöds. Observera att HTML-filer rensas under uppladdningen och att endast innehållet i body-elementet övertas." + +msgid "acc_form_document_new" +msgstr "Ändra innehåll" + +msgid "acc_form_document_new_info" +msgstr "Här kan du välja en ny fil från ditt lokala filsystem för att ändra dokumentet. Du kan ladda upp en enkel textfil eller en HTML-fil. Hela HTML-språket stöds inte. Observera att HTML-filer rensas under uppladdningen och att endast innehållet i body-elemen" + +msgid "acc_form_document_title" +msgstr "Titel" + +msgid "acc_form_document_title_info" +msgstr " Ange en titel för dokumentet här." + +msgid "acc_form_edit_criterion_head" +msgstr "Redigera kriterium för mall" + +msgid "acc_form_edit_doc_head" +msgstr "Redigera dokument" + +msgid "acc_form_new_doc_head" +msgstr "Skapa dokument" + +msgid "acc_forward_mail" +msgstr "Framåt" + +msgid "acc_function" +msgstr "Funktion" + +msgid "acc_last_rep_visited" +msgstr "Magazine/Last visited" + +msgid "acc_saved_sorting" +msgstr "Sorteringen har sparats." + +msgid "acc_sure_delete_documents_p" +msgstr "Är du säker på att du vill radera de valda dokumenten?" + +msgid "acc_sure_delete_documents_s" +msgstr "Är du säker på att du vill ta bort det markerade dokumentet?" + +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Lägg till mallkriterium" + +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "Inget mallkriterium tilldelat" + +msgid "acc_tbl_docs_head_created" +msgstr "Datum för skapande" + +msgid "acc_tbl_docs_head_criteria" +msgstr "Kriterier för mall" + +msgid "acc_tbl_docs_head_last_change" +msgstr "Sista förändringen" + +msgid "acc_tbl_docs_head_sorting" +msgstr "Sortering" + +msgid "acc_tbl_docs_head_title" +msgstr "Titel" + +msgid "acc_tbl_docs_title" +msgstr "Dokument" + +msgid "acc_tree_off" +msgstr "Trädvy av" + +msgid "acc_tree_on" +msgstr "Trädutsikt på" diff --git a/components/ILIAS/Accessibility/lang/acc_tr.po b/components/ILIAS/Accessibility/lang/acc_tr.po new file mode 100644 index 000000000000..33d886632310 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_tr.po @@ -0,0 +1,172 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +msgid "acc_forward_mail" +msgstr "Forward E-Posta" + +msgid "acc_function" +msgstr "Fonksiyon" + +msgid "acc_last_rep_visited" +msgstr "Depo / Son Bakılanlar" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +msgid "acc_tree_off" +msgstr "Ağaç Kapalı" + +msgid "acc_tree_on" +msgstr "Ağaç açık" diff --git a/components/ILIAS/Accessibility/lang/acc_uk.po b/components/ILIAS/Accessibility/lang/acc_uk.po new file mode 100644 index 000000000000..221bb52e54f5 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_uk.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +#, fuzzy +msgid "acc_forward_mail" +msgstr "Forward Mail" + +#, fuzzy +msgid "acc_function" +msgstr "Function" + +#, fuzzy +msgid "acc_last_rep_visited" +msgstr "Repository/Last Visited" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +#, fuzzy +msgid "acc_tree_off" +msgstr "Tree Off" + +#, fuzzy +msgid "acc_tree_on" +msgstr "Tree On" diff --git a/components/ILIAS/Accessibility/lang/acc_vi.po b/components/ILIAS/Accessibility/lang/acc_vi.po new file mode 100644 index 000000000000..9c8c0b2af47f --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_vi.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +#, fuzzy +msgid "acc_forward_mail" +msgstr "Forward Mail" + +#, fuzzy +msgid "acc_function" +msgstr "Function" + +#, fuzzy +msgid "acc_last_rep_visited" +msgstr "Repository/Last Visited" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +#, fuzzy +msgid "acc_tree_off" +msgstr "Tree Off" + +#, fuzzy +msgid "acc_tree_on" +msgstr "Tree On" diff --git a/components/ILIAS/Accessibility/lang/acc_zh.po b/components/ILIAS/Accessibility/lang/acc_zh.po new file mode 100644 index 000000000000..d65448d1de36 --- /dev/null +++ b/components/ILIAS/Accessibility/lang/acc_zh.po @@ -0,0 +1,172 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: acc\n" + +#, fuzzy +msgid "acc_add_document_btn_label" +msgstr "Add Document" + +#, fuzzy +msgid "acc_crit_type_usr_language" +msgstr "Profile Language" + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_insert" +msgstr "You cannot attach this criterion with this value. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_criterion_assignment_must_be_unique_update" +msgstr "You cannot change the criterion as desired. There is already an identical criterion attached." + +#, fuzzy +msgid "acc_ctrl_cpt_txt" +msgstr "Accessibility Control Concept" + +#, fuzzy +msgid "acc_deleted_documents_p" +msgstr "The documents have been deleted." + +#, fuzzy +msgid "acc_deleted_documents_s" +msgstr "The document has been deleted." + +#, fuzzy +msgid "acc_doc_crit_attached" +msgstr "The criterion has been attached." + +#, fuzzy +msgid "acc_doc_crit_changed" +msgstr "The criterion has been changed." + +#, fuzzy +msgid "acc_doc_crit_detached" +msgstr "The criterion has been detached." + +#, fuzzy +msgid "acc_doc_delete" +msgstr "Delete Document" + +#, fuzzy +msgid "acc_doc_detach_crit_confirm_title" +msgstr "Detach Criterion" + +#, fuzzy +msgid "acc_doc_sure_detach_crit" +msgstr "Are your sure you want to detach the criterion?" + +#, fuzzy +msgid "acc_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_attach_criterion_head" +msgstr "Attach Criterion" + +#, fuzzy +msgid "acc_form_criterion" +msgstr "Criterion" + +#, fuzzy +msgid "acc_form_document" +msgstr "Document" + +#, fuzzy +msgid "acc_form_document_content_changed" +msgstr "The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary." + +#, fuzzy +msgid "acc_form_document_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used." + +#, fuzzy +msgid "acc_form_document_new" +msgstr "Change Content" + +#, fuzzy +msgid "acc_form_document_new_info" +msgstr "Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced." + +#, fuzzy +msgid "acc_form_document_title" +msgstr "Title" + +#, fuzzy +msgid "acc_form_document_title_info" +msgstr "Please enter a title for the document." + +#, fuzzy +msgid "acc_form_edit_criterion_head" +msgstr "Edit Criterion Assignment" + +#, fuzzy +msgid "acc_form_edit_doc_head" +msgstr "Edit Document" + +#, fuzzy +msgid "acc_form_new_doc_head" +msgstr "Create Document" + +msgid "acc_forward_mail" +msgstr "转发邮件" + +msgid "acc_function" +msgstr "功能" + +msgid "acc_last_rep_visited" +msgstr "知识库/最后访问的" + +#, fuzzy +msgid "acc_saved_sorting" +msgstr "The sorting has been saved." + +#, fuzzy +msgid "acc_sure_delete_documents_p" +msgstr "Are you sure you want to delete the selected documents?" + +#, fuzzy +msgid "acc_sure_delete_documents_s" +msgstr "Are you sure you want to delete the document?" + +#, fuzzy +msgid "acc_tbl_docs_action_add_criterion" +msgstr "Add Criterion" + +#, fuzzy +msgid "acc_tbl_docs_cell_not_criterion" +msgstr "No criterion assigned" + +#, fuzzy +msgid "acc_tbl_docs_head_created" +msgstr "Creation Date" + +#, fuzzy +msgid "acc_tbl_docs_head_criteria" +msgstr "Criteria" + +#, fuzzy +msgid "acc_tbl_docs_head_last_change" +msgstr "Last Change" + +#, fuzzy +msgid "acc_tbl_docs_head_sorting" +msgstr "Sorting" + +#, fuzzy +msgid "acc_tbl_docs_head_title" +msgstr "Title" + +#, fuzzy +msgid "acc_tbl_docs_title" +msgstr "Documents" + +msgid "acc_tree_off" +msgstr "收拢树" + +msgid "acc_tree_on" +msgstr "展开树" diff --git a/components/ILIAS/AuthShibboleth/AuthShibboleth.php b/components/ILIAS/AuthShibboleth/AuthShibboleth.php index 4e99a137b868..fd4484fa3519 100644 --- a/components/ILIAS/AuthShibboleth/AuthShibboleth.php +++ b/components/ILIAS/AuthShibboleth/AuthShibboleth.php @@ -23,6 +23,8 @@ use ILIAS\Component\Component; use ILIAS\Component\Resource\PublicAsset; use ILIAS\Component\Resource\Endpoint; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; class AuthShibboleth implements Component { @@ -41,5 +43,9 @@ public function init( $contribute[PublicAsset::class] = fn(): Endpoint => new Endpoint($this, "shib_logout.php"); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'shib' + ); } } diff --git a/components/ILIAS/AuthShibboleth/lang/shib.pot b/components/ILIAS/AuthShibboleth/lang/shib.pot new file mode 100644 index 000000000000..c7bd89412868 --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib.pot @@ -0,0 +1,138 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: shib\n" + +msgid "shib_account_creation" +msgstr "" + +msgid "shib_account_creation_disabled" +msgstr "" + +msgid "shib_account_creation_disabled_info" +msgstr "" + +msgid "shib_account_creation_enabled" +msgstr "" + +msgid "shib_account_creation_enabled_info" +msgstr "" + +msgid "shib_account_creation_info" +msgstr "" + +msgid "shib_account_creation_with_approval" +msgstr "" + +msgid "shib_account_creation_with_approval_info" +msgstr "" + +msgid "shib_add_missing" +msgstr "" + +msgid "shib_add_remove" +msgstr "" + +msgid "shib_assignment_type" +msgstr "" + +msgid "shib_attr_info" +msgstr "" + +msgid "shib_attribute" +msgstr "" + +msgid "shib_attribute_name" +msgstr "" + +msgid "shib_attribute_value" +msgstr "" + +msgid "shib_check_role_assignment" +msgstr "" + +msgid "shib_choose_role" +msgstr "" + +msgid "shib_confirm_del_role_ass" +msgstr "" + +msgid "shib_deleted_rule" +msgstr "" + +msgid "shib_global_role" +msgstr "" + +msgid "shib_ilias_role" +msgstr "" + +msgid "shib_local_role" +msgstr "" + +msgid "shib_missing_attr_name" +msgstr "" + +msgid "shib_missing_attr_value" +msgstr "" + +msgid "shib_missing_plugin_id" +msgstr "" + +msgid "shib_missing_role" +msgstr "" + +msgid "shib_new_rule" +msgstr "" + +msgid "shib_plugin" +msgstr "" + +msgid "shib_plugin_id" +msgstr "" + +msgid "shib_plugin_info" +msgstr "" + +msgid "shib_remove_deprecated" +msgstr "" + +msgid "shib_role_ass_table" +msgstr "" + +msgid "shib_role_assignment" +msgstr "" + +msgid "shib_role_by_attribute" +msgstr "" + +msgid "shib_role_by_plugin" +msgstr "" + +msgid "shib_role_name" +msgstr "" + +msgid "shib_role_name_info" +msgstr "" + +msgid "shib_role_selection" +msgstr "" + +msgid "shib_rule_condition" +msgstr "" + +msgid "shib_rule_type" +msgstr "" + +msgid "shib_rules_tables" +msgstr "" + +msgid "shib_settings" +msgstr "" + +msgid "shib_update_role_ass_table" +msgstr "" + +msgid "shib_update_roles" +msgstr "" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_ar.po b/components/ILIAS/AuthShibboleth/lang/shib_ar.po new file mode 100644 index 000000000000..121f94ba2e38 --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_ar.po @@ -0,0 +1,149 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +msgid "shib_add_missing" +msgstr "تعيين القوانين المفقودة" + +msgid "shib_add_remove" +msgstr "اضافة\\ ازالة قوانين" + +msgid "shib_assignment_type" +msgstr "Kind of Assignment" + +msgid "shib_attr_info" +msgstr "Assign by a specific attribute in the Shibboleth User Profile." + +msgid "shib_attribute" +msgstr "User Attribute" + +msgid "shib_attribute_name" +msgstr "Attribute Name" + +msgid "shib_attribute_value" +msgstr "Attribute Value" + +msgid "shib_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +msgid "shib_choose_role" +msgstr "Choose Role" + +msgid "shib_confirm_del_role_ass" +msgstr "Do you really want to delete the following rules?" + +msgid "shib_deleted_rule" +msgstr " تم حذف تعيين الوظائف" + +msgid "shib_global_role" +msgstr "Global Role" + +msgid "shib_ilias_role" +msgstr "ILIAS اسم وظيفة" + +msgid "shib_local_role" +msgstr "Local Role" + +msgid "shib_missing_attr_name" +msgstr "Please enter the attribute name." + +msgid "shib_missing_attr_value" +msgstr "Please enter the attribute value." + +msgid "shib_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +msgid "shib_missing_role" +msgstr "Please select one role." + +msgid "shib_new_rule" +msgstr "اضافة قاعدة جديدة" + +msgid "shib_plugin" +msgstr "تعيين بواسطة المساعد" + +msgid "shib_plugin_id" +msgstr "Plugin Id" + +msgid "shib_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +msgid "shib_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +msgid "shib_role_ass_table" +msgstr "قاعدة جديدة لتعيين الوظائف" + +msgid "shib_role_assignment" +msgstr "تعيين وظائف" + +msgid "shib_role_by_attribute" +msgstr "Shibboleth Attribute" + +msgid "shib_role_by_plugin" +msgstr "By Plugin" + +msgid "shib_role_name" +msgstr "ILIAS اسم وظيفة" + +msgid "shib_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +msgid "shib_role_selection" +msgstr "Role Selection" + +msgid "shib_rule_condition" +msgstr "Condition" + +msgid "shib_rule_type" +msgstr "Type of Assignment" + +msgid "shib_rules_tables" +msgstr "Active Role Assignment Rules" + +msgid "shib_settings" +msgstr "Shibboleth Settings" + +msgid "shib_update_role_ass_table" +msgstr "تعديل قاعدة تعيين وظيفة" + +msgid "shib_update_roles" +msgstr "تعيين وظائف" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_bg.po b/components/ILIAS/AuthShibboleth/lang/shib_bg.po new file mode 100644 index 000000000000..4b76edbca531 --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_bg.po @@ -0,0 +1,185 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +#, fuzzy +msgid "shib_add_missing" +msgstr "Assign Missing Roles" + +#, fuzzy +msgid "shib_add_remove" +msgstr "Add/Remove Roles" + +#, fuzzy +msgid "shib_assignment_type" +msgstr "Kind of Assignment" + +#, fuzzy +msgid "shib_attr_info" +msgstr "Assign by a specific attribute in the Shibboleth User Profile." + +#, fuzzy +msgid "shib_attribute" +msgstr "User Attribute" + +#, fuzzy +msgid "shib_attribute_name" +msgstr "Attribute Name" + +#, fuzzy +msgid "shib_attribute_value" +msgstr "Attribute Value" + +#, fuzzy +msgid "shib_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +#, fuzzy +msgid "shib_choose_role" +msgstr "Choose Role" + +#, fuzzy +msgid "shib_confirm_del_role_ass" +msgstr "Do you really want to delete the following rules?" + +#, fuzzy +msgid "shib_deleted_rule" +msgstr "Deleted role assignments." + +#, fuzzy +msgid "shib_global_role" +msgstr "Global Role" + +#, fuzzy +msgid "shib_ilias_role" +msgstr "ILIAS Role Name" + +#, fuzzy +msgid "shib_local_role" +msgstr "Local Role" + +#, fuzzy +msgid "shib_missing_attr_name" +msgstr "Please enter the attribute name." + +#, fuzzy +msgid "shib_missing_attr_value" +msgstr "Please enter the attribute value." + +#, fuzzy +msgid "shib_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "shib_missing_role" +msgstr "Please select one role." + +#, fuzzy +msgid "shib_new_rule" +msgstr "Add new Rule" + +#, fuzzy +msgid "shib_plugin" +msgstr "Assignment by Plugin" + +#, fuzzy +msgid "shib_plugin_id" +msgstr "Plugin Id" + +#, fuzzy +msgid "shib_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +#, fuzzy +msgid "shib_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +#, fuzzy +msgid "shib_role_ass_table" +msgstr "New Rule for Role Assignments" + +#, fuzzy +msgid "shib_role_assignment" +msgstr "Role Assignments" + +#, fuzzy +msgid "shib_role_by_attribute" +msgstr "Shibboleth Attribute" + +#, fuzzy +msgid "shib_role_by_plugin" +msgstr "By Plugin" + +#, fuzzy +msgid "shib_role_name" +msgstr "ILIAS Role Name" + +#, fuzzy +msgid "shib_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +#, fuzzy +msgid "shib_role_selection" +msgstr "Role Selection" + +#, fuzzy +msgid "shib_rule_condition" +msgstr "Condition" + +#, fuzzy +msgid "shib_rule_type" +msgstr "Type of Assignment" + +#, fuzzy +msgid "shib_rules_tables" +msgstr "Active Role Assignment Rules" + +#, fuzzy +msgid "shib_settings" +msgstr "Shibboleth Settings" + +#, fuzzy +msgid "shib_update_role_ass_table" +msgstr "Edit Role Assignment Rule" + +#, fuzzy +msgid "shib_update_roles" +msgstr "Role Assignments" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_cs.po b/components/ILIAS/AuthShibboleth/lang/shib_cs.po new file mode 100644 index 000000000000..a9027f75871f --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_cs.po @@ -0,0 +1,149 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +msgid "shib_add_missing" +msgstr "Přiřadit chybějící role" + +msgid "shib_add_remove" +msgstr "Přidat/Odstranit Role" + +msgid "shib_assignment_type" +msgstr "Druh přiřazení" + +msgid "shib_attr_info" +msgstr "Přiřadit specifickým atributem v uživatelském profilu Shibboleth." + +msgid "shib_attribute" +msgstr "Uživatelský atribut" + +msgid "shib_attribute_name" +msgstr "Název atributu" + +msgid "shib_attribute_value" +msgstr "Hodnota atributu" + +msgid "shib_check_role_assignment" +msgstr "Přiřazení role po dalším přihlášení" + +msgid "shib_choose_role" +msgstr "Výběr role" + +msgid "shib_confirm_del_role_ass" +msgstr "Skutečně chcete smazat následující pravidla?" + +msgid "shib_deleted_rule" +msgstr "Smazat přiřazení role." + +msgid "shib_global_role" +msgstr "Globální role" + +msgid "shib_ilias_role" +msgstr "Název role ILIAS" + +msgid "shib_local_role" +msgstr "Lokální role" + +msgid "shib_missing_attr_name" +msgstr "Vložte prosím jméno atributu." + +msgid "shib_missing_attr_value" +msgstr "Vložte prosím hodnotu atributu." + +msgid "shib_missing_plugin_id" +msgstr "Vložte prosím platný id pluginu." + +msgid "shib_missing_role" +msgstr "Vyberte prosím jednu roli." + +msgid "shib_new_rule" +msgstr "Přidat nové pravidlo" + +msgid "shib_plugin" +msgstr "Přiřazení Pluginem" + +msgid "shib_plugin_id" +msgstr "Id Pluginu" + +msgid "shib_plugin_info" +msgstr "Ověřte prosím přířazení role s pluginem. Vložte prosím platný id pluginu." + +msgid "shib_remove_deprecated" +msgstr "Zrušit přiřazení neschválených rolí" + +msgid "shib_role_ass_table" +msgstr "Nové pravidlo pro přiřazení rolí" + +msgid "shib_role_assignment" +msgstr "Přiřazení rolí" + +msgid "shib_role_by_attribute" +msgstr "Atribut Shibboleth" + +msgid "shib_role_by_plugin" +msgstr "Podle Pluginů" + +msgid "shib_role_name" +msgstr "Název role ILIAS" + +msgid "shib_role_name_info" +msgstr "Vyberte prosím globální roli nebo vložte jméno lokální role." + +msgid "shib_role_selection" +msgstr "Výběr role" + +msgid "shib_rule_condition" +msgstr "Podmínka" + +msgid "shib_rule_type" +msgstr "Typ přiřazení" + +msgid "shib_rules_tables" +msgstr "Aktivní Role přiřazení práv" + +msgid "shib_settings" +msgstr "Nastavení Shibboleth" + +msgid "shib_update_role_ass_table" +msgstr "Upravit pravidla přiřazení role" + +msgid "shib_update_roles" +msgstr "Přiřazení role" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_da.po b/components/ILIAS/AuthShibboleth/lang/shib_da.po new file mode 100644 index 000000000000..48015b4fd4ac --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_da.po @@ -0,0 +1,169 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +msgid "shib_add_missing" +msgstr "Tildel manglende roller" + +msgid "shib_add_remove" +msgstr "Tilføj/fjern roller" + +#, fuzzy +msgid "shib_assignment_type" +msgstr "Kind of Assignment" + +#, fuzzy +msgid "shib_attr_info" +msgstr "Assign by a specific attribute in the Shibboleth User Profile." + +#, fuzzy +msgid "shib_attribute" +msgstr "User Attribute" + +#, fuzzy +msgid "shib_attribute_name" +msgstr "Attribute Name" + +#, fuzzy +msgid "shib_attribute_value" +msgstr "Attribute Value" + +#, fuzzy +msgid "shib_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +msgid "shib_choose_role" +msgstr "Vælg rolle" + +#, fuzzy +msgid "shib_confirm_del_role_ass" +msgstr "Do you really want to delete the following rules?" + +#, fuzzy +msgid "shib_deleted_rule" +msgstr "Deleted role assignments." + +msgid "shib_global_role" +msgstr "Global rolle" + +#, fuzzy +msgid "shib_ilias_role" +msgstr "ILIAS Role Name" + +msgid "shib_local_role" +msgstr "Lokal rolle" + +#, fuzzy +msgid "shib_missing_attr_name" +msgstr "Please enter the attribute name." + +#, fuzzy +msgid "shib_missing_attr_value" +msgstr "Please enter the attribute value." + +#, fuzzy +msgid "shib_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +msgid "shib_missing_role" +msgstr "Vælg en rolle." + +msgid "shib_new_rule" +msgstr "Lav ny regel" + +#, fuzzy +msgid "shib_plugin" +msgstr "Assignment by Plugin" + +msgid "shib_plugin_id" +msgstr "Plugin Id" + +#, fuzzy +msgid "shib_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +#, fuzzy +msgid "shib_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +msgid "shib_role_ass_table" +msgstr "Ny regel for rolletildelinger" + +msgid "shib_role_assignment" +msgstr "Tildelte roller" + +#, fuzzy +msgid "shib_role_by_attribute" +msgstr "Shibboleth Attribute" + +msgid "shib_role_by_plugin" +msgstr "Efter Plugin" + +msgid "shib_role_name" +msgstr "ILIAS rollenavn" + +#, fuzzy +msgid "shib_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +msgid "shib_role_selection" +msgstr "Valg af rolle" + +msgid "shib_rule_condition" +msgstr "Betingelse" + +#, fuzzy +msgid "shib_rule_type" +msgstr "Type of Assignment" + +#, fuzzy +msgid "shib_rules_tables" +msgstr "Active Role Assignment Rules" + +msgid "shib_settings" +msgstr "Shibboleth indstillinger" + +#, fuzzy +msgid "shib_update_role_ass_table" +msgstr "Edit Role Assignment Rule" + +msgid "shib_update_roles" +msgstr "Tildelte roller" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_de.po b/components/ILIAS/AuthShibboleth/lang/shib_de.po new file mode 100644 index 000000000000..87b63b149bd0 --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_de.po @@ -0,0 +1,141 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: shib\n" + +msgid "shib_account_creation" +msgstr "Erstellung von Anmeldekonten" + +msgid "shib_account_creation_disabled" +msgstr "Deaktiviert" + +msgid "shib_account_creation_disabled_info" +msgstr "Es wird kein neues Anmeldekonto angelegt." + +msgid "shib_account_creation_enabled" +msgstr "Aktiviert" + +msgid "shib_account_creation_enabled_info" +msgstr "Ein aktives neues Anmeldekonto wird angelegt." + +msgid "shib_account_creation_info" +msgstr "Die Kontoerstellung wird ausgelöst, wenn ein Benutzer ohne ein bereits bestehendes ILIAS-Konto versucht, sich über Shibboleth anzumelden." + +msgid "shib_account_creation_with_approval" +msgstr "Mit Freischaltung" + +msgid "shib_account_creation_with_approval_info" +msgstr "Ein inaktives neues Anmeldekonto wird angelegt. Das Konto bleibt inaktiv, bis es von der technischen Betreuung freigeschaltet wird." + +msgid "shib_add_missing" +msgstr "Fehlende Rollen zuordnen" + +msgid "shib_add_remove" +msgstr "Rollen hinzufügen/entfernen" + +msgid "shib_assignment_type" +msgstr "Art der Zuordnung" + +msgid "shib_attr_info" +msgstr "Die Zuordnung erfolgt anhand eines bestimmten Attributs im Shibboleth-Konto." + +msgid "shib_attribute" +msgstr "Benutzerattribut" + +msgid "shib_attribute_name" +msgstr "Attributname" + +msgid "shib_attribute_value" +msgstr "Attributwert" + +msgid "shib_check_role_assignment" +msgstr "Aktualisierung der Rollenzuordnungen bei jeder Anmeldung:" + +msgid "shib_choose_role" +msgstr "Rolle übernehmen" + +msgid "shib_confirm_del_role_ass" +msgstr "Sind Sie sicher, dass Sie die folgenden Zuordnungen löschen möchten?" + +msgid "shib_deleted_rule" +msgstr "Die Zuordnungsregeln wurden gelöscht." + +msgid "shib_global_role" +msgstr "Globale Rolle" + +msgid "shib_ilias_role" +msgstr "ILIAS-Rollenname" + +msgid "shib_local_role" +msgstr "Lokale Rolle" + +msgid "shib_missing_attr_name" +msgstr "Bitte geben Sie den Namen des Attributes ein." + +msgid "shib_missing_attr_value" +msgstr "Bitte geben Sie den Wert des Attributes ein." + +msgid "shib_missing_plugin_id" +msgstr "Bitte geben Sie eine eindeutige Plugin-ID ein." + +msgid "shib_missing_role" +msgstr "Bitte wählen Sie eine ILIAS-Rolle aus." + +msgid "shib_new_rule" +msgstr "Neue Regel anlegen" + +msgid "shib_plugin" +msgstr "Zuordnung durch Plugin" + +msgid "shib_plugin_id" +msgstr "Plugin-ID" + +msgid "shib_plugin_info" +msgstr "Falls die Zuordnung nicht mit einer einfachen Überprüfung (Attributname/-wert) erfolgen kann, können Sie die Zuordnung alternativ über ein Plugin regeln." + +msgid "shib_remove_deprecated" +msgstr "Unberechtigte Rollen entfernen" + +msgid "shib_role_ass_table" +msgstr "Neue Regel für die ILIAS-Rollenzuordnung" + +msgid "shib_role_assignment" +msgstr "Rollenzuordnungen" + +msgid "shib_role_by_attribute" +msgstr "Benutzerattribut" + +msgid "shib_role_by_plugin" +msgstr "Durch Plugin" + +msgid "shib_role_name" +msgstr "ILIAS-Rollenname" + +msgid "shib_role_name_info" +msgstr "Bitte wählen Sie entweder eine globale Rolle aus oder geben Sie den Namen einer lokalen Rolle ein." + +msgid "shib_role_selection" +msgstr "Rollenauswahl" + +msgid "shib_rule_condition" +msgstr "Bedingung" + +msgid "shib_rule_type" +msgstr "Art der Zuordnung" + +msgid "shib_rules_tables" +msgstr "Aktive Regeln für die Rollenzuordnung" + +msgid "shib_settings" +msgstr "Shibboleth-Einstellungen" + +msgid "shib_update_role_ass_table" +msgstr "Regel zur Rollenzuordnung bearbeiten" + +msgid "shib_update_roles" +msgstr "Rollenzuordnungen" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_el.po b/components/ILIAS/AuthShibboleth/lang/shib_el.po new file mode 100644 index 000000000000..1efd82f0d87b --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_el.po @@ -0,0 +1,185 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +#, fuzzy +msgid "shib_add_missing" +msgstr "Assign Missing Roles" + +#, fuzzy +msgid "shib_add_remove" +msgstr "Add/Remove Roles" + +#, fuzzy +msgid "shib_assignment_type" +msgstr "Kind of Assignment" + +#, fuzzy +msgid "shib_attr_info" +msgstr "Assign by a specific attribute in the Shibboleth User Profile." + +#, fuzzy +msgid "shib_attribute" +msgstr "User Attribute" + +#, fuzzy +msgid "shib_attribute_name" +msgstr "Attribute Name" + +#, fuzzy +msgid "shib_attribute_value" +msgstr "Attribute Value" + +#, fuzzy +msgid "shib_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +#, fuzzy +msgid "shib_choose_role" +msgstr "Choose Role" + +#, fuzzy +msgid "shib_confirm_del_role_ass" +msgstr "Do you really want to delete the following rules?" + +#, fuzzy +msgid "shib_deleted_rule" +msgstr "Deleted role assignments." + +#, fuzzy +msgid "shib_global_role" +msgstr "Global Role" + +#, fuzzy +msgid "shib_ilias_role" +msgstr "ILIAS Role Name" + +#, fuzzy +msgid "shib_local_role" +msgstr "Local Role" + +#, fuzzy +msgid "shib_missing_attr_name" +msgstr "Please enter the attribute name." + +#, fuzzy +msgid "shib_missing_attr_value" +msgstr "Please enter the attribute value." + +#, fuzzy +msgid "shib_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "shib_missing_role" +msgstr "Please select one role." + +#, fuzzy +msgid "shib_new_rule" +msgstr "Add new Rule" + +#, fuzzy +msgid "shib_plugin" +msgstr "Assignment by Plugin" + +#, fuzzy +msgid "shib_plugin_id" +msgstr "Plugin Id" + +#, fuzzy +msgid "shib_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +#, fuzzy +msgid "shib_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +#, fuzzy +msgid "shib_role_ass_table" +msgstr "New Rule for Role Assignments" + +#, fuzzy +msgid "shib_role_assignment" +msgstr "Role Assignments" + +#, fuzzy +msgid "shib_role_by_attribute" +msgstr "Shibboleth Attribute" + +#, fuzzy +msgid "shib_role_by_plugin" +msgstr "By Plugin" + +#, fuzzy +msgid "shib_role_name" +msgstr "ILIAS Role Name" + +#, fuzzy +msgid "shib_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +#, fuzzy +msgid "shib_role_selection" +msgstr "Role Selection" + +#, fuzzy +msgid "shib_rule_condition" +msgstr "Condition" + +#, fuzzy +msgid "shib_rule_type" +msgstr "Type of Assignment" + +#, fuzzy +msgid "shib_rules_tables" +msgstr "Active Role Assignment Rules" + +#, fuzzy +msgid "shib_settings" +msgstr "Shibboleth Settings" + +#, fuzzy +msgid "shib_update_role_ass_table" +msgstr "Edit Role Assignment Rule" + +#, fuzzy +msgid "shib_update_roles" +msgstr "Role Assignments" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_en.po b/components/ILIAS/AuthShibboleth/lang/shib_en.po new file mode 100644 index 000000000000..96410976b8d6 --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_en.po @@ -0,0 +1,141 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: shib\n" + +msgid "shib_account_creation" +msgstr "Account Creation" + +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +msgid "shib_add_missing" +msgstr "Assign Missing Roles" + +msgid "shib_add_remove" +msgstr "Add/Remove Roles" + +msgid "shib_assignment_type" +msgstr "Kind of Assignment" + +msgid "shib_attr_info" +msgstr "Assign by a specific attribute in the Shibboleth User Profile." + +msgid "shib_attribute" +msgstr "User Attribute" + +msgid "shib_attribute_name" +msgstr "Attribute Name" + +msgid "shib_attribute_value" +msgstr "Attribute Value" + +msgid "shib_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +msgid "shib_choose_role" +msgstr "Choose Role" + +msgid "shib_confirm_del_role_ass" +msgstr "Do you really want to delete the following rules?" + +msgid "shib_deleted_rule" +msgstr "Deleted role assignments." + +msgid "shib_global_role" +msgstr "Global Role" + +msgid "shib_ilias_role" +msgstr "ILIAS Role Name" + +msgid "shib_local_role" +msgstr "Local Role" + +msgid "shib_missing_attr_name" +msgstr "Please enter the attribute name." + +msgid "shib_missing_attr_value" +msgstr "Please enter the attribute value." + +msgid "shib_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +msgid "shib_missing_role" +msgstr "Please select one role." + +msgid "shib_new_rule" +msgstr "Add new Rule" + +msgid "shib_plugin" +msgstr "Assignment by Plugin" + +msgid "shib_plugin_id" +msgstr "Plugin ID" + +msgid "shib_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +msgid "shib_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +msgid "shib_role_ass_table" +msgstr "New Rule for Role Assignments" + +msgid "shib_role_assignment" +msgstr "Role Assignments" + +msgid "shib_role_by_attribute" +msgstr "Shibboleth Attribute" + +msgid "shib_role_by_plugin" +msgstr "By Plugin" + +msgid "shib_role_name" +msgstr "ILIAS Role Name" + +msgid "shib_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +msgid "shib_role_selection" +msgstr "Role Selection" + +msgid "shib_rule_condition" +msgstr "Condition" + +msgid "shib_rule_type" +msgstr "Type of Assignment" + +msgid "shib_rules_tables" +msgstr "Active Role Assignment Rules" + +msgid "shib_settings" +msgstr "Shibboleth Settings" + +msgid "shib_update_role_ass_table" +msgstr "Edit Role Assignment Rule" + +msgid "shib_update_roles" +msgstr "Role Assignments" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_es.po b/components/ILIAS/AuthShibboleth/lang/shib_es.po new file mode 100644 index 000000000000..cf091bbf4d11 --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_es.po @@ -0,0 +1,141 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: shib\n" + +msgid "shib_account_creation" +msgstr "Creación de cuenta" + +msgid "shib_account_creation_disabled" +msgstr "Desactivado" + +msgid "shib_account_creation_disabled_info" +msgstr "No se creará ninguna cuenta nueva." + +msgid "shib_account_creation_enabled" +msgstr "Activado" + +msgid "shib_account_creation_enabled_info" +msgstr "Se crea una nueva cuenta activa." + +msgid "shib_account_creation_info" +msgstr "La creación de la cuenta se activa cuando un usuario sin una cuenta de ILIAS preexistente intenta iniciar sesión a través de Shibboleth." + +msgid "shib_account_creation_with_approval" +msgstr "Con aprobación" + +msgid "shib_account_creation_with_approval_info" +msgstr "Se crea una nueva cuenta inactiva. La cuenta permanece inactiva hasta que sea activada por un administrador." + +msgid "shib_add_missing" +msgstr "Asignar roles faltantes" + +msgid "shib_add_remove" +msgstr "Agregar/Eliminar roles" + +msgid "shib_assignment_type" +msgstr "Tipo de asignación" + +msgid "shib_attr_info" +msgstr "Asignar por un atributo específico en el perfil de usuario de Shibboleth." + +msgid "shib_attribute" +msgstr "Atributo de usuario" + +msgid "shib_attribute_name" +msgstr "Nombre del atributo" + +msgid "shib_attribute_value" +msgstr "Valor del atributo" + +msgid "shib_check_role_assignment" +msgstr "Asignación de roles tras inicios de sesión posteriores" + +msgid "shib_choose_role" +msgstr "Elegir rol" + +msgid "shib_confirm_del_role_ass" +msgstr "¿Realmente desea eliminar las siguientes reglas?" + +msgid "shib_deleted_rule" +msgstr "Asignaciones de roles eliminadas." + +msgid "shib_global_role" +msgstr "Rol global" + +msgid "shib_ilias_role" +msgstr "Nombre del rol de ILIAS" + +msgid "shib_local_role" +msgstr "Rol local" + +msgid "shib_missing_attr_name" +msgstr "Por favor, introduzca el nombre del atributo." + +msgid "shib_missing_attr_value" +msgstr "Por favor, introduzca el valor del atributo." + +msgid "shib_missing_plugin_id" +msgstr "Por favor, introduzca un ID de plugin válido." + +msgid "shib_missing_role" +msgstr "Por favor, seleccione un rol." + +msgid "shib_new_rule" +msgstr "Agregar nueva regla" + +msgid "shib_plugin" +msgstr "Asignación por plugin" + +msgid "shib_plugin_id" +msgstr "ID del plugin" + +msgid "shib_plugin_info" +msgstr "Validar la asignación de roles con un plugin. Por favor, introduzca un ID de plugin válido." + +msgid "shib_remove_deprecated" +msgstr "Desasignar roles obsoletos" + +msgid "shib_role_ass_table" +msgstr "Nueva regla para asignaciones de roles" + +msgid "shib_role_assignment" +msgstr "Asignaciones de roles" + +msgid "shib_role_by_attribute" +msgstr "Atributo de Shibboleth" + +msgid "shib_role_by_plugin" +msgstr "Por plugin" + +msgid "shib_role_name" +msgstr "Nombre del rol de ILIAS" + +msgid "shib_role_name_info" +msgstr "Por favor, elija un rol global o introduzca el nombre de un rol local." + +msgid "shib_role_selection" +msgstr "Selección de rol" + +msgid "shib_rule_condition" +msgstr "Condición" + +msgid "shib_rule_type" +msgstr "Tipo de Asignación" + +msgid "shib_rules_tables" +msgstr "Reglas de Asignación de Roles Activas" + +msgid "shib_settings" +msgstr "Ajustes de Shibboleth" + +msgid "shib_update_role_ass_table" +msgstr "Editar Regla de Asignación de Roles" + +msgid "shib_update_roles" +msgstr "Asignaciones de Roles" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_et.po b/components/ILIAS/AuthShibboleth/lang/shib_et.po new file mode 100644 index 000000000000..333e60047e9b --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_et.po @@ -0,0 +1,149 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +msgid "shib_add_missing" +msgstr "Assign Missing Roles" + +msgid "shib_add_remove" +msgstr "Add/Remove Roles" + +msgid "shib_assignment_type" +msgstr "Kind of Assignment" + +msgid "shib_attr_info" +msgstr "Assign by a specific attribute in the Shibboleth User Profile." + +msgid "shib_attribute" +msgstr "User Attribute" + +msgid "shib_attribute_name" +msgstr "Attribute Name" + +msgid "shib_attribute_value" +msgstr "Attribute Value" + +msgid "shib_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +msgid "shib_choose_role" +msgstr "Choose Role" + +msgid "shib_confirm_del_role_ass" +msgstr "Do you really want to delete the following rules?" + +msgid "shib_deleted_rule" +msgstr "Deleted role assignments." + +msgid "shib_global_role" +msgstr "Global Role" + +msgid "shib_ilias_role" +msgstr "ILIAS Role Name" + +msgid "shib_local_role" +msgstr "Kohalik roll" + +msgid "shib_missing_attr_name" +msgstr "Please enter the attribute name." + +msgid "shib_missing_attr_value" +msgstr "Please enter the attribute value." + +msgid "shib_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +msgid "shib_missing_role" +msgstr "Please select one role." + +msgid "shib_new_rule" +msgstr "Add new Rule" + +msgid "shib_plugin" +msgstr "Assignment by Plugin" + +msgid "shib_plugin_id" +msgstr "Plugin Id" + +msgid "shib_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +msgid "shib_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +msgid "shib_role_ass_table" +msgstr "New Rule for Role Assignments" + +msgid "shib_role_assignment" +msgstr "Role Assignments" + +msgid "shib_role_by_attribute" +msgstr "Shibboleth Attribute" + +msgid "shib_role_by_plugin" +msgstr "By Plugin" + +msgid "shib_role_name" +msgstr "ILIAS Role Name" + +msgid "shib_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +msgid "shib_role_selection" +msgstr "Role Selection" + +msgid "shib_rule_condition" +msgstr "Condition" + +msgid "shib_rule_type" +msgstr "Type of Assignment" + +msgid "shib_rules_tables" +msgstr "Active Role Assignment Rules" + +msgid "shib_settings" +msgstr "Shibboleth Settings" + +msgid "shib_update_role_ass_table" +msgstr "Edit Role Assignment Rule" + +msgid "shib_update_roles" +msgstr "Role Assignments" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_fa.po b/components/ILIAS/AuthShibboleth/lang/shib_fa.po new file mode 100644 index 000000000000..1ce851955875 --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_fa.po @@ -0,0 +1,149 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +msgid "shib_add_missing" +msgstr "Assign Missing Roles" + +msgid "shib_add_remove" +msgstr "Add/Remove Roles" + +msgid "shib_assignment_type" +msgstr "Kind of Assignment" + +msgid "shib_attr_info" +msgstr "Assign by a specific attribute in the Shibboleth User Profile." + +msgid "shib_attribute" +msgstr "User Attribute" + +msgid "shib_attribute_name" +msgstr "Attribute Name" + +msgid "shib_attribute_value" +msgstr "Attribute Value" + +msgid "shib_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +msgid "shib_choose_role" +msgstr "Choose Role" + +msgid "shib_confirm_del_role_ass" +msgstr "Do you really want to delete the following rules?" + +msgid "shib_deleted_rule" +msgstr "Deleted role assignments." + +msgid "shib_global_role" +msgstr "Global Role" + +msgid "shib_ilias_role" +msgstr "ILIAS Role Name" + +msgid "shib_local_role" +msgstr "Local Role" + +msgid "shib_missing_attr_name" +msgstr "Please enter the attribute name." + +msgid "shib_missing_attr_value" +msgstr "Please enter the attribute value." + +msgid "shib_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +msgid "shib_missing_role" +msgstr "Please select one role." + +msgid "shib_new_rule" +msgstr "Add new Rule" + +msgid "shib_plugin" +msgstr "Assignment by Plugin" + +msgid "shib_plugin_id" +msgstr "Plugin Id" + +msgid "shib_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +msgid "shib_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +msgid "shib_role_ass_table" +msgstr "New Rule for Role Assignments" + +msgid "shib_role_assignment" +msgstr "Role Assignments" + +msgid "shib_role_by_attribute" +msgstr "Shibboleth Attribute" + +msgid "shib_role_by_plugin" +msgstr "By Plugin" + +msgid "shib_role_name" +msgstr "ILIAS Role Name" + +msgid "shib_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +msgid "shib_role_selection" +msgstr "Role Selection" + +msgid "shib_rule_condition" +msgstr "Condition" + +msgid "shib_rule_type" +msgstr "Type of Assignment" + +msgid "shib_rules_tables" +msgstr "Active Role Assignment Rules" + +msgid "shib_settings" +msgstr "Shibboleth Settings" + +msgid "shib_update_role_ass_table" +msgstr "Edit Role Assignment Rule" + +msgid "shib_update_roles" +msgstr "Role Assignments" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_fr.po b/components/ILIAS/AuthShibboleth/lang/shib_fr.po new file mode 100644 index 000000000000..c1bb6c37e67e --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_fr.po @@ -0,0 +1,149 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +msgid "shib_add_missing" +msgstr "Assigner rôles manquants" + +msgid "shib_add_remove" +msgstr "Ajouter/supprimer rôles" + +msgid "shib_assignment_type" +msgstr "Type d'Attribution" + +msgid "shib_attr_info" +msgstr "Assigner par un attribut spécifique dans le profil de l'utilisateur Shibboleth." + +msgid "shib_attribute" +msgstr "Attribut d'utilisateur" + +msgid "shib_attribute_name" +msgstr "Nom d'attribut" + +msgid "shib_attribute_value" +msgstr "Valeur d'attribut" + +msgid "shib_check_role_assignment" +msgstr "Assignation de rôles après connexions ultérieures (login)" + +msgid "shib_choose_role" +msgstr "Choisir rôle" + +msgid "shib_confirm_del_role_ass" +msgstr "Désirez-vous réellement supprimer les règles suivantes ?" + +msgid "shib_deleted_rule" +msgstr "Assignations de rôle supprimées." + +msgid "shib_global_role" +msgstr "Rôle global" + +msgid "shib_ilias_role" +msgstr "Nom de rôle ILIAS" + +msgid "shib_local_role" +msgstr "Rôle local" + +msgid "shib_missing_attr_name" +msgstr "Veuillez saisir le nom d'attribut." + +msgid "shib_missing_attr_value" +msgstr "Veuillez saisir la valeur d'attribut." + +msgid "shib_missing_plugin_id" +msgstr "Veuillez saisir un ID de plugin valide." + +msgid "shib_missing_role" +msgstr "Veuillez saisir un rôle." + +msgid "shib_new_rule" +msgstr "Ajouter nouvelle règle" + +msgid "shib_plugin" +msgstr "Assignation par plugin" + +msgid "shib_plugin_id" +msgstr "Id de plugin" + +msgid "shib_plugin_info" +msgstr "Valider l'assignation de rôle avec un plugin. Veuillez saisir un id de plugin valide." + +msgid "shib_remove_deprecated" +msgstr "Déassigner rôles obsolètes" + +msgid "shib_role_ass_table" +msgstr "Nouvelle règle pour assignations de rôle" + +msgid "shib_role_assignment" +msgstr "Assignations de rôle" + +msgid "shib_role_by_attribute" +msgstr "Attribut de Shibboleth" + +msgid "shib_role_by_plugin" +msgstr "Par plugin" + +msgid "shib_role_name" +msgstr "Nom de rôle ILIAS" + +msgid "shib_role_name_info" +msgstr "Veuillez soit choisir un rôle global soit saisir le nom d'un rôle local." + +msgid "shib_role_selection" +msgstr "Sélection de rôle" + +msgid "shib_rule_condition" +msgstr "Condition" + +msgid "shib_rule_type" +msgstr "Type d'assignation" + +msgid "shib_rules_tables" +msgstr "Activer règles d'assignation de rôle" + +msgid "shib_settings" +msgstr "Paramètres de Shibboleth" + +msgid "shib_update_role_ass_table" +msgstr "Modifier règle d'assignation de rôle" + +msgid "shib_update_roles" +msgstr "Assignations de rôle" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_hr.po b/components/ILIAS/AuthShibboleth/lang/shib_hr.po new file mode 100644 index 000000000000..a0b18daed229 --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_hr.po @@ -0,0 +1,149 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +msgid "shib_add_missing" +msgstr "Assign Missing Roles" + +msgid "shib_add_remove" +msgstr "Add/Remove Roles" + +msgid "shib_assignment_type" +msgstr "Kind of Assignment" + +msgid "shib_attr_info" +msgstr "Assign by a specific attribute in the Shibboleth User Profile." + +msgid "shib_attribute" +msgstr "User Attribute" + +msgid "shib_attribute_name" +msgstr "Attribute Name" + +msgid "shib_attribute_value" +msgstr "Attribute Value" + +msgid "shib_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +msgid "shib_choose_role" +msgstr "Choose Role" + +msgid "shib_confirm_del_role_ass" +msgstr "Do you really want to delete the following rules?" + +msgid "shib_deleted_rule" +msgstr "Deleted role assignments." + +msgid "shib_global_role" +msgstr "Global Role" + +msgid "shib_ilias_role" +msgstr "ILIAS Role Name" + +msgid "shib_local_role" +msgstr "Local Role" + +msgid "shib_missing_attr_name" +msgstr "Please enter the attribute name." + +msgid "shib_missing_attr_value" +msgstr "Please enter the attribute value." + +msgid "shib_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +msgid "shib_missing_role" +msgstr "Please select one role." + +msgid "shib_new_rule" +msgstr "Add new Rule" + +msgid "shib_plugin" +msgstr "Assignment by Plugin" + +msgid "shib_plugin_id" +msgstr "Plugin Id" + +msgid "shib_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +msgid "shib_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +msgid "shib_role_ass_table" +msgstr "New Rule for Role Assignments" + +msgid "shib_role_assignment" +msgstr "Role Assignments" + +msgid "shib_role_by_attribute" +msgstr "Shibboleth Attribute" + +msgid "shib_role_by_plugin" +msgstr "By Plugin" + +msgid "shib_role_name" +msgstr "ILIAS Role Name" + +msgid "shib_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +msgid "shib_role_selection" +msgstr "Role Selection" + +msgid "shib_rule_condition" +msgstr "Condition" + +msgid "shib_rule_type" +msgstr "Type of Assignment" + +msgid "shib_rules_tables" +msgstr "Active Role Assignment Rules" + +msgid "shib_settings" +msgstr "Shibboleth Settings" + +msgid "shib_update_role_ass_table" +msgstr "Edit Role Assignment Rule" + +msgid "shib_update_roles" +msgstr "Role Assignments" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_hu.po b/components/ILIAS/AuthShibboleth/lang/shib_hu.po new file mode 100644 index 000000000000..bfd652540a02 --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_hu.po @@ -0,0 +1,141 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: shib\n" + +msgid "shib_account_creation" +msgstr "ILIAS-fiók létrehozása" + +msgid "shib_account_creation_disabled" +msgstr "Kikapcsolva" + +msgid "shib_account_creation_disabled_info" +msgstr "Egy új ILIAS-fiókot sem hoztunk létre" + +msgid "shib_account_creation_enabled" +msgstr "Bekapcsolva" + +msgid "shib_account_creation_enabled_info" +msgstr "Egy új ILIAS-fiókot hoztunk létre." + +msgid "shib_account_creation_info" +msgstr "Az ILIAS-fiók akkor jön létre, amikor egy felhasználó még nem létező ILIAS-fiókba próbál bejelentkezni Shibboleth-en keresztül." + +msgid "shib_account_creation_with_approval" +msgstr "Jóváhagyással" + +msgid "shib_account_creation_with_approval_info" +msgstr "Egy új, inkatív ILIAS-fiókot hoztunk létre. A felhasználót megfelelő jogosultsággal lehet aktiválni." + +msgid "shib_add_missing" +msgstr "Hiányzó szerepkörök összerendelése" + +msgid "shib_add_remove" +msgstr "Szerepkörök létrehozása/eltávolítása" + +msgid "shib_assignment_type" +msgstr "Összerendelés fajtája" + +msgid "shib_attr_info" +msgstr "A Shibboleth felhasználói profilban egy adott tulajdonsággal összerendelve." + +msgid "shib_attribute" +msgstr "Felhasználói tulajdonság" + +msgid "shib_attribute_name" +msgstr "Tulajdonságnév" + +msgid "shib_attribute_value" +msgstr "Tulajdonságérték" + +msgid "shib_check_role_assignment" +msgstr "Későbbi bejelentkezések utáni szerepkörök összerendelése" + +msgid "shib_choose_role" +msgstr "Szerepkör választása" + +msgid "shib_confirm_del_role_ass" +msgstr "Biztos, hogy törli az alábbi szabályokat?" + +msgid "shib_deleted_rule" +msgstr "Szerep-összerendeléseket sikeresen törölte." + +msgid "shib_global_role" +msgstr "Globális szerepkör" + +msgid "shib_ilias_role" +msgstr "ILIAS-szerepnév" + +msgid "shib_local_role" +msgstr "Lokális szerepkör" + +msgid "shib_missing_attr_name" +msgstr "Adja meg a tulajdonság nevét!" + +msgid "shib_missing_attr_value" +msgstr "Adja meg a tulajdonság értékét!" + +msgid "shib_missing_plugin_id" +msgstr "Érvényes bővítmény-azonosítót adjon meg!" + +msgid "shib_missing_role" +msgstr "Válasszon egy szerepkört!" + +msgid "shib_new_rule" +msgstr "Új szabály létrehozása" + +msgid "shib_plugin" +msgstr "Összerendelés bővítménnyel" + +msgid "shib_plugin_id" +msgstr "Bővítmény-azonosító" + +msgid "shib_plugin_info" +msgstr "Szerep-összerendelés érvényesítése bővítménnyel. Adjon meg egy valós bővítmény-azonosítót." + +msgid "shib_remove_deprecated" +msgstr "Érvénytelen szerepkörök összerendelésének megszüntetése" + +msgid "shib_role_ass_table" +msgstr "Új szabály a szerep-összerendelésekhez" + +msgid "shib_role_assignment" +msgstr "Szerep-összerendelés" + +msgid "shib_role_by_attribute" +msgstr "Shibboleth-tulajdonság" + +msgid "shib_role_by_plugin" +msgstr "Bővítménnyel" + +msgid "shib_role_name" +msgstr "ILIAS-szerepkör néve" + +msgid "shib_role_name_info" +msgstr "Válasszon egy globális szerepkört, vagy adja meg egy helyi szerepkör nevét!" + +msgid "shib_role_selection" +msgstr "Szerepkör kiválasztása" + +msgid "shib_rule_condition" +msgstr "Feltétel" + +msgid "shib_rule_type" +msgstr "Összerendelés típusa" + +msgid "shib_rules_tables" +msgstr "Aktív szerep-összerendelés szabályai" + +msgid "shib_settings" +msgstr "Shibboleth beállítások" + +msgid "shib_update_role_ass_table" +msgstr "Szerep-összerendelés szabályainak módosítása" + +msgid "shib_update_roles" +msgstr "Szerep-összerendelések" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_it.po b/components/ILIAS/AuthShibboleth/lang/shib_it.po new file mode 100644 index 000000000000..076339787f40 --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_it.po @@ -0,0 +1,150 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +msgid "shib_add_missing" +msgstr "Assegna Ruoli Mancanti" + +msgid "shib_add_remove" +msgstr "Aggiungi/Rimuovi Ruoli" + +msgid "shib_assignment_type" +msgstr "Tipo di assegnazione" + +msgid "shib_attr_info" +msgstr "Assegnato da un attributo specifico del Profilo Utente Shibboleth" + +msgid "shib_attribute" +msgstr "Attributo Utente" + +msgid "shib_attribute_name" +msgstr "Nome Attributo" + +msgid "shib_attribute_value" +msgstr "Valore Attributo" + +msgid "shib_check_role_assignment" +msgstr "Assegnazione di Ruoli dopo Login a posteriori" + +msgid "shib_choose_role" +msgstr "Scegli Ruolo" + +msgid "shib_confirm_del_role_ass" +msgstr "Vuoi veramente cancellare le regole seguenti?" + +msgid "shib_deleted_rule" +msgstr "Cancellato le assegnazioni di ruolo" + +msgid "shib_global_role" +msgstr "Ruolo Globale" + +#, fuzzy +msgid "shib_ilias_role" +msgstr "ILIAS Role Name" + +msgid "shib_local_role" +msgstr "Ruolo Locale" + +msgid "shib_missing_attr_name" +msgstr "Per favore inserisci il nome dell'attributo" + +msgid "shib_missing_attr_value" +msgstr "Per favore inserisci il valore dell'attributo." + +msgid "shib_missing_plugin_id" +msgstr "Inserire un ID di plugin valido." + +msgid "shib_missing_role" +msgstr "Per favore seleziona un Ruolo" + +msgid "shib_new_rule" +msgstr "Aggiungi nuova regola" + +msgid "shib_plugin" +msgstr "Assegnazione via Plugin" + +msgid "shib_plugin_id" +msgstr "Id Plug-in" + +msgid "shib_plugin_info" +msgstr "Validare l'assegnazione ruolo con un plugin. Inserire un ID plugin valido." + +msgid "shib_remove_deprecated" +msgstr "Non assegnare ruoli criticati" + +msgid "shib_role_ass_table" +msgstr "Nuova regola di Assegnazione Ruolo" + +msgid "shib_role_assignment" +msgstr "Assegnazione Ruoli" + +msgid "shib_role_by_attribute" +msgstr "Attributo Shibboleth" + +msgid "shib_role_by_plugin" +msgstr "Tramite Plug-in" + +msgid "shib_role_name" +msgstr "Nome Ruolo ILIAS" + +msgid "shib_role_name_info" +msgstr "Scegliere un Ruolo Globale o inserire nome di un Ruolo Locale" + +msgid "shib_role_selection" +msgstr "Selezione Ruolo" + +msgid "shib_rule_condition" +msgstr "Condizione" + +msgid "shib_rule_type" +msgstr "Tipo di assegnazione" + +msgid "shib_rules_tables" +msgstr "Regole assegnazione Ruolo Attivo" + +msgid "shib_settings" +msgstr "Impostazioni Shibboleth" + +msgid "shib_update_role_ass_table" +msgstr "Modifica Regola di Assegnazione Ruolo" + +msgid "shib_update_roles" +msgstr "Assegnazioni Ruoli" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_ja.po b/components/ILIAS/AuthShibboleth/lang/shib_ja.po new file mode 100644 index 000000000000..acfc00626a5a --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_ja.po @@ -0,0 +1,141 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: shib\n" + +msgid "shib_account_creation" +msgstr "アカウント作成" + +msgid "shib_account_creation_disabled" +msgstr "無効" + +msgid "shib_account_creation_disabled_info" +msgstr "新しいアカウントは作成されません。" + +msgid "shib_account_creation_enabled" +msgstr "有効化" + +msgid "shib_account_creation_enabled_info" +msgstr "新しいアクティブなアカウントが作成されました。" + +msgid "shib_account_creation_info" +msgstr "アカウント作成は、既存のILIASアカウントを持たないユーザーがShibboleth経由でログインしようとしたときに開始されます。" + +msgid "shib_account_creation_with_approval" +msgstr "承認あり" + +msgid "shib_account_creation_with_approval_info" +msgstr "非アクティブの新しいアカウントが作成されます。アカウントは管理者によって有効化されるまで非アクティブのままです。" + +msgid "shib_add_missing" +msgstr "不足の役割を割り当てる" + +msgid "shib_add_remove" +msgstr "役割の追加/削除" + +msgid "shib_assignment_type" +msgstr "割当ての種類" + +msgid "shib_attr_info" +msgstr "Shibbolethユーザプロファイルの特定の属性で割当てる" + +msgid "shib_attribute" +msgstr "ユーザ属性" + +msgid "shib_attribute_name" +msgstr "属性名" + +msgid "shib_attribute_value" +msgstr "属性値" + +msgid "shib_check_role_assignment" +msgstr "後でログインした後の役割の割当て" + +msgid "shib_choose_role" +msgstr "役割を選ぶ" + +msgid "shib_confirm_del_role_ass" +msgstr "本当に次の役割を削除しますか?" + +msgid "shib_deleted_rule" +msgstr "役割を削除します。" + +msgid "shib_global_role" +msgstr "グローバル役割" + +msgid "shib_ilias_role" +msgstr "ILIAS役割名" + +msgid "shib_local_role" +msgstr "ローカル役割" + +msgid "shib_missing_attr_name" +msgstr "属性名を入力してください。" + +msgid "shib_missing_attr_value" +msgstr "属性値を入力してください。" + +msgid "shib_missing_plugin_id" +msgstr "有効なプラグインIDを入力してください。" + +msgid "shib_missing_role" +msgstr "役割を1つ選択してください。" + +msgid "shib_new_rule" +msgstr "新しいルールを追加" + +msgid "shib_plugin" +msgstr "プラグインによる割当て" + +msgid "shib_plugin_id" +msgstr "プラグインID" + +msgid "shib_plugin_info" +msgstr "プラグイ付きの役割の割当てを検証します。 有効なプラグイン ID を入力してください。" + +msgid "shib_remove_deprecated" +msgstr "未使用の役割を解除" + +msgid "shib_role_ass_table" +msgstr "役割割り当ての新しいルール" + +msgid "shib_role_assignment" +msgstr "役割の割当て" + +msgid "shib_role_by_attribute" +msgstr "Shibboleth属性" + +msgid "shib_role_by_plugin" +msgstr "プラグインによる" + +msgid "shib_role_name" +msgstr "ILIAS役割名" + +msgid "shib_role_name_info" +msgstr "グローバル 役割を選ぶかまたはローカル役割名を入力してください。" + +msgid "shib_role_selection" +msgstr "役割選択" + +msgid "shib_rule_condition" +msgstr "条件" + +msgid "shib_rule_type" +msgstr "割当のタイプ" + +msgid "shib_rules_tables" +msgstr "有効な役割 割り当てのルール" + +msgid "shib_settings" +msgstr "Shibboleth設定" + +msgid "shib_update_role_ass_table" +msgstr "役割割当のルールを編集" + +msgid "shib_update_roles" +msgstr "役割の割当て" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_ka.po b/components/ILIAS/AuthShibboleth/lang/shib_ka.po new file mode 100644 index 000000000000..bde092796a25 --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_ka.po @@ -0,0 +1,149 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +msgid "shib_add_missing" +msgstr "დაკარგული პასუხისმგებლობების დანიშვნა" + +msgid "shib_add_remove" +msgstr "პასუხისმგებლობების დამატება/ამოშლა" + +msgid "shib_assignment_type" +msgstr "დანიშვნის სახეობა" + +msgid "shib_attr_info" +msgstr "შიბოლეტის მომხმარებლის პროფილში დანიშვნა სპეციალური განსაზღვრებით" + +msgid "shib_attribute" +msgstr "მომხმარებლის განსაზღვრება" + +msgid "shib_attribute_name" +msgstr "განსაზღვრების სახელი" + +msgid "shib_attribute_value" +msgstr "განსაზღვრების ღირებულება" + +msgid "shib_check_role_assignment" +msgstr "გვიანი შესვლების შემდეგ პასუხისმგებლობების დანიშვნა" + +msgid "shib_choose_role" +msgstr "პასუხისმგებლობის არჩევა" + +msgid "shib_confirm_del_role_ass" +msgstr "ნამდვილად გსურთ შემდეგი წესების წაშლა?" + +msgid "shib_deleted_rule" +msgstr "პასუხისმგებლობების დანიშვნები წაშლილია" + +msgid "shib_global_role" +msgstr "გლობალური პასუხისმგებლობა" + +msgid "shib_ilias_role" +msgstr "ილიასის პასუხისმგებლობის სახელი" + +msgid "shib_local_role" +msgstr "ადგილობრივი პასუხისმგებლობა" + +msgid "shib_missing_attr_name" +msgstr "გთხოვთ შეიყვანოთ განსაზღვრების სახელი" + +msgid "shib_missing_attr_value" +msgstr "გთხოვთ შეიყვანოთ განსაზღვრების ღირებულება" + +msgid "shib_missing_plugin_id" +msgstr "გთხოვთ შეიყვანოთ სწორი პროგრამული გაფართოვების იდ" + +msgid "shib_missing_role" +msgstr "გთხოვთ მონიშნოთ ახალი პასუხისმგებლობა" + +msgid "shib_new_rule" +msgstr "ახალი წესის დამატება" + +msgid "shib_plugin" +msgstr "დანიშვნა პროგრამული გაფართოებისთ" + +msgid "shib_plugin_id" +msgstr "პროგრამული გაფართოებისს იდ" + +msgid "shib_plugin_info" +msgstr "პასუხისმგებლობის დანიშვნის პროგრამული გაფართოებისთ დამტკიცება. გთხოვთ შეიყვანოთ სწორი პროგრამული გაფართოებისს იდ" + +msgid "shib_remove_deprecated" +msgstr "ამორტიზირებული პასუხისმგებლობების დანიშვნების მოხსნა" + +msgid "shib_role_ass_table" +msgstr "ახალი წესი პასუხისმგებლობების დანიშვნებისთვის" + +msgid "shib_role_assignment" +msgstr "პასუხისმგებლობის დანიშვნა" + +msgid "shib_role_by_attribute" +msgstr "შიბოლეტის განსაზღვრება" + +msgid "shib_role_by_plugin" +msgstr "პროგრამული გაფართოვებით" + +msgid "shib_role_name" +msgstr "ილიასის პასუხისმგებლობის სახელი" + +msgid "shib_role_name_info" +msgstr "გთხოვთ აირჩიოთ ან გლობალური პასუხისმგებლობა ან ადგილობრივი პასუხისმგებლობა" + +msgid "shib_role_selection" +msgstr "პასუხისმგებლობის მონიშვნა" + +msgid "shib_rule_condition" +msgstr "პირობა" + +msgid "shib_rule_type" +msgstr "დანიშვნის სახეობა" + +msgid "shib_rules_tables" +msgstr "პასუხისმგებლობის დანიშვნის წესები აქტიურია" + +msgid "shib_settings" +msgstr "შიბოლეტის პარამეტრები" + +msgid "shib_update_role_ass_table" +msgstr "პასუხისმგებლობის დანიშვნის წესის რედაქტირება" + +msgid "shib_update_roles" +msgstr "პასუხისმგებლობის დანიშვნები" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_lt.po b/components/ILIAS/AuthShibboleth/lang/shib_lt.po new file mode 100644 index 000000000000..6f79f2c0910f --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_lt.po @@ -0,0 +1,185 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +#, fuzzy +msgid "shib_add_missing" +msgstr "Assign Missing Roles" + +#, fuzzy +msgid "shib_add_remove" +msgstr "Add/Remove Roles" + +#, fuzzy +msgid "shib_assignment_type" +msgstr "Kind of Assignment" + +#, fuzzy +msgid "shib_attr_info" +msgstr "Assign by a specific attribute in the Shibboleth User Profile." + +#, fuzzy +msgid "shib_attribute" +msgstr "User Attribute" + +#, fuzzy +msgid "shib_attribute_name" +msgstr "Attribute Name" + +#, fuzzy +msgid "shib_attribute_value" +msgstr "Attribute Value" + +#, fuzzy +msgid "shib_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +#, fuzzy +msgid "shib_choose_role" +msgstr "Choose Role" + +#, fuzzy +msgid "shib_confirm_del_role_ass" +msgstr "Do you really want to delete the following rules?" + +#, fuzzy +msgid "shib_deleted_rule" +msgstr "Deleted role assignments." + +#, fuzzy +msgid "shib_global_role" +msgstr "Global Role" + +#, fuzzy +msgid "shib_ilias_role" +msgstr "ILIAS Role Name" + +#, fuzzy +msgid "shib_local_role" +msgstr "Local Role" + +#, fuzzy +msgid "shib_missing_attr_name" +msgstr "Please enter the attribute name." + +#, fuzzy +msgid "shib_missing_attr_value" +msgstr "Please enter the attribute value." + +#, fuzzy +msgid "shib_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "shib_missing_role" +msgstr "Please select one role." + +#, fuzzy +msgid "shib_new_rule" +msgstr "Add new Rule" + +#, fuzzy +msgid "shib_plugin" +msgstr "Assignment by Plugin" + +#, fuzzy +msgid "shib_plugin_id" +msgstr "Plugin Id" + +#, fuzzy +msgid "shib_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +#, fuzzy +msgid "shib_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +#, fuzzy +msgid "shib_role_ass_table" +msgstr "New Rule for Role Assignments" + +#, fuzzy +msgid "shib_role_assignment" +msgstr "Role Assignments" + +#, fuzzy +msgid "shib_role_by_attribute" +msgstr "Shibboleth Attribute" + +#, fuzzy +msgid "shib_role_by_plugin" +msgstr "By Plugin" + +#, fuzzy +msgid "shib_role_name" +msgstr "ILIAS Role Name" + +#, fuzzy +msgid "shib_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +#, fuzzy +msgid "shib_role_selection" +msgstr "Role Selection" + +#, fuzzy +msgid "shib_rule_condition" +msgstr "Condition" + +#, fuzzy +msgid "shib_rule_type" +msgstr "Type of Assignment" + +#, fuzzy +msgid "shib_rules_tables" +msgstr "Active Role Assignment Rules" + +#, fuzzy +msgid "shib_settings" +msgstr "Shibboleth Settings" + +#, fuzzy +msgid "shib_update_role_ass_table" +msgstr "Edit Role Assignment Rule" + +#, fuzzy +msgid "shib_update_roles" +msgstr "Role Assignments" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_nl.po b/components/ILIAS/AuthShibboleth/lang/shib_nl.po new file mode 100644 index 000000000000..d636d1ca7c27 --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_nl.po @@ -0,0 +1,149 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +msgid "shib_add_missing" +msgstr "Assign Missing Roles" + +msgid "shib_add_remove" +msgstr "Add/Remove Roles" + +msgid "shib_assignment_type" +msgstr "Kind of Assignment" + +msgid "shib_attr_info" +msgstr "Assign by a specific attribute in the Shibboleth User Profile." + +msgid "shib_attribute" +msgstr "User Attribute" + +msgid "shib_attribute_name" +msgstr "Attribute Name" + +msgid "shib_attribute_value" +msgstr "Attribute Value" + +msgid "shib_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +msgid "shib_choose_role" +msgstr "Kies rol" + +msgid "shib_confirm_del_role_ass" +msgstr "Do you really want to delete the following rules" + +msgid "shib_deleted_rule" +msgstr "Deleted role assignments." + +msgid "shib_global_role" +msgstr "Globale Rol" + +msgid "shib_ilias_role" +msgstr "ILIAS Rol Naam" + +msgid "shib_local_role" +msgstr "Local Role" + +msgid "shib_missing_attr_name" +msgstr "Please enter the attribute name." + +msgid "shib_missing_attr_value" +msgstr "Please enter the attribute value." + +msgid "shib_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +msgid "shib_missing_role" +msgstr "Selecteer één rol." + +msgid "shib_new_rule" +msgstr "Add new Rule" + +msgid "shib_plugin" +msgstr "Assignment by Plugin" + +msgid "shib_plugin_id" +msgstr "Plugin Id" + +msgid "shib_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +msgid "shib_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +msgid "shib_role_ass_table" +msgstr "Nieuwe rol voor roltoewijzingen" + +msgid "shib_role_assignment" +msgstr "Rol toewijzingen" + +msgid "shib_role_by_attribute" +msgstr "Shibboleth Attribute" + +msgid "shib_role_by_plugin" +msgstr "By Plugin" + +msgid "shib_role_name" +msgstr "ILIAS Rol Naam" + +msgid "shib_role_name_info" +msgstr "Kies of een globale rol of type de naam van een lokale rol" + +msgid "shib_role_selection" +msgstr "Role Selection" + +msgid "shib_rule_condition" +msgstr "Condition" + +msgid "shib_rule_type" +msgstr "Type of Assignment" + +msgid "shib_rules_tables" +msgstr "Actieve regels voor roltoewijzing" + +msgid "shib_settings" +msgstr "Shibboleth Settings" + +msgid "shib_update_role_ass_table" +msgstr "Edit Role Assignment Rule" + +msgid "shib_update_roles" +msgstr "Role Assignments" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_pl.po b/components/ILIAS/AuthShibboleth/lang/shib_pl.po new file mode 100644 index 000000000000..5e696308ea58 --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_pl.po @@ -0,0 +1,149 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +msgid "shib_add_missing" +msgstr "Przydziel brakujące role" + +msgid "shib_add_remove" +msgstr "Dodaj/usuń rolę" + +msgid "shib_assignment_type" +msgstr "Rodzaj przydziału" + +msgid "shib_attr_info" +msgstr "Przydział następuje na podstawie określonego atrybutu w profilu użytkownika Shibboleth." + +msgid "shib_attribute" +msgstr "Atrybut użytkownika" + +msgid "shib_attribute_name" +msgstr "Nazwa atrybutowa" + +msgid "shib_attribute_value" +msgstr "Wartość atrybutowa" + +msgid "shib_check_role_assignment" +msgstr "Aktualizacja przydziałów ról przy każdym logowaniu:" + +msgid "shib_choose_role" +msgstr "Przejmij rolę" + +msgid "shib_confirm_del_role_ass" +msgstr "Czy naprawdę chcesz usunąć poniższe przydziały?" + +msgid "shib_deleted_rule" +msgstr "Usunięto zasady przydzielania." + +msgid "shib_global_role" +msgstr "Globalna rola" + +msgid "shib_ilias_role" +msgstr "Nazwa roli ILIAS" + +msgid "shib_local_role" +msgstr "Lokalna rola" + +msgid "shib_missing_attr_name" +msgstr "Wpisz nazwę atrybutu." + +msgid "shib_missing_attr_value" +msgstr "Wpisz wartość atrybutu." + +msgid "shib_missing_plugin_id" +msgstr "Wpisz jednoznaczny numer ID wtyczki." + +msgid "shib_missing_role" +msgstr "Wybierz rolę ILIAS." + +msgid "shib_new_rule" +msgstr "Dodaj nową regułę" + +msgid "shib_plugin" +msgstr "Przydział poprzez wtyczkę" + +msgid "shib_plugin_id" +msgstr "Numer ID wtyczki" + +msgid "shib_plugin_info" +msgstr "Jeśli przydziału nie można przeprowadzić w ramach zwykłej kontroli (nazwa/wartość atrybutu), przydział można zrealizować również za pomocą wtyczki." + +msgid "shib_remove_deprecated" +msgstr "Usuń nieuprawnione role" + +msgid "shib_role_ass_table" +msgstr "Nowe zasady przydzielania ról ILIAS" + +msgid "shib_role_assignment" +msgstr "Przydziały ról" + +msgid "shib_role_by_attribute" +msgstr "Atrybut użytkownika" + +msgid "shib_role_by_plugin" +msgstr "Poprzez wtyczkę" + +msgid "shib_role_name" +msgstr "Nazwa roli ILIAS" + +msgid "shib_role_name_info" +msgstr "Wybierz globalną rolę lub podaj nazwę lokalnej roli." + +msgid "shib_role_selection" +msgstr "Wybór ról" + +msgid "shib_rule_condition" +msgstr "Warunek" + +msgid "shib_rule_type" +msgstr "Rodzaj przydziału" + +msgid "shib_rules_tables" +msgstr "Aktywne zasady dotyczące przydzielania ról" + +msgid "shib_settings" +msgstr "Ustawienia Shibboleth" + +msgid "shib_update_role_ass_table" +msgstr "Edytuj zasady przydziału ról" + +msgid "shib_update_roles" +msgstr "Przydziały ról" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_pt.po b/components/ILIAS/AuthShibboleth/lang/shib_pt.po new file mode 100644 index 000000000000..0929957116ab --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_pt.po @@ -0,0 +1,149 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +msgid "shib_add_missing" +msgstr "Atribuir funções em falta" + +msgid "shib_add_remove" +msgstr "Adicionar/Remover funções" + +msgid "shib_assignment_type" +msgstr "Tipo de atribuição" + +msgid "shib_attr_info" +msgstr "Atribuir por um tributo específico no perfil de utilizador Shibboleth." + +msgid "shib_attribute" +msgstr "Atributo de utilizador" + +msgid "shib_attribute_name" +msgstr "Nome do atributo" + +msgid "shib_attribute_value" +msgstr "Valor do atributo" + +msgid "shib_check_role_assignment" +msgstr "Atribuição de funções após logins posteriores" + +msgid "shib_choose_role" +msgstr "Escolher função" + +msgid "shib_confirm_del_role_ass" +msgstr "Tem a certeza que quer apagar as seguintes regras?" + +msgid "shib_deleted_rule" +msgstr "Atribuições de funções apagadas." + +msgid "shib_global_role" +msgstr "Função global" + +msgid "shib_ilias_role" +msgstr "Nome de função ILIAS" + +msgid "shib_local_role" +msgstr "Função local" + +msgid "shib_missing_attr_name" +msgstr "Introduza um nome de atributo." + +msgid "shib_missing_attr_value" +msgstr "Insira um valor de atributo." + +msgid "shib_missing_plugin_id" +msgstr "Introduza um id de plugin válido." + +msgid "shib_missing_role" +msgstr "Selecione uma função." + +msgid "shib_new_rule" +msgstr "Adicionar novo regra" + +msgid "shib_plugin" +msgstr "Atribuição por plugin" + +msgid "shib_plugin_id" +msgstr "ID de plugin" + +msgid "shib_plugin_info" +msgstr "Validar a atribuição de funções com um plugin. Introduza um id de plugin válido." + +msgid "shib_remove_deprecated" +msgstr "Retirar a atribuição das funções obsoletas" + +msgid "shib_role_ass_table" +msgstr "Nova regra para atribuições de funções" + +msgid "shib_role_assignment" +msgstr "Atribuição de funções" + +msgid "shib_role_by_attribute" +msgstr "Atributo Shibboleth" + +msgid "shib_role_by_plugin" +msgstr "Por plugin" + +msgid "shib_role_name" +msgstr "Nome de função ILIAS" + +msgid "shib_role_name_info" +msgstr "Escolha uma função global ou insira o nome de uma função global." + +msgid "shib_role_selection" +msgstr "Seleção de função" + +msgid "shib_rule_condition" +msgstr "Condição" + +msgid "shib_rule_type" +msgstr "Tipo de atribuição" + +msgid "shib_rules_tables" +msgstr "Ativar regras de atribuição de funções" + +msgid "shib_settings" +msgstr "Definições Shibboleth" + +msgid "shib_update_role_ass_table" +msgstr "Editar regra de atribuição de funções" + +msgid "shib_update_roles" +msgstr "Atribuição de funções" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_ro.po b/components/ILIAS/AuthShibboleth/lang/shib_ro.po new file mode 100644 index 000000000000..80bcbb1e4b5c --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_ro.po @@ -0,0 +1,185 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +#, fuzzy +msgid "shib_add_missing" +msgstr "Assign Missing Roles" + +#, fuzzy +msgid "shib_add_remove" +msgstr "Add/Remove Roles" + +#, fuzzy +msgid "shib_assignment_type" +msgstr "Kind of Assignment" + +#, fuzzy +msgid "shib_attr_info" +msgstr "Assign by a specific attribute in the Shibboleth User Profile." + +#, fuzzy +msgid "shib_attribute" +msgstr "User Attribute" + +#, fuzzy +msgid "shib_attribute_name" +msgstr "Attribute Name" + +#, fuzzy +msgid "shib_attribute_value" +msgstr "Attribute Value" + +#, fuzzy +msgid "shib_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +#, fuzzy +msgid "shib_choose_role" +msgstr "Choose Role" + +#, fuzzy +msgid "shib_confirm_del_role_ass" +msgstr "Do you really want to delete the following rules?" + +#, fuzzy +msgid "shib_deleted_rule" +msgstr "Deleted role assignments." + +#, fuzzy +msgid "shib_global_role" +msgstr "Global Role" + +#, fuzzy +msgid "shib_ilias_role" +msgstr "ILIAS Role Name" + +#, fuzzy +msgid "shib_local_role" +msgstr "Local Role" + +#, fuzzy +msgid "shib_missing_attr_name" +msgstr "Please enter the attribute name." + +#, fuzzy +msgid "shib_missing_attr_value" +msgstr "Please enter the attribute value." + +#, fuzzy +msgid "shib_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "shib_missing_role" +msgstr "Please select one role." + +#, fuzzy +msgid "shib_new_rule" +msgstr "Add new Rule" + +#, fuzzy +msgid "shib_plugin" +msgstr "Assignment by Plugin" + +#, fuzzy +msgid "shib_plugin_id" +msgstr "Plugin Id" + +#, fuzzy +msgid "shib_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +#, fuzzy +msgid "shib_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +#, fuzzy +msgid "shib_role_ass_table" +msgstr "New Rule for Role Assignments" + +#, fuzzy +msgid "shib_role_assignment" +msgstr "Role Assignments" + +#, fuzzy +msgid "shib_role_by_attribute" +msgstr "Shibboleth Attribute" + +#, fuzzy +msgid "shib_role_by_plugin" +msgstr "By Plugin" + +#, fuzzy +msgid "shib_role_name" +msgstr "ILIAS Role Name" + +#, fuzzy +msgid "shib_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +#, fuzzy +msgid "shib_role_selection" +msgstr "Role Selection" + +#, fuzzy +msgid "shib_rule_condition" +msgstr "Condition" + +#, fuzzy +msgid "shib_rule_type" +msgstr "Type of Assignment" + +#, fuzzy +msgid "shib_rules_tables" +msgstr "Active Role Assignment Rules" + +#, fuzzy +msgid "shib_settings" +msgstr "Shibboleth Settings" + +#, fuzzy +msgid "shib_update_role_ass_table" +msgstr "Edit Role Assignment Rule" + +#, fuzzy +msgid "shib_update_roles" +msgstr "Role Assignments" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_ru.po b/components/ILIAS/AuthShibboleth/lang/shib_ru.po new file mode 100644 index 000000000000..645092ac5f41 --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_ru.po @@ -0,0 +1,149 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +msgid "shib_add_missing" +msgstr "Assign Missing Roles" + +msgid "shib_add_remove" +msgstr "Add/Remove Roles" + +msgid "shib_assignment_type" +msgstr "Kind of Assignment" + +msgid "shib_attr_info" +msgstr "Assign by a specific attribute in the Shibboleth User Profile." + +msgid "shib_attribute" +msgstr "User Attribute" + +msgid "shib_attribute_name" +msgstr "Attribute Name" + +msgid "shib_attribute_value" +msgstr "Attribute Value" + +msgid "shib_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +msgid "shib_choose_role" +msgstr "Choose Role" + +msgid "shib_confirm_del_role_ass" +msgstr "Do you really want to delete the following rules?" + +msgid "shib_deleted_rule" +msgstr "Deleted role assignments." + +msgid "shib_global_role" +msgstr "Global Role" + +msgid "shib_ilias_role" +msgstr "ILIAS Role Name" + +msgid "shib_local_role" +msgstr "Local Role" + +msgid "shib_missing_attr_name" +msgstr "Please enter the attribute name." + +msgid "shib_missing_attr_value" +msgstr "Please enter the attribute value." + +msgid "shib_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +msgid "shib_missing_role" +msgstr "Please select one role." + +msgid "shib_new_rule" +msgstr "Add new Rule" + +msgid "shib_plugin" +msgstr "Assignment by Plugin" + +msgid "shib_plugin_id" +msgstr "Plugin Id" + +msgid "shib_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +msgid "shib_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +msgid "shib_role_ass_table" +msgstr "New Rule for Role Assignments" + +msgid "shib_role_assignment" +msgstr "Role Assignments" + +msgid "shib_role_by_attribute" +msgstr "Shibboleth Attribute" + +msgid "shib_role_by_plugin" +msgstr "By Plugin" + +msgid "shib_role_name" +msgstr "ILIAS Role Name" + +msgid "shib_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +msgid "shib_role_selection" +msgstr "Role Selection" + +msgid "shib_rule_condition" +msgstr "Condition" + +msgid "shib_rule_type" +msgstr "Type of Assignment" + +msgid "shib_rules_tables" +msgstr "Active Role Assignment Rules" + +msgid "shib_settings" +msgstr "Shibboleth Settings" + +msgid "shib_update_role_ass_table" +msgstr "Edit Role Assignment Rule" + +msgid "shib_update_roles" +msgstr "Role Assignments" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_sk.po b/components/ILIAS/AuthShibboleth/lang/shib_sk.po new file mode 100644 index 000000000000..90ff6e988ecb --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_sk.po @@ -0,0 +1,149 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +msgid "shib_add_missing" +msgstr "Přiřadit chybějící role" + +msgid "shib_add_remove" +msgstr "Přidat/Odstranit Role" + +msgid "shib_assignment_type" +msgstr "Druh přiřazení" + +msgid "shib_attr_info" +msgstr "Přiřadit specifickým atributem v uživatelském profilu Shibboleth." + +msgid "shib_attribute" +msgstr "Uživatelský atribut" + +msgid "shib_attribute_name" +msgstr "Název atributu" + +msgid "shib_attribute_value" +msgstr "Hodnota atributu" + +msgid "shib_check_role_assignment" +msgstr "Přiřazení role po dalším přihlášení" + +msgid "shib_choose_role" +msgstr "Výběr role" + +msgid "shib_confirm_del_role_ass" +msgstr "Skutečně chcete smazat následující pravidla?" + +msgid "shib_deleted_rule" +msgstr "Smazat přiřazení role." + +msgid "shib_global_role" +msgstr "Globální role" + +msgid "shib_ilias_role" +msgstr "Název role ILIAS" + +msgid "shib_local_role" +msgstr "Lokální role" + +msgid "shib_missing_attr_name" +msgstr "Vložte prosím jméno atributu." + +msgid "shib_missing_attr_value" +msgstr "Vložte prosím hodnotu atributu." + +msgid "shib_missing_plugin_id" +msgstr "Vložte prosím platný id pluginu." + +msgid "shib_missing_role" +msgstr "Vyberte prosím jednu roli." + +msgid "shib_new_rule" +msgstr "Přidat nové pravidlo" + +msgid "shib_plugin" +msgstr "Přiřazení Pluginem" + +msgid "shib_plugin_id" +msgstr "Id Pluginu" + +msgid "shib_plugin_info" +msgstr "Ověřte prosím přířazení role s pluginem. Vložte prosím platný id pluginu." + +msgid "shib_remove_deprecated" +msgstr "Zrušit přiřazení neschválených rolí" + +msgid "shib_role_ass_table" +msgstr "Nové pravidlo pro přiřazení rolí" + +msgid "shib_role_assignment" +msgstr "Přiřazení rolí" + +msgid "shib_role_by_attribute" +msgstr "Atribut Shibboleth" + +msgid "shib_role_by_plugin" +msgstr "Podle Pluginů" + +msgid "shib_role_name" +msgstr "Název role ILIAS" + +msgid "shib_role_name_info" +msgstr "Vyberte prosím globální roli nebo vložte jméno lokální role." + +msgid "shib_role_selection" +msgstr "Výběr role" + +msgid "shib_rule_condition" +msgstr "Podmínka" + +msgid "shib_rule_type" +msgstr "Typ přiřazení" + +msgid "shib_rules_tables" +msgstr "Aktivní Role přiřazení práv" + +msgid "shib_settings" +msgstr "Nastavení Shibboleth" + +msgid "shib_update_role_ass_table" +msgstr "Upravit pravidla přiřazení role" + +msgid "shib_update_roles" +msgstr "Přiřazení role" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_sl.po b/components/ILIAS/AuthShibboleth/lang/shib_sl.po new file mode 100644 index 000000000000..fee8e486212b --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_sl.po @@ -0,0 +1,149 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +msgid "shib_add_missing" +msgstr "Assign Missing Roles" + +msgid "shib_add_remove" +msgstr "Add/Remove Roles" + +msgid "shib_assignment_type" +msgstr "Kind of Assignment" + +msgid "shib_attr_info" +msgstr "Assign by a specific attribute in the Shibboleth User Profile." + +msgid "shib_attribute" +msgstr "User Attribute" + +msgid "shib_attribute_name" +msgstr "Attribute Name" + +msgid "shib_attribute_value" +msgstr "Attribute Value" + +msgid "shib_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +msgid "shib_choose_role" +msgstr "Choose Role" + +msgid "shib_confirm_del_role_ass" +msgstr "Do you really want to delete the following rules?" + +msgid "shib_deleted_rule" +msgstr "Deleted role assignments." + +msgid "shib_global_role" +msgstr "Global Role" + +msgid "shib_ilias_role" +msgstr "ILIAS Role Name" + +msgid "shib_local_role" +msgstr "Local Role" + +msgid "shib_missing_attr_name" +msgstr "Please enter the attribute name." + +msgid "shib_missing_attr_value" +msgstr "Please enter the attribute value." + +msgid "shib_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +msgid "shib_missing_role" +msgstr "Please select one role." + +msgid "shib_new_rule" +msgstr "Add new Rule" + +msgid "shib_plugin" +msgstr "Assignment by Plugin" + +msgid "shib_plugin_id" +msgstr "Plugin Id" + +msgid "shib_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +msgid "shib_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +msgid "shib_role_ass_table" +msgstr "New Rule for Role Assignments" + +msgid "shib_role_assignment" +msgstr "Role Assignments" + +msgid "shib_role_by_attribute" +msgstr "Shibboleth Attribute" + +msgid "shib_role_by_plugin" +msgstr "By Plugin" + +msgid "shib_role_name" +msgstr "ILIAS Role Name" + +msgid "shib_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +msgid "shib_role_selection" +msgstr "Role Selection" + +msgid "shib_rule_condition" +msgstr "Condition" + +msgid "shib_rule_type" +msgstr "Type of Assignment" + +msgid "shib_rules_tables" +msgstr "Active Role Assignment Rules" + +msgid "shib_settings" +msgstr "Shibboleth Settings" + +msgid "shib_update_role_ass_table" +msgstr "Edit Role Assignment Rule" + +msgid "shib_update_roles" +msgstr "Role Assignments" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_sq.po b/components/ILIAS/AuthShibboleth/lang/shib_sq.po new file mode 100644 index 000000000000..53e710b991ab --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_sq.po @@ -0,0 +1,185 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +#, fuzzy +msgid "shib_add_missing" +msgstr "Assign Missing Roles" + +#, fuzzy +msgid "shib_add_remove" +msgstr "Add/Remove Roles" + +#, fuzzy +msgid "shib_assignment_type" +msgstr "Kind of Assignment" + +#, fuzzy +msgid "shib_attr_info" +msgstr "Assign by a specific attribute in the Shibboleth User Profile." + +#, fuzzy +msgid "shib_attribute" +msgstr "User Attribute" + +#, fuzzy +msgid "shib_attribute_name" +msgstr "Attribute Name" + +#, fuzzy +msgid "shib_attribute_value" +msgstr "Attribute Value" + +#, fuzzy +msgid "shib_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +#, fuzzy +msgid "shib_choose_role" +msgstr "Choose Role" + +#, fuzzy +msgid "shib_confirm_del_role_ass" +msgstr "Do you really want to delete the following rules?" + +#, fuzzy +msgid "shib_deleted_rule" +msgstr "Deleted role assignments." + +#, fuzzy +msgid "shib_global_role" +msgstr "Global Role" + +#, fuzzy +msgid "shib_ilias_role" +msgstr "ILIAS Role Name" + +#, fuzzy +msgid "shib_local_role" +msgstr "Local Role" + +#, fuzzy +msgid "shib_missing_attr_name" +msgstr "Please enter the attribute name." + +#, fuzzy +msgid "shib_missing_attr_value" +msgstr "Please enter the attribute value." + +#, fuzzy +msgid "shib_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "shib_missing_role" +msgstr "Please select one role." + +#, fuzzy +msgid "shib_new_rule" +msgstr "Add new Rule" + +#, fuzzy +msgid "shib_plugin" +msgstr "Assignment by Plugin" + +#, fuzzy +msgid "shib_plugin_id" +msgstr "Plugin Id" + +#, fuzzy +msgid "shib_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +#, fuzzy +msgid "shib_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +#, fuzzy +msgid "shib_role_ass_table" +msgstr "New Rule for Role Assignments" + +#, fuzzy +msgid "shib_role_assignment" +msgstr "Role Assignments" + +#, fuzzy +msgid "shib_role_by_attribute" +msgstr "Shibboleth Attribute" + +#, fuzzy +msgid "shib_role_by_plugin" +msgstr "By Plugin" + +#, fuzzy +msgid "shib_role_name" +msgstr "ILIAS Role Name" + +#, fuzzy +msgid "shib_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +#, fuzzy +msgid "shib_role_selection" +msgstr "Role Selection" + +#, fuzzy +msgid "shib_rule_condition" +msgstr "Condition" + +#, fuzzy +msgid "shib_rule_type" +msgstr "Type of Assignment" + +#, fuzzy +msgid "shib_rules_tables" +msgstr "Active Role Assignment Rules" + +#, fuzzy +msgid "shib_settings" +msgstr "Shibboleth Settings" + +#, fuzzy +msgid "shib_update_role_ass_table" +msgstr "Edit Role Assignment Rule" + +#, fuzzy +msgid "shib_update_roles" +msgstr "Role Assignments" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_sr.po b/components/ILIAS/AuthShibboleth/lang/shib_sr.po new file mode 100644 index 000000000000..832f08007abe --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_sr.po @@ -0,0 +1,185 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +#, fuzzy +msgid "shib_add_missing" +msgstr "Assign Missing Roles" + +#, fuzzy +msgid "shib_add_remove" +msgstr "Add/Remove Roles" + +#, fuzzy +msgid "shib_assignment_type" +msgstr "Kind of Assignment" + +#, fuzzy +msgid "shib_attr_info" +msgstr "Assign by a specific attribute in the Shibboleth User Profile." + +#, fuzzy +msgid "shib_attribute" +msgstr "User Attribute" + +#, fuzzy +msgid "shib_attribute_name" +msgstr "Attribute Name" + +#, fuzzy +msgid "shib_attribute_value" +msgstr "Attribute Value" + +#, fuzzy +msgid "shib_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +#, fuzzy +msgid "shib_choose_role" +msgstr "Choose Role" + +#, fuzzy +msgid "shib_confirm_del_role_ass" +msgstr "Do you really want to delete the following rules?" + +#, fuzzy +msgid "shib_deleted_rule" +msgstr "Deleted role assignments." + +#, fuzzy +msgid "shib_global_role" +msgstr "Global Role" + +#, fuzzy +msgid "shib_ilias_role" +msgstr "ILIAS Role Name" + +#, fuzzy +msgid "shib_local_role" +msgstr "Local Role" + +#, fuzzy +msgid "shib_missing_attr_name" +msgstr "Please enter the attribute name." + +#, fuzzy +msgid "shib_missing_attr_value" +msgstr "Please enter the attribute value." + +#, fuzzy +msgid "shib_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "shib_missing_role" +msgstr "Please select one role." + +#, fuzzy +msgid "shib_new_rule" +msgstr "Add new Rule" + +#, fuzzy +msgid "shib_plugin" +msgstr "Assignment by Plugin" + +#, fuzzy +msgid "shib_plugin_id" +msgstr "Plugin Id" + +#, fuzzy +msgid "shib_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +#, fuzzy +msgid "shib_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +#, fuzzy +msgid "shib_role_ass_table" +msgstr "New Rule for Role Assignments" + +#, fuzzy +msgid "shib_role_assignment" +msgstr "Role Assignments" + +#, fuzzy +msgid "shib_role_by_attribute" +msgstr "Shibboleth Attribute" + +#, fuzzy +msgid "shib_role_by_plugin" +msgstr "By Plugin" + +#, fuzzy +msgid "shib_role_name" +msgstr "ILIAS Role Name" + +#, fuzzy +msgid "shib_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +#, fuzzy +msgid "shib_role_selection" +msgstr "Role Selection" + +#, fuzzy +msgid "shib_rule_condition" +msgstr "Condition" + +#, fuzzy +msgid "shib_rule_type" +msgstr "Type of Assignment" + +#, fuzzy +msgid "shib_rules_tables" +msgstr "Active Role Assignment Rules" + +#, fuzzy +msgid "shib_settings" +msgstr "Shibboleth Settings" + +#, fuzzy +msgid "shib_update_role_ass_table" +msgstr "Edit Role Assignment Rule" + +#, fuzzy +msgid "shib_update_roles" +msgstr "Role Assignments" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_sv.po b/components/ILIAS/AuthShibboleth/lang/shib_sv.po new file mode 100644 index 000000000000..d3e2e2935554 --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_sv.po @@ -0,0 +1,150 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +msgid "shib_add_missing" +msgstr "Tilldela roller som saknas" + +msgid "shib_add_remove" +msgstr "Lägg till/ta bort roller" + +msgid "shib_assignment_type" +msgstr "Typ av uppdrag" + +# Modifierad som en del av jämställdhetsintegreringsaktiviteterna för ILIAS 8 +msgid "shib_attr_info" +msgstr "Tilldelningen baseras på ett specifikt attribut i Shibboleth-kontot " + +msgid "shib_attribute" +msgstr "Användarattribut" + +msgid "shib_attribute_name" +msgstr "Attributets namn" + +msgid "shib_attribute_value" +msgstr "Attributets värde" + +msgid "shib_check_role_assignment" +msgstr "Uppdatera rolltilldelningar vid varje inloggning" + +msgid "shib_choose_role" +msgstr "Ta på dig en roll" + +msgid "shib_confirm_del_role_ass" +msgstr "Är du säker på att du vill ta bort följande uppgifter?" + +msgid "shib_deleted_rule" +msgstr "Tilldelningsreglerna har tagits bort." + +msgid "shib_global_role" +msgstr "Global roll" + +msgid "shib_ilias_role" +msgstr "ILIAS rollnamn" + +msgid "shib_local_role" +msgstr "Lokal roll" + +msgid "shib_missing_attr_name" +msgstr "Var god ange namnet på attributet." + +msgid "shib_missing_attr_value" +msgstr "Var god ange värdet på attributet." + +msgid "shib_missing_plugin_id" +msgstr "Var god ange ett unikt plugin-id." + +msgid "shib_missing_role" +msgstr "Vänligen välj en ILIAS-roll." + +msgid "shib_new_rule" +msgstr "Skapa ny regel" + +msgid "shib_plugin" +msgstr "Uppdrag genom plugin" + +msgid "shib_plugin_id" +msgstr "Plugin-Id" + +msgid "shib_plugin_info" +msgstr "Om tilldelningen inte kan göras med en enkel kontroll (attributnamn/värde), kan du alternativt reglera tilldelningen via en plug-in." + +msgid "shib_remove_deprecated" +msgstr "Ta bort obehöriga roller" + +msgid "shib_role_ass_table" +msgstr "Ny regel för ILIAS rolltilldelning" + +msgid "shib_role_assignment" +msgstr "Rolltilldelning" + +msgid "shib_role_by_attribute" +msgstr "Användarattribut" + +msgid "shib_role_by_plugin" +msgstr "Genom plugin" + +msgid "shib_role_name" +msgstr "ILIAS rollnamn" + +msgid "shib_role_name_info" +msgstr "Välj antingen en global roll eller ange namnet på en lokal roll." + +msgid "shib_role_selection" +msgstr "Val av roll" + +msgid "shib_rule_condition" +msgstr "Kondition" + +msgid "shib_rule_type" +msgstr "Typ av uppdrag" + +msgid "shib_rules_tables" +msgstr "Regler för tilldelning av aktiv roll" + +msgid "shib_settings" +msgstr "Shibboleth-inställningar" + +msgid "shib_update_role_ass_table" +msgstr "Redigera regel för rolltilldelning" + +msgid "shib_update_roles" +msgstr "Rolltilldelning" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_tr.po b/components/ILIAS/AuthShibboleth/lang/shib_tr.po new file mode 100644 index 000000000000..0e5ef49a9d99 --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_tr.po @@ -0,0 +1,149 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +msgid "shib_add_missing" +msgstr "Ata Eksik Rolleri" + +msgid "shib_add_remove" +msgstr "Ekle / Kaldır Rolleri" + +msgid "shib_assignment_type" +msgstr "Atama Tipi" + +msgid "shib_attr_info" +msgstr "Shibboleth Kullanıcı Profili belirli bir özniteliği tarafından atayın." + +msgid "shib_attribute" +msgstr "Kullanıcı Özellik" + +msgid "shib_attribute_name" +msgstr "Özellik Adı" + +msgid "shib_attribute_value" +msgstr "Özellik Değeri" + +msgid "shib_check_role_assignment" +msgstr "Daha sonra oturumları sonra Rollerin Atama" + +msgid "shib_choose_role" +msgstr "Rolü seçin" + +msgid "shib_confirm_del_role_ass" +msgstr "gerçekten aşağıdaki kurallar silmek istediğinizden emin misiniz?" + +msgid "shib_deleted_rule" +msgstr "Silinmiş rol atamaları." + +msgid "shib_global_role" +msgstr "Global Rol" + +msgid "shib_ilias_role" +msgstr "ILIAS Rol Adı" + +msgid "shib_local_role" +msgstr "Yerel Rolü" + +msgid "shib_missing_attr_name" +msgstr "öznitelik adını giriniz." + +msgid "shib_missing_attr_value" +msgstr "öznitelik değeri girin." + +msgid "shib_missing_plugin_id" +msgstr "geçerli bir eklenti kimliği girin." + +msgid "shib_missing_role" +msgstr "bir rol seçin." + +msgid "shib_new_rule" +msgstr "Add new Kuralı" + +msgid "shib_plugin" +msgstr "Plugin Atama" + +msgid "shib_plugin_id" +msgstr "Plugin Kimliği" + +msgid "shib_plugin_info" +msgstr "bir eklenti ile rol atama doğrulayın. Geçerli bir eklenti kimliği girin." + +msgid "shib_remove_deprecated" +msgstr "Onaylanmamış Roller Deassign" + +msgid "shib_role_ass_table" +msgstr "Rol Atamaları için Yeni Kural" + +msgid "shib_role_assignment" +msgstr "Rol Atamaları" + +msgid "shib_role_by_attribute" +msgstr "Shibboleth Özellik" + +msgid "shib_role_by_plugin" +msgstr "Plugin ile" + +msgid "shib_role_name" +msgstr "ILIAS Rol Adı" + +msgid "shib_role_name_info" +msgstr "ya küresel bir rol seçebilir veya yerel rol adını giriniz." + +msgid "shib_role_selection" +msgstr "Rolü Seçimi" + +msgid "shib_rule_condition" +msgstr "Durum" + +msgid "shib_rule_type" +msgstr "Atama Türü" + +msgid "shib_rules_tables" +msgstr "Aktif Rol Atama Kuralları" + +msgid "shib_settings" +msgstr "Shibboleth Ayarları" + +msgid "shib_update_role_ass_table" +msgstr "Düzenleme Rol Atama Kuralı" + +msgid "shib_update_roles" +msgstr "Rol Atamaları" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_uk.po b/components/ILIAS/AuthShibboleth/lang/shib_uk.po new file mode 100644 index 000000000000..d89f8427c512 --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_uk.po @@ -0,0 +1,185 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +#, fuzzy +msgid "shib_add_missing" +msgstr "Assign Missing Roles" + +#, fuzzy +msgid "shib_add_remove" +msgstr "Add/Remove Roles" + +#, fuzzy +msgid "shib_assignment_type" +msgstr "Kind of Assignment" + +#, fuzzy +msgid "shib_attr_info" +msgstr "Assign by a specific attribute in the Shibboleth User Profile." + +#, fuzzy +msgid "shib_attribute" +msgstr "User Attribute" + +#, fuzzy +msgid "shib_attribute_name" +msgstr "Attribute Name" + +#, fuzzy +msgid "shib_attribute_value" +msgstr "Attribute Value" + +#, fuzzy +msgid "shib_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +#, fuzzy +msgid "shib_choose_role" +msgstr "Choose Role" + +#, fuzzy +msgid "shib_confirm_del_role_ass" +msgstr "Do you really want to delete the following rules?" + +#, fuzzy +msgid "shib_deleted_rule" +msgstr "Deleted role assignments." + +#, fuzzy +msgid "shib_global_role" +msgstr "Global Role" + +#, fuzzy +msgid "shib_ilias_role" +msgstr "ILIAS Role Name" + +#, fuzzy +msgid "shib_local_role" +msgstr "Local Role" + +#, fuzzy +msgid "shib_missing_attr_name" +msgstr "Please enter the attribute name." + +#, fuzzy +msgid "shib_missing_attr_value" +msgstr "Please enter the attribute value." + +#, fuzzy +msgid "shib_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "shib_missing_role" +msgstr "Please select one role." + +#, fuzzy +msgid "shib_new_rule" +msgstr "Add new Rule" + +#, fuzzy +msgid "shib_plugin" +msgstr "Assignment by Plugin" + +#, fuzzy +msgid "shib_plugin_id" +msgstr "Plugin Id" + +#, fuzzy +msgid "shib_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +#, fuzzy +msgid "shib_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +#, fuzzy +msgid "shib_role_ass_table" +msgstr "New Rule for Role Assignments" + +#, fuzzy +msgid "shib_role_assignment" +msgstr "Role Assignments" + +#, fuzzy +msgid "shib_role_by_attribute" +msgstr "Shibboleth Attribute" + +#, fuzzy +msgid "shib_role_by_plugin" +msgstr "By Plugin" + +#, fuzzy +msgid "shib_role_name" +msgstr "ILIAS Role Name" + +#, fuzzy +msgid "shib_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +#, fuzzy +msgid "shib_role_selection" +msgstr "Role Selection" + +#, fuzzy +msgid "shib_rule_condition" +msgstr "Condition" + +#, fuzzy +msgid "shib_rule_type" +msgstr "Type of Assignment" + +#, fuzzy +msgid "shib_rules_tables" +msgstr "Active Role Assignment Rules" + +#, fuzzy +msgid "shib_settings" +msgstr "Shibboleth Settings" + +#, fuzzy +msgid "shib_update_role_ass_table" +msgstr "Edit Role Assignment Rule" + +#, fuzzy +msgid "shib_update_roles" +msgstr "Role Assignments" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_vi.po b/components/ILIAS/AuthShibboleth/lang/shib_vi.po new file mode 100644 index 000000000000..62f68da5bf88 --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_vi.po @@ -0,0 +1,185 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +#, fuzzy +msgid "shib_add_missing" +msgstr "Assign Missing Roles" + +#, fuzzy +msgid "shib_add_remove" +msgstr "Add/Remove Roles" + +#, fuzzy +msgid "shib_assignment_type" +msgstr "Kind of Assignment" + +#, fuzzy +msgid "shib_attr_info" +msgstr "Assign by a specific attribute in the Shibboleth User Profile." + +#, fuzzy +msgid "shib_attribute" +msgstr "User Attribute" + +#, fuzzy +msgid "shib_attribute_name" +msgstr "Attribute Name" + +#, fuzzy +msgid "shib_attribute_value" +msgstr "Attribute Value" + +#, fuzzy +msgid "shib_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +#, fuzzy +msgid "shib_choose_role" +msgstr "Choose Role" + +#, fuzzy +msgid "shib_confirm_del_role_ass" +msgstr "Do you really want to delete the following rules?" + +#, fuzzy +msgid "shib_deleted_rule" +msgstr "Deleted role assignments." + +#, fuzzy +msgid "shib_global_role" +msgstr "Global Role" + +#, fuzzy +msgid "shib_ilias_role" +msgstr "ILIAS Role Name" + +#, fuzzy +msgid "shib_local_role" +msgstr "Local Role" + +#, fuzzy +msgid "shib_missing_attr_name" +msgstr "Please enter the attribute name." + +#, fuzzy +msgid "shib_missing_attr_value" +msgstr "Please enter the attribute value." + +#, fuzzy +msgid "shib_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "shib_missing_role" +msgstr "Please select one role." + +#, fuzzy +msgid "shib_new_rule" +msgstr "Add new Rule" + +#, fuzzy +msgid "shib_plugin" +msgstr "Assignment by Plugin" + +#, fuzzy +msgid "shib_plugin_id" +msgstr "Plugin Id" + +#, fuzzy +msgid "shib_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +#, fuzzy +msgid "shib_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +#, fuzzy +msgid "shib_role_ass_table" +msgstr "New Rule for Role Assignments" + +#, fuzzy +msgid "shib_role_assignment" +msgstr "Role Assignments" + +#, fuzzy +msgid "shib_role_by_attribute" +msgstr "Shibboleth Attribute" + +#, fuzzy +msgid "shib_role_by_plugin" +msgstr "By Plugin" + +#, fuzzy +msgid "shib_role_name" +msgstr "ILIAS Role Name" + +#, fuzzy +msgid "shib_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +#, fuzzy +msgid "shib_role_selection" +msgstr "Role Selection" + +#, fuzzy +msgid "shib_rule_condition" +msgstr "Condition" + +#, fuzzy +msgid "shib_rule_type" +msgstr "Type of Assignment" + +#, fuzzy +msgid "shib_rules_tables" +msgstr "Active Role Assignment Rules" + +#, fuzzy +msgid "shib_settings" +msgstr "Shibboleth Settings" + +#, fuzzy +msgid "shib_update_role_ass_table" +msgstr "Edit Role Assignment Rule" + +#, fuzzy +msgid "shib_update_roles" +msgstr "Role Assignments" diff --git a/components/ILIAS/AuthShibboleth/lang/shib_zh.po b/components/ILIAS/AuthShibboleth/lang/shib_zh.po new file mode 100644 index 000000000000..9164ca1becb3 --- /dev/null +++ b/components/ILIAS/AuthShibboleth/lang/shib_zh.po @@ -0,0 +1,149 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: shib\n" + +#, fuzzy +msgid "shib_account_creation" +msgstr "Account Creation" + +#, fuzzy +msgid "shib_account_creation_disabled" +msgstr "Disabled" + +#, fuzzy +msgid "shib_account_creation_disabled_info" +msgstr "No new account is created." + +#, fuzzy +msgid "shib_account_creation_enabled" +msgstr "Enabled" + +#, fuzzy +msgid "shib_account_creation_enabled_info" +msgstr "An active new account is created." + +#, fuzzy +msgid "shib_account_creation_info" +msgstr "Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth." + +#, fuzzy +msgid "shib_account_creation_with_approval" +msgstr "With approval" + +#, fuzzy +msgid "shib_account_creation_with_approval_info" +msgstr "An inactive new account is created. The account remains inactive until activated by an administrator." + +msgid "shib_add_missing" +msgstr "分配缺失的角色" + +msgid "shib_add_remove" +msgstr "添加/删除角色" + +msgid "shib_assignment_type" +msgstr "分配的类型" + +msgid "shib_attr_info" +msgstr "通过Shibboleth用户资料(profile)中的一个特定属性分配。" + +msgid "shib_attribute" +msgstr "用户属性" + +msgid "shib_attribute_name" +msgstr "属性名称" + +msgid "shib_attribute_value" +msgstr "属性值" + +msgid "shib_check_role_assignment" +msgstr "后来登录之后的角色的分配" + +msgid "shib_choose_role" +msgstr "选择角色" + +msgid "shib_confirm_del_role_ass" +msgstr "您确认想删除以下规则?" + +msgid "shib_deleted_rule" +msgstr "角色分配已删除。" + +msgid "shib_global_role" +msgstr "全局角色" + +msgid "shib_ilias_role" +msgstr "ILIAS角色名" + +msgid "shib_local_role" +msgstr "本地角色" + +msgid "shib_missing_attr_name" +msgstr "请输入属性名称。" + +msgid "shib_missing_attr_value" +msgstr "请输入属性值。" + +msgid "shib_missing_plugin_id" +msgstr "请输入一个有效的插件id" + +msgid "shib_missing_role" +msgstr "请选择一个角色" + +msgid "shib_new_rule" +msgstr "添加新规则" + +msgid "shib_plugin" +msgstr "通过插件分配" + +msgid "shib_plugin_id" +msgstr "插件ID" + +msgid "shib_plugin_info" +msgstr "以一个插件验证角色分配。请输入一个有效的插件ID。" + +msgid "shib_remove_deprecated" +msgstr "取消分配弃用的角色" + +msgid "shib_role_ass_table" +msgstr "角色分配新规则" + +msgid "shib_role_assignment" +msgstr "角色分配" + +msgid "shib_role_by_attribute" +msgstr "Shibboleth属性" + +msgid "shib_role_by_plugin" +msgstr "通过插件" + +msgid "shib_role_name" +msgstr "ILIAS 角色名" + +msgid "shib_role_name_info" +msgstr "请选择一个全局角色或输入一个本地角色名。" + +msgid "shib_role_selection" +msgstr "角色选择" + +msgid "shib_rule_condition" +msgstr "件" + +msgid "shib_rule_type" +msgstr "分配的类型" + +msgid "shib_rules_tables" +msgstr "激活角色分配规则" + +msgid "shib_settings" +msgstr "Shibboleth设置" + +msgid "shib_update_role_ass_table" +msgstr "编辑角色分配规则" + +msgid "shib_update_roles" +msgstr "角色分配" diff --git a/components/ILIAS/Awareness/Awareness.php b/components/ILIAS/Awareness/Awareness.php index b65a6b438c1d..97f0b4305cf6 100644 --- a/components/ILIAS/Awareness/Awareness.php +++ b/components/ILIAS/Awareness/Awareness.php @@ -20,6 +20,9 @@ namespace ILIAS; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; + class Awareness implements Component\Component { public function init( @@ -36,5 +39,9 @@ public function init( new Component\Resource\ComponentJS($this, "Awareness.js"); $contribute[User\Settings\UserSettings::class] = fn() => new Awareness\UserSettings\Settings(); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'awrn' + ); } } diff --git a/components/ILIAS/Awareness/lang/awrn.pot b/components/ILIAS/Awareness/lang/awrn.pot new file mode 100644 index 000000000000..5c5c7033d237 --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn.pot @@ -0,0 +1,84 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: awrn\n" + +msgid "awareness_now_online" +msgstr "" + +msgid "awareness_settings" +msgstr "" + +msgid "awrn_caching_period" +msgstr "" + +msgid "awrn_caching_period_info" +msgstr "" + +msgid "awrn_enable" +msgstr "" + +msgid "awrn_filter" +msgstr "" + +msgid "awrn_hide_from_awareness" +msgstr "" + +msgid "awrn_hide_from_awareness_info" +msgstr "" + +msgid "awrn_inactive" +msgstr "" + +msgid "awrn_incl_offline" +msgstr "" + +msgid "awrn_max_inactivity" +msgstr "" + +msgid "awrn_max_inactivity_info" +msgstr "" + +msgid "awrn_max_nr_entries" +msgstr "" + +msgid "awrn_max_nr_entries_info" +msgstr "" + +msgid "awrn_minutes" +msgstr "" + +msgid "awrn_online" +msgstr "" + +msgid "awrn_online_only" +msgstr "" + +msgid "awrn_seconds" +msgstr "" + +msgid "awrn_use_osd" +msgstr "" + +msgid "awrn_use_osd_info" +msgstr "" + +msgid "awrn_user_show" +msgstr "" + +msgid "awrn_user_show_default" +msgstr "" + +msgid "awrn_user_show_default_info" +msgstr "" + +msgid "user_awrn_default" +msgstr "" + +msgid "user_awrn_hide" +msgstr "" + +msgid "user_awrn_show" +msgstr "" diff --git a/components/ILIAS/Awareness/lang/awrn_ar.po b/components/ILIAS/Awareness/lang/awrn_ar.po new file mode 100644 index 000000000000..7beecf2b0cad --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_ar.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: awrn\n" + +#, fuzzy +msgid "awareness_now_online" +msgstr "Online Now" + +#, fuzzy +msgid "awareness_settings" +msgstr "Settings" + +#, fuzzy +msgid "awrn_caching_period" +msgstr "Caching Period" + +#, fuzzy +msgid "awrn_caching_period_info" +msgstr "Time that is waited before the number of users in the top bar is updated and new online users are determined." + +#, fuzzy +msgid "awrn_enable" +msgstr "Enable ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_filter" +msgstr "User Filter" + +#, fuzzy +msgid "awrn_hide_from_awareness" +msgstr "Hide Me From ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_hide_from_awareness_info" +msgstr "The ‘Who is online?’-Tool is in the top bar and listing selected users (e.g. contacts or members of your courses)." + +#, fuzzy +msgid "awrn_inactive" +msgstr "Not Listed" + +#, fuzzy +msgid "awrn_incl_offline" +msgstr "Online and Offline" + +#, fuzzy +msgid "awrn_max_inactivity" +msgstr "Maximum Inactivity Period" + +#, fuzzy +msgid "awrn_max_inactivity_info" +msgstr "After this period users are considered being offline. If nothing is set, the session time will be used." + +#, fuzzy +msgid "awrn_max_nr_entries" +msgstr "Max. Number of Items" + +#, fuzzy +msgid "awrn_max_nr_entries_info" +msgstr "Maximum number of items in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_minutes" +msgstr "min" + +#, fuzzy +msgid "awrn_online" +msgstr "Online" + +#, fuzzy +msgid "awrn_online_only" +msgstr "Online Only" + +#, fuzzy +msgid "awrn_seconds" +msgstr "sec" + +#, fuzzy +msgid "awrn_use_osd" +msgstr "Popup Online Users" + +#, fuzzy +msgid "awrn_use_osd_info" +msgstr "Display a popup to indicate new online users in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_user_show" +msgstr "Show Your Account in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +#, fuzzy +msgid "user_awrn_default" +msgstr "Default" + +#, fuzzy +msgid "user_awrn_hide" +msgstr "Hide my status" + +#, fuzzy +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_bg.po b/components/ILIAS/Awareness/lang/awrn_bg.po new file mode 100644 index 000000000000..b812d6a6856c --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_bg.po @@ -0,0 +1,89 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: awrn\n" + +msgid "awareness_now_online" +msgstr "Онлайн сега" + +msgid "awareness_settings" +msgstr "Настройки" + +msgid "awrn_caching_period" +msgstr " Период на кеширане" + +msgid "awrn_caching_period_info" +msgstr "Времето, което се изчаква, преди да се актуализира броят на потребителите в горната лента и да се определят новите онлайн потребители." + +msgid "awrn_enable" +msgstr "Активиране на \"Кой е онлайн?" + +msgid "awrn_filter" +msgstr "Филтър на потребителя" + +msgid "awrn_hide_from_awareness" +msgstr "Скрий ме от блока \"Кой е онлайн?\"" + +msgid "awrn_hide_from_awareness_info" +msgstr "Блокът \"Кой е онлайн?\" се намира в горната лента и съдържа списък с избрани потребители (напр. контакти или членове на вашите курсове)." + +msgid "awrn_inactive" +msgstr "Не е включено в списъка" + +msgid "awrn_incl_offline" +msgstr "Онлайн и офлайн" + +msgid "awrn_max_inactivity" +msgstr "Максимален период на неактивност" + +msgid "awrn_max_inactivity_info" +msgstr "След този период потребителите се считат за офлайн. Ако не е зададено нищо, ще се използва времето на сесията." + +msgid "awrn_max_nr_entries" +msgstr "Макс. Брой на елементите" + +msgid "awrn_max_nr_entries_info" +msgstr "Максимален брой елементи в списъка \"Кой е онлайн?\"." + +msgid "awrn_minutes" +msgstr "мин" + +msgid "awrn_online" +msgstr "Онлайн" + +msgid "awrn_online_only" +msgstr "Само онлайн" + +msgid "awrn_seconds" +msgstr "сек" + +msgid "awrn_use_osd" +msgstr "Изскачащи прозорци с онлайн потребители" + +msgid "awrn_use_osd_info" +msgstr "Показване на изскачащ прозорец за обозначаване на нови онлайн потребители в списъка \"Кой е онлайн?\"." + +msgid "awrn_user_show" +msgstr "Покажете профила си в \"Кой е онлайн?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +msgid "user_awrn_default" +msgstr "По подразбиране" + +msgid "user_awrn_hide" +msgstr "Скриване на състоянието ми" + +msgid "user_awrn_show" +msgstr "Покажи състоянието ми" diff --git a/components/ILIAS/Awareness/lang/awrn_cs.po b/components/ILIAS/Awareness/lang/awrn_cs.po new file mode 100644 index 000000000000..46a33fac86dc --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_cs.po @@ -0,0 +1,94 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: awrn\n" + +msgid "awareness_now_online" +msgstr "Nyní online" + +msgid "awareness_settings" +msgstr "Nastavení" + +msgid "awrn_caching_period" +msgstr "Doba ukládání do mezipaměti" + +msgid "awrn_caching_period_info" +msgstr "Doba, po kterou se čeká, než je aktualizován počet uživatelů v horní liště a jsou zjišťování noví online uživatelé." + +msgid "awrn_enable" +msgstr "Povolit nástroj „Kdo je online?“" + +#, fuzzy +msgid "awrn_filter" +msgstr "User Filter" + +msgid "awrn_hide_from_awareness" +msgstr "Skrýt mě v nástroji „Kdo je online?“" + +msgid "awrn_hide_from_awareness_info" +msgstr "Nástroj „Kdo je online?“ je v horní liště a uvádí seznam vybraných uživatelů (např. kontakty nebo členové vašich kurzů)." + +msgid "awrn_inactive" +msgstr "Neuvedeno" + +msgid "awrn_incl_offline" +msgstr "Online a offline" + +msgid "awrn_max_inactivity" +msgstr "Maximální doba nečinnosti" + +msgid "awrn_max_inactivity_info" +msgstr "Po této době jsou uživatelé považováni, že jsou offline. Pokud není nic nastaveno, bude použit čas relace." + +msgid "awrn_max_nr_entries" +msgstr "Max. Počet položek" + +msgid "awrn_max_nr_entries_info" +msgstr "Maximální počet položek v seznamu „Kdo je online?“." + +msgid "awrn_minutes" +msgstr "min" + +msgid "awrn_online" +msgstr "Online" + +msgid "awrn_online_only" +msgstr "Pouze online" + +msgid "awrn_seconds" +msgstr "s" + +msgid "awrn_use_osd" +msgstr "Vyskakovací okno Online uživatelé" + +msgid "awrn_use_osd_info" +msgstr "Zobrazí se vyskakovací okno pro označení nových online uživatelů v seznamu „Kdo je online?“." + +#, fuzzy +msgid "awrn_user_show" +msgstr "Show Your Account in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +#, fuzzy +msgid "user_awrn_default" +msgstr "Default" + +#, fuzzy +msgid "user_awrn_hide" +msgstr "Hide my status" + +#, fuzzy +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_da.po b/components/ILIAS/Awareness/lang/awrn_da.po new file mode 100644 index 000000000000..e1088009d523 --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_da.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: awrn\n" + +#, fuzzy +msgid "awareness_now_online" +msgstr "Online Now" + +#, fuzzy +msgid "awareness_settings" +msgstr "Settings" + +#, fuzzy +msgid "awrn_caching_period" +msgstr "Caching Period" + +#, fuzzy +msgid "awrn_caching_period_info" +msgstr "Time that is waited before the number of users in the top bar is updated and new online users are determined." + +#, fuzzy +msgid "awrn_enable" +msgstr "Enable ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_filter" +msgstr "User Filter" + +#, fuzzy +msgid "awrn_hide_from_awareness" +msgstr "Hide Me From ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_hide_from_awareness_info" +msgstr "The ‘Who is online?’-Tool is in the top bar and listing selected users (e.g. contacts or members of your courses)." + +#, fuzzy +msgid "awrn_inactive" +msgstr "Not Listed" + +#, fuzzy +msgid "awrn_incl_offline" +msgstr "Online and Offline" + +#, fuzzy +msgid "awrn_max_inactivity" +msgstr "Maximum Inactivity Period" + +#, fuzzy +msgid "awrn_max_inactivity_info" +msgstr "After this period users are considered being offline. If nothing is set, the session time will be used." + +#, fuzzy +msgid "awrn_max_nr_entries" +msgstr "Max. Number of Items" + +#, fuzzy +msgid "awrn_max_nr_entries_info" +msgstr "Maximum number of items in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_minutes" +msgstr "min" + +#, fuzzy +msgid "awrn_online" +msgstr "Online" + +#, fuzzy +msgid "awrn_online_only" +msgstr "Online Only" + +#, fuzzy +msgid "awrn_seconds" +msgstr "sec" + +#, fuzzy +msgid "awrn_use_osd" +msgstr "Popup Online Users" + +#, fuzzy +msgid "awrn_use_osd_info" +msgstr "Display a popup to indicate new online users in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_user_show" +msgstr "Show Your Account in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +#, fuzzy +msgid "user_awrn_default" +msgstr "Default" + +#, fuzzy +msgid "user_awrn_hide" +msgstr "Hide my status" + +#, fuzzy +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_de.po b/components/ILIAS/Awareness/lang/awrn_de.po new file mode 100644 index 000000000000..7652c3faad7a --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_de.po @@ -0,0 +1,87 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: awrn\n" + +msgid "awareness_now_online" +msgstr "Jetzt online" + +msgid "awareness_settings" +msgstr "Einstellungen" + +msgid "awrn_caching_period" +msgstr "Caching-Zeitraum" + +msgid "awrn_caching_period_info" +msgstr "Dieser Zeitraum wird abgewartet, bevor die Anzahl der Benutzer in der Top-Anzeige aktualisiert und neue Online-Benutzer ermittelt werden." + +msgid "awrn_enable" +msgstr "„Wer ist online?“-Anzeige aktivieren" + +msgid "awrn_filter" +msgstr "Benutzerfilter" + +msgid "awrn_hide_from_awareness" +msgstr "Mich nicht in „Wer ist online?“-Anzeige auflisten" + +msgid "awrn_hide_from_awareness_info" +msgstr "Die „Wer ist online?“-Anzeige erscheint oben im Kopf der Anwendung und listet ausgewählte Benutzer auf (z.B. Kontakte oder Mitglieder Ihrer Kurse)." + +msgid "awrn_inactive" +msgstr "Keine Anzeige" + +msgid "awrn_incl_offline" +msgstr "Online und offline" + +msgid "awrn_max_inactivity" +msgstr "Maximale Inaktivität" + +msgid "awrn_max_inactivity_info" +msgstr "Benutzer ohne Aktion in der angegebenen Zeitspanne werden als \"offline\" geführt. Wird kein Wert angegeben, so gilt die Gültigkeit der Session." + +msgid "awrn_max_nr_entries" +msgstr "Anzahl maximaler Einträge" + +msgid "awrn_max_nr_entries_info" +msgstr "Diese Anzahl an Einträgen wird maximal in der „Wer ist online?“-Liste angezeigt. Diese Einstellung beeinflusst die Performanz der Anzeige in der Top-Bar nicht wesentlich." + +msgid "awrn_minutes" +msgstr "min" + +msgid "awrn_online" +msgstr "Online" + +msgid "awrn_online_only" +msgstr "Nur Online" + +msgid "awrn_seconds" +msgstr "Sek." + +msgid "awrn_use_osd" +msgstr "Pop-up Online-Benutzer" + +msgid "awrn_use_osd_info" +msgstr "Zeigt ein Pop-up an, wenn neue Benutzer in der „Wer ist online?“-Anzeige mit dem Online-Status erscheinen." + +msgid "awrn_user_show" +msgstr "Mein Status in \"Wer ist online?\" anzeigen" + +msgid "awrn_user_show_default" +msgstr "Standardwert für die Anzeige in \"Wer ist online?\"" + +msgid "awrn_user_show_default_info" +msgstr "Definiert den Standardwert für die Anzeige in \"Wer ist online?\"." + +msgid "user_awrn_default" +msgstr "Standard" + +msgid "user_awrn_hide" +msgstr "Nicht anzeigen" + +msgid "user_awrn_show" +msgstr "Anzeigen" diff --git a/components/ILIAS/Awareness/lang/awrn_el.po b/components/ILIAS/Awareness/lang/awrn_el.po new file mode 100644 index 000000000000..a4b5ab9eeb93 --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_el.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: awrn\n" + +#, fuzzy +msgid "awareness_now_online" +msgstr "Online Now" + +#, fuzzy +msgid "awareness_settings" +msgstr "Settings" + +#, fuzzy +msgid "awrn_caching_period" +msgstr "Caching Period" + +#, fuzzy +msgid "awrn_caching_period_info" +msgstr "Time that is waited before the number of users in the top bar is updated and new online users are determined." + +#, fuzzy +msgid "awrn_enable" +msgstr "Enable ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_filter" +msgstr "User Filter" + +#, fuzzy +msgid "awrn_hide_from_awareness" +msgstr "Hide Me From ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_hide_from_awareness_info" +msgstr "The ‘Who is online?’-Tool is in the top bar and listing selected users (e.g. contacts or members of your courses)." + +#, fuzzy +msgid "awrn_inactive" +msgstr "Not Listed" + +#, fuzzy +msgid "awrn_incl_offline" +msgstr "Online and Offline" + +#, fuzzy +msgid "awrn_max_inactivity" +msgstr "Maximum Inactivity Period" + +#, fuzzy +msgid "awrn_max_inactivity_info" +msgstr "After this period users are considered being offline. If nothing is set, the session time will be used." + +#, fuzzy +msgid "awrn_max_nr_entries" +msgstr "Max. Number of Items" + +#, fuzzy +msgid "awrn_max_nr_entries_info" +msgstr "Maximum number of items in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_minutes" +msgstr "min" + +#, fuzzy +msgid "awrn_online" +msgstr "Online" + +#, fuzzy +msgid "awrn_online_only" +msgstr "Online Only" + +#, fuzzy +msgid "awrn_seconds" +msgstr "sec" + +#, fuzzy +msgid "awrn_use_osd" +msgstr "Popup Online Users" + +#, fuzzy +msgid "awrn_use_osd_info" +msgstr "Display a popup to indicate new online users in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_user_show" +msgstr "Show Your Account in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +#, fuzzy +msgid "user_awrn_default" +msgstr "Default" + +#, fuzzy +msgid "user_awrn_hide" +msgstr "Hide my status" + +#, fuzzy +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_en.po b/components/ILIAS/Awareness/lang/awrn_en.po new file mode 100644 index 000000000000..8232448018a4 --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_en.po @@ -0,0 +1,87 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: awrn\n" + +msgid "awareness_now_online" +msgstr "Online Now" + +msgid "awareness_settings" +msgstr "Settings" + +msgid "awrn_caching_period" +msgstr "Caching Period" + +msgid "awrn_caching_period_info" +msgstr "Time that is waited before the number of users in the top bar is updated and new online users are determined." + +msgid "awrn_enable" +msgstr "Enable ‘Who is online?’-Tool" + +msgid "awrn_filter" +msgstr "User Filter" + +msgid "awrn_hide_from_awareness" +msgstr "Hide Me From ‘Who is online?’-Tool" + +msgid "awrn_hide_from_awareness_info" +msgstr "The ‘Who is Online?’ tool can be found in the header bar and lists selected users (e.g. contacts or members of your courses)." + +msgid "awrn_inactive" +msgstr "Not Listed" + +msgid "awrn_incl_offline" +msgstr "Online and Offline" + +msgid "awrn_max_inactivity" +msgstr "Maximum Inactivity Period" + +msgid "awrn_max_inactivity_info" +msgstr "After this period users are considered being offline. If nothing is set, the session time will be used." + +msgid "awrn_max_nr_entries" +msgstr "Max. Number of Items" + +msgid "awrn_max_nr_entries_info" +msgstr "Maximum number of items in the ‘Who is online?’ list. This setting has only minimal performance influence when displaying the tool in the top bar." + +msgid "awrn_minutes" +msgstr "min" + +msgid "awrn_online" +msgstr "Online" + +msgid "awrn_online_only" +msgstr "Online Only" + +msgid "awrn_seconds" +msgstr "sec" + +msgid "awrn_use_osd" +msgstr "Popup Online Users" + +msgid "awrn_use_osd_info" +msgstr "Display a popup to indicate new online users in the ‘Who is online?’ list." + +msgid "awrn_user_show" +msgstr "Show Your Account in \"Who-Is-Online?\"" + +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +msgid "user_awrn_default" +msgstr "Default" + +msgid "user_awrn_hide" +msgstr "Hide my status" + +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_es.po b/components/ILIAS/Awareness/lang/awrn_es.po new file mode 100644 index 000000000000..5864789d1738 --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_es.po @@ -0,0 +1,87 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: awrn\n" + +msgid "awareness_now_online" +msgstr "En línea ahora" + +msgid "awareness_settings" +msgstr "Ajustes" + +msgid "awrn_caching_period" +msgstr "Periodo de almacenamiento en caché" + +msgid "awrn_caching_period_info" +msgstr "Tiempo de espera antes de que se actualice el número de usuarios en la barra superior y se determinen los nuevos usuarios en línea." + +msgid "awrn_enable" +msgstr "Activar herramienta '¿Quién está en línea?'" + +msgid "awrn_filter" +msgstr "Filtro de usuario" + +msgid "awrn_hide_from_awareness" +msgstr "Ocultarme de la herramienta '¿Quién está en línea?'" + +msgid "awrn_hide_from_awareness_info" +msgstr "La herramienta '¿Quién está en línea?' se encuentra en la barra de encabezado y enumera a los usuarios seleccionados (por ejemplo, contactos o miembros de sus cursos)." + +msgid "awrn_inactive" +msgstr "No listado" + +msgid "awrn_incl_offline" +msgstr "En línea y desconectado" + +msgid "awrn_max_inactivity" +msgstr "Periodo máximo de inactividad" + +msgid "awrn_max_inactivity_info" +msgstr "Después de este periodo, se considera que los usuarios están desconectados. Si no se establece nada, se utilizará el tiempo de la sesión." + +msgid "awrn_max_nr_entries" +msgstr "Número máximo de elementos" + +msgid "awrn_max_nr_entries_info" +msgstr "Número máximo de elementos en la lista '¿Quién está en línea?'. Este ajuste solo tiene una influencia mínima en el rendimiento al mostrar la herramienta en la barra superior." + +msgid "awrn_minutes" +msgstr "min" + +msgid "awrn_online" +msgstr "En línea" + +msgid "awrn_online_only" +msgstr "Solo en línea" + +msgid "awrn_seconds" +msgstr "seg" + +msgid "awrn_use_osd" +msgstr "Ventana emergente de usuarios en línea" + +msgid "awrn_use_osd_info" +msgstr "Mostrar una ventana emergente para indicar nuevos usuarios en línea en la lista «¿Quién está en línea?»." + +msgid "awrn_user_show" +msgstr "¿Mostrar tu cuenta en «Quién está en línea»?" + +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +msgid "user_awrn_default" +msgstr "Predeterminado" + +msgid "user_awrn_hide" +msgstr "Ocultar mi estado" + +msgid "user_awrn_show" +msgstr "Mostrar mi estado" diff --git a/components/ILIAS/Awareness/lang/awrn_et.po b/components/ILIAS/Awareness/lang/awrn_et.po new file mode 100644 index 000000000000..79db8db59fea --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_et.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: awrn\n" + +#, fuzzy +msgid "awareness_now_online" +msgstr "Online Now" + +#, fuzzy +msgid "awareness_settings" +msgstr "Settings" + +#, fuzzy +msgid "awrn_caching_period" +msgstr "Caching Period" + +#, fuzzy +msgid "awrn_caching_period_info" +msgstr "Time that is waited before the number of users in the top bar is updated and new online users are determined." + +#, fuzzy +msgid "awrn_enable" +msgstr "Enable ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_filter" +msgstr "User Filter" + +#, fuzzy +msgid "awrn_hide_from_awareness" +msgstr "Hide Me From ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_hide_from_awareness_info" +msgstr "The ‘Who is online?’-Tool is in the top bar and listing selected users (e.g. contacts or members of your courses)." + +#, fuzzy +msgid "awrn_inactive" +msgstr "Not Listed" + +#, fuzzy +msgid "awrn_incl_offline" +msgstr "Online and Offline" + +#, fuzzy +msgid "awrn_max_inactivity" +msgstr "Maximum Inactivity Period" + +#, fuzzy +msgid "awrn_max_inactivity_info" +msgstr "After this period users are considered being offline. If nothing is set, the session time will be used." + +#, fuzzy +msgid "awrn_max_nr_entries" +msgstr "Max. Number of Items" + +#, fuzzy +msgid "awrn_max_nr_entries_info" +msgstr "Maximum number of items in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_minutes" +msgstr "min" + +#, fuzzy +msgid "awrn_online" +msgstr "Online" + +#, fuzzy +msgid "awrn_online_only" +msgstr "Online Only" + +#, fuzzy +msgid "awrn_seconds" +msgstr "sec" + +#, fuzzy +msgid "awrn_use_osd" +msgstr "Popup Online Users" + +#, fuzzy +msgid "awrn_use_osd_info" +msgstr "Display a popup to indicate new online users in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_user_show" +msgstr "Show Your Account in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +#, fuzzy +msgid "user_awrn_default" +msgstr "Default" + +#, fuzzy +msgid "user_awrn_hide" +msgstr "Hide my status" + +#, fuzzy +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_fa.po b/components/ILIAS/Awareness/lang/awrn_fa.po new file mode 100644 index 000000000000..47a650b0a219 --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_fa.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: awrn\n" + +#, fuzzy +msgid "awareness_now_online" +msgstr "Online Now" + +#, fuzzy +msgid "awareness_settings" +msgstr "Settings" + +#, fuzzy +msgid "awrn_caching_period" +msgstr "Caching Period" + +#, fuzzy +msgid "awrn_caching_period_info" +msgstr "Time that is waited before the number of users in the top bar is updated and new online users are determined." + +#, fuzzy +msgid "awrn_enable" +msgstr "Enable ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_filter" +msgstr "User Filter" + +#, fuzzy +msgid "awrn_hide_from_awareness" +msgstr "Hide Me From ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_hide_from_awareness_info" +msgstr "The ‘Who is online?’-Tool is in the top bar and listing selected users (e.g. contacts or members of your courses)." + +#, fuzzy +msgid "awrn_inactive" +msgstr "Not Listed" + +#, fuzzy +msgid "awrn_incl_offline" +msgstr "Online and Offline" + +#, fuzzy +msgid "awrn_max_inactivity" +msgstr "Maximum Inactivity Period" + +#, fuzzy +msgid "awrn_max_inactivity_info" +msgstr "After this period users are considered being offline. If nothing is set, the session time will be used." + +#, fuzzy +msgid "awrn_max_nr_entries" +msgstr "Max. Number of Items" + +#, fuzzy +msgid "awrn_max_nr_entries_info" +msgstr "Maximum number of items in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_minutes" +msgstr "min" + +#, fuzzy +msgid "awrn_online" +msgstr "Online" + +#, fuzzy +msgid "awrn_online_only" +msgstr "Online Only" + +#, fuzzy +msgid "awrn_seconds" +msgstr "sec" + +#, fuzzy +msgid "awrn_use_osd" +msgstr "Popup Online Users" + +#, fuzzy +msgid "awrn_use_osd_info" +msgstr "Display a popup to indicate new online users in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_user_show" +msgstr "Show Your Account in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +#, fuzzy +msgid "user_awrn_default" +msgstr "Default" + +#, fuzzy +msgid "user_awrn_hide" +msgstr "Hide my status" + +#, fuzzy +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_fr.po b/components/ILIAS/Awareness/lang/awrn_fr.po new file mode 100644 index 000000000000..2db611e54a9c --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_fr.po @@ -0,0 +1,89 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: awrn\n" + +msgid "awareness_now_online" +msgstr "Maintenant en ligne" + +msgid "awareness_settings" +msgstr "Paramètres Généraux" + +msgid "awrn_caching_period" +msgstr "Période de Rafraà®chissement" + +msgid "awrn_caching_period_info" +msgstr "Le temps attendu avant que le nombre d'utilisateurs dans le bandeau supérieure soit mise à jour et que les nouveaux utilisateurs en ligne soient déterminés." + +msgid "awrn_enable" +msgstr "Activer 'Qui est en Ligne ?'" + +msgid "awrn_filter" +msgstr "Filtre utilisateur" + +msgid "awrn_hide_from_awareness" +msgstr "Cacher Mon Statut En-Ligne" + +msgid "awrn_hide_from_awareness_info" +msgstr "L'outil \"Qui est en ligne ?\" se trouve dans la barre supérieure et liste les utilisateurs sélectionnés (par ex. contacts ou membres de vos cours)." + +msgid "awrn_inactive" +msgstr "Non Listé" + +msgid "awrn_incl_offline" +msgstr "En ligne et Hors ligne" + +msgid "awrn_max_inactivity" +msgstr "Période Maximale d'Inactivité" + +msgid "awrn_max_inactivity_info" +msgstr "Après cette période, les utilisateurs sont considérés comme étant hors ligne. Si rien est défini, le temps de session sera utilisé." + +msgid "awrn_max_nr_entries" +msgstr "Nombre d'Objets Max." + +msgid "awrn_max_nr_entries_info" +msgstr "Nombre maximum d'éléments dans la liste 'Qui est en ligne?'." + +msgid "awrn_minutes" +msgstr "min" + +msgid "awrn_online" +msgstr "En ligne" + +msgid "awrn_online_only" +msgstr "En ligne Seulement" + +msgid "awrn_seconds" +msgstr "sec" + +msgid "awrn_use_osd" +msgstr "Pop-up utilisateurs en ligne" + +msgid "awrn_use_osd_info" +msgstr "Un pop-up apparaît pour indiquer de nouveaux utilisateurs en ligne dans la liste «Qui est en ligne?»." + +msgid "awrn_user_show" +msgstr "Montrer votre profil dans \"Qui est en ligne ?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +msgid "user_awrn_default" +msgstr "Par défaut" + +msgid "user_awrn_hide" +msgstr "Cacher mon statut" + +msgid "user_awrn_show" +msgstr "Montrer mon statut" diff --git a/components/ILIAS/Awareness/lang/awrn_hr.po b/components/ILIAS/Awareness/lang/awrn_hr.po new file mode 100644 index 000000000000..73a55ce5eaad --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_hr.po @@ -0,0 +1,94 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: awrn\n" + +msgid "awareness_now_online" +msgstr "Online Now" + +msgid "awareness_settings" +msgstr "Settings" + +msgid "awrn_caching_period" +msgstr "Caching Period" + +msgid "awrn_caching_period_info" +msgstr "Time that is waited before the number of users in the top bar is updated and new online users are determined." + +msgid "awrn_enable" +msgstr "Enable ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_filter" +msgstr "User Filter" + +msgid "awrn_hide_from_awareness" +msgstr "Hide Me From ‘Who is online?’-Tool" + +msgid "awrn_hide_from_awareness_info" +msgstr "The ‘Who is online?’-Tool is in the top bar and listing selected users (e.g. contacts or members of your courses)." + +msgid "awrn_inactive" +msgstr "Not Listed" + +msgid "awrn_incl_offline" +msgstr "Online and Offline" + +msgid "awrn_max_inactivity" +msgstr "Maximum Inactivity Period" + +msgid "awrn_max_inactivity_info" +msgstr "After this period users are considered being offline. If nothing is set, the session time will be used." + +msgid "awrn_max_nr_entries" +msgstr "Max. Number of Items" + +msgid "awrn_max_nr_entries_info" +msgstr "Maximum number of items in the ‘Who is online?’ list. This setting has only minimal performance influence when displaying the tool in the top bar." + +msgid "awrn_minutes" +msgstr "min" + +msgid "awrn_online" +msgstr "Online" + +msgid "awrn_online_only" +msgstr "Online Only" + +msgid "awrn_seconds" +msgstr "sec" + +msgid "awrn_use_osd" +msgstr "Popup Online Users" + +msgid "awrn_use_osd_info" +msgstr "Display a popup to indicate new online users in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_user_show" +msgstr "Show your account in \"Who-is-online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +#, fuzzy +msgid "user_awrn_default" +msgstr "Default" + +#, fuzzy +msgid "user_awrn_hide" +msgstr "Hide my status" + +#, fuzzy +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_hu.po b/components/ILIAS/Awareness/lang/awrn_hu.po new file mode 100644 index 000000000000..a87f01f0ed62 --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_hu.po @@ -0,0 +1,87 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: awrn\n" + +msgid "awareness_now_online" +msgstr "Jelenleg online" + +msgid "awareness_settings" +msgstr "Beállítások" + +msgid "awrn_caching_period" +msgstr "Gyorsítótárazási időköz" + +msgid "awrn_caching_period_info" +msgstr "Ennyi időnként frissül a felső sávban a felhasználók száma, illetve új felhasználó érzékelése." + +msgid "awrn_enable" +msgstr "‘Ki van online?’-eszköz engedélyezése" + +msgid "awrn_filter" +msgstr "Felhasználószűrő" + +msgid "awrn_hide_from_awareness" +msgstr "Rejtsen el engem a ‘Ki van online?’-eszközben" + +msgid "awrn_hide_from_awareness_info" +msgstr "A ‘Ki van online?’ eszköz a felső sávban található és felhasználókat jelenít meg (például kurzusai tagjait)." + +msgid "awrn_inactive" +msgstr "Nincs felsorolva" + +msgid "awrn_incl_offline" +msgstr "Online és offline" + +msgid "awrn_max_inactivity" +msgstr "Maximális tétlenségi időszak" + +msgid "awrn_max_inactivity_info" +msgstr "Ennyi idő után tekintjük offline állapotúnak a felhasználót. Ha nem állít be értéket, a munkamenet idejét használjuk." + +msgid "awrn_max_nr_entries" +msgstr "Elemek maximális száma" + +msgid "awrn_max_nr_entries_info" +msgstr "Maximum ennyi elem legyen a ‘Ki van online?’ felsorolásban. Ennek a beállításnak elhanyagolható hatása amikor az eszköz a felső sávban megjelenik." + +msgid "awrn_minutes" +msgstr "perc" + +msgid "awrn_online" +msgstr "Online" + +msgid "awrn_online_only" +msgstr "Csak online" + +msgid "awrn_seconds" +msgstr "másodperc" + +msgid "awrn_use_osd" +msgstr "Online felhasználók felugróban" + +msgid "awrn_use_osd_info" +msgstr "‘Ki van online’ felsorolásában új felhasználók felugróban jelenjenek meg." + +msgid "awrn_user_show" +msgstr "ILIAS-fiókom megjelenítése a ‘Ki van online?’ eszközben" + +msgid "awrn_user_show_default" +msgstr "‘Ki van online?’ láthatóságának alapértelmezett értéke" + +msgid "awrn_user_show_default_info" +msgstr "Meghatározza a felhasználó állapotának láthatóságának alapértelmezett értékét a ‘Ki van online?’ eszközben." + +msgid "user_awrn_default" +msgstr "Alapértelmezett" + +msgid "user_awrn_hide" +msgstr "Állapotom elrejtése" + +msgid "user_awrn_show" +msgstr "Állapotom megjelenítése" diff --git a/components/ILIAS/Awareness/lang/awrn_it.po b/components/ILIAS/Awareness/lang/awrn_it.po new file mode 100644 index 000000000000..6d6ff9bdc818 --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_it.po @@ -0,0 +1,89 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: awrn\n" + +msgid "awareness_now_online" +msgstr "Adesso online" + +msgid "awareness_settings" +msgstr "Impostazioni" + +msgid "awrn_caching_period" +msgstr "Periodo di memorizzazione nella cache" + +msgid "awrn_caching_period_info" +msgstr "Il tempo di attesa prima che il numero degli utenti nella barra superiore venga aggiornato e i nuovi utenti online siano determinati." + +msgid "awrn_enable" +msgstr "Consenti strumento “Chi è online?”" + +msgid "awrn_filter" +msgstr "Filtro Utente" + +msgid "awrn_hide_from_awareness" +msgstr "Nascondimi dallo strumento “Chi è online?”" + +msgid "awrn_hide_from_awareness_info" +msgstr "Lo strumento “Chi è online?” si trova nella barra superiore ed elenca tutti gli utenti selezionati (per esempio, contatti dei membri dei tuoi corsi)." + +msgid "awrn_inactive" +msgstr "Non elencato" + +msgid "awrn_incl_offline" +msgstr "Online e Offline" + +msgid "awrn_max_inactivity" +msgstr "Periodo massimo di inattività" + +msgid "awrn_max_inactivity_info" +msgstr "Dopo questo periodo gli utenti sono considerati offline. Se nulla è impostato, verrà utilizzato il tempo di sessione." + +msgid "awrn_max_nr_entries" +msgstr "Numero massimo di voci" + +msgid "awrn_max_nr_entries_info" +msgstr "Numero massimo di elementi nell'elenco \"Chi è online?\"." + +msgid "awrn_minutes" +msgstr "min" + +msgid "awrn_online" +msgstr "Online" + +msgid "awrn_online_only" +msgstr "Solo online" + +msgid "awrn_seconds" +msgstr "sec." + +msgid "awrn_use_osd" +msgstr "Popup utenti online" + +msgid "awrn_use_osd_info" +msgstr "Mostra a popup per indicare nuovi utenti online nell’elenco “Chi è online?”." + +msgid "awrn_user_show" +msgstr "Mostra il tuo stato in \"Chi è online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +msgid "user_awrn_default" +msgstr "Predefinito" + +msgid "user_awrn_hide" +msgstr "Nascondi" + +msgid "user_awrn_show" +msgstr "Mostra" diff --git a/components/ILIAS/Awareness/lang/awrn_ja.po b/components/ILIAS/Awareness/lang/awrn_ja.po new file mode 100644 index 000000000000..c87da90baaa1 --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_ja.po @@ -0,0 +1,87 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: awrn\n" + +msgid "awareness_now_online" +msgstr "現在オンライン中" + +msgid "awareness_settings" +msgstr "設定" + +msgid "awrn_caching_period" +msgstr "キャッシュ期間" + +msgid "awrn_caching_period_info" +msgstr "トップバー内のユーザ数が更新されて新規オンラインユーザが確定される前の待ち時間" + +msgid "awrn_enable" +msgstr "`誰がオンラインですか?'ツールを有効化" + +msgid "awrn_filter" +msgstr "ユーザフィルター" + +msgid "awrn_hide_from_awareness" +msgstr "`誰がオンラインですか?' - ツールへ自分を表示しない" + +msgid "awrn_hide_from_awareness_info" +msgstr "‘誰がオンラインですか?’-ツールはトップバーにあり選択したユーザを表示します。(例. コンタクトまたはコースメンバー)" + +msgid "awrn_inactive" +msgstr "表示しない" + +msgid "awrn_incl_offline" +msgstr "オンラインとオフライン" + +msgid "awrn_max_inactivity" +msgstr "最大アクティビティのない期間" + +msgid "awrn_max_inactivity_info" +msgstr "この期間の後ユーザはオフラインになるよう考慮されます。何も設定していない場合はセッションタイムを使用します。" + +msgid "awrn_max_nr_entries" +msgstr "最大アイテム数" + +msgid "awrn_max_nr_entries_info" +msgstr "`誰がオンラインですか?'リストの最大アイテム数" + +msgid "awrn_minutes" +msgstr "min" + +msgid "awrn_online" +msgstr "Online" + +msgid "awrn_online_only" +msgstr "オンラインのみ" + +msgid "awrn_seconds" +msgstr "sec" + +msgid "awrn_use_osd" +msgstr "ポップアップオンラインユーザ" + +msgid "awrn_use_osd_info" +msgstr "オンラインはだれ?'リスト上へ新しいオンラインユーザを示すポップアップを表示する。" + +msgid "awrn_user_show" +msgstr "アカウントを\"オンラインはだれ?\"へ表示する" + +msgid "awrn_user_show_default" +msgstr "「オンラインはだれ?」の表示用デフォルト値" + +msgid "awrn_user_show_default_info" +msgstr "\"オンラインはだれ?\"のユーザーのステータス表示のデフォルト値を定義します。" + +msgid "user_awrn_default" +msgstr "Default" + +msgid "user_awrn_hide" +msgstr "ステータスを表示しない" + +msgid "user_awrn_show" +msgstr "ステータスを表示する" diff --git a/components/ILIAS/Awareness/lang/awrn_ka.po b/components/ILIAS/Awareness/lang/awrn_ka.po new file mode 100644 index 000000000000..c0ae4733641d --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_ka.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: awrn\n" + +#, fuzzy +msgid "awareness_now_online" +msgstr "Online Now" + +#, fuzzy +msgid "awareness_settings" +msgstr "Settings" + +#, fuzzy +msgid "awrn_caching_period" +msgstr "Caching Period" + +#, fuzzy +msgid "awrn_caching_period_info" +msgstr "Time that is waited before the number of users in the top bar is updated and new online users are determined." + +#, fuzzy +msgid "awrn_enable" +msgstr "Enable ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_filter" +msgstr "User Filter" + +#, fuzzy +msgid "awrn_hide_from_awareness" +msgstr "Hide Me From ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_hide_from_awareness_info" +msgstr "The ‘Who is online?’-Tool is in the top bar and listing selected users (e.g. contacts or members of your courses)." + +#, fuzzy +msgid "awrn_inactive" +msgstr "Not Listed" + +#, fuzzy +msgid "awrn_incl_offline" +msgstr "Online and Offline" + +#, fuzzy +msgid "awrn_max_inactivity" +msgstr "Maximum Inactivity Period" + +#, fuzzy +msgid "awrn_max_inactivity_info" +msgstr "After this period users are considered being offline. If nothing is set, the session time will be used." + +#, fuzzy +msgid "awrn_max_nr_entries" +msgstr "Max. Number of Items" + +#, fuzzy +msgid "awrn_max_nr_entries_info" +msgstr "Maximum number of items in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_minutes" +msgstr "min" + +#, fuzzy +msgid "awrn_online" +msgstr "Online" + +#, fuzzy +msgid "awrn_online_only" +msgstr "Online Only" + +#, fuzzy +msgid "awrn_seconds" +msgstr "sec" + +#, fuzzy +msgid "awrn_use_osd" +msgstr "Popup Online Users" + +#, fuzzy +msgid "awrn_use_osd_info" +msgstr "Display a popup to indicate new online users in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_user_show" +msgstr "Show Your Account in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +#, fuzzy +msgid "user_awrn_default" +msgstr "Default" + +#, fuzzy +msgid "user_awrn_hide" +msgstr "Hide my status" + +#, fuzzy +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_lt.po b/components/ILIAS/Awareness/lang/awrn_lt.po new file mode 100644 index 000000000000..5f985ebcb5dc --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_lt.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: awrn\n" + +#, fuzzy +msgid "awareness_now_online" +msgstr "Online Now" + +#, fuzzy +msgid "awareness_settings" +msgstr "Settings" + +#, fuzzy +msgid "awrn_caching_period" +msgstr "Caching Period" + +#, fuzzy +msgid "awrn_caching_period_info" +msgstr "Time that is waited before the number of users in the top bar is updated and new online users are determined." + +#, fuzzy +msgid "awrn_enable" +msgstr "Enable ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_filter" +msgstr "User Filter" + +#, fuzzy +msgid "awrn_hide_from_awareness" +msgstr "Hide Me From ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_hide_from_awareness_info" +msgstr "The ‘Who is online?’-Tool is in the top bar and listing selected users (e.g. contacts or members of your courses)." + +#, fuzzy +msgid "awrn_inactive" +msgstr "Not Listed" + +#, fuzzy +msgid "awrn_incl_offline" +msgstr "Online and Offline" + +#, fuzzy +msgid "awrn_max_inactivity" +msgstr "Maximum Inactivity Period" + +#, fuzzy +msgid "awrn_max_inactivity_info" +msgstr "After this period users are considered being offline. If nothing is set, the session time will be used." + +#, fuzzy +msgid "awrn_max_nr_entries" +msgstr "Max. Number of Items" + +#, fuzzy +msgid "awrn_max_nr_entries_info" +msgstr "Maximum number of items in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_minutes" +msgstr "min" + +#, fuzzy +msgid "awrn_online" +msgstr "Online" + +#, fuzzy +msgid "awrn_online_only" +msgstr "Online Only" + +#, fuzzy +msgid "awrn_seconds" +msgstr "sec" + +#, fuzzy +msgid "awrn_use_osd" +msgstr "Popup Online Users" + +#, fuzzy +msgid "awrn_use_osd_info" +msgstr "Display a popup to indicate new online users in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_user_show" +msgstr "Show Your Account in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +#, fuzzy +msgid "user_awrn_default" +msgstr "Default" + +#, fuzzy +msgid "user_awrn_hide" +msgstr "Hide my status" + +#, fuzzy +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_nl.po b/components/ILIAS/Awareness/lang/awrn_nl.po new file mode 100644 index 000000000000..0c0dfaae840a --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_nl.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: awrn\n" + +#, fuzzy +msgid "awareness_now_online" +msgstr "Online Now" + +#, fuzzy +msgid "awareness_settings" +msgstr "Settings" + +#, fuzzy +msgid "awrn_caching_period" +msgstr "Caching Period" + +#, fuzzy +msgid "awrn_caching_period_info" +msgstr "Time that is waited before the number of users in the top bar is updated and new online users are determined." + +#, fuzzy +msgid "awrn_enable" +msgstr "Enable ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_filter" +msgstr "User Filter" + +#, fuzzy +msgid "awrn_hide_from_awareness" +msgstr "Hide Me From ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_hide_from_awareness_info" +msgstr "The ‘Who is online?’-Tool is in the top bar and listing selected users (e.g. contacts or members of your courses)." + +#, fuzzy +msgid "awrn_inactive" +msgstr "Not Listed" + +#, fuzzy +msgid "awrn_incl_offline" +msgstr "Online and Offline" + +#, fuzzy +msgid "awrn_max_inactivity" +msgstr "Maximum Inactivity Period" + +#, fuzzy +msgid "awrn_max_inactivity_info" +msgstr "After this period users are considered being offline. If nothing is set, the session time will be used." + +#, fuzzy +msgid "awrn_max_nr_entries" +msgstr "Max. Number of Items" + +#, fuzzy +msgid "awrn_max_nr_entries_info" +msgstr "Maximum number of items in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_minutes" +msgstr "min" + +#, fuzzy +msgid "awrn_online" +msgstr "Online" + +#, fuzzy +msgid "awrn_online_only" +msgstr "Online Only" + +#, fuzzy +msgid "awrn_seconds" +msgstr "sec" + +#, fuzzy +msgid "awrn_use_osd" +msgstr "Popup Online Users" + +#, fuzzy +msgid "awrn_use_osd_info" +msgstr "Display a popup to indicate new online users in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_user_show" +msgstr "Show Your Account in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +#, fuzzy +msgid "user_awrn_default" +msgstr "Default" + +#, fuzzy +msgid "user_awrn_hide" +msgstr "Hide my status" + +#, fuzzy +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_pl.po b/components/ILIAS/Awareness/lang/awrn_pl.po new file mode 100644 index 000000000000..8a27251c7fa1 --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_pl.po @@ -0,0 +1,94 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: awrn\n" + +msgid "awareness_now_online" +msgstr "Teraz w trybie online" + +msgid "awareness_settings" +msgstr "Ustawienia" + +msgid "awrn_caching_period" +msgstr "Okres, pamięć podręczna" + +msgid "awrn_caching_period_info" +msgstr "Ten okres musi upłynąć, zanim zostanie zaktualizowana liczba top-użytkowników i ustalona liczna nowych użytkowników online." + +msgid "awrn_enable" +msgstr "Aktywuj informację „Kto jest online?”" + +#, fuzzy +msgid "awrn_filter" +msgstr "User Filter" + +msgid "awrn_hide_from_awareness" +msgstr "Nie ujmować mnie w liście „Kto jest online?”" + +msgid "awrn_hide_from_awareness_info" +msgstr "Informacja „Kto jest online?” pojawia się u góry w nagłówku aplikacji i zawiera listę wybranych użytkowników (np. kontakty lub członkowie Twoich kursów)." + +msgid "awrn_inactive" +msgstr "Brak informacji" + +msgid "awrn_incl_offline" +msgstr "Online i offline" + +msgid "awrn_max_inactivity" +msgstr "Maks. nieaktywność" + +msgid "awrn_max_inactivity_info" +msgstr "Użytkownicy, którzy w określonym okresie nie wykonują żadnych czynności, oznaczeni są jako \"offline\". Jeśli nie zostanie podana żadna wartość, obowiązuje ważność sesji." + +msgid "awrn_max_nr_entries" +msgstr "Liczba maks. wpisów" + +msgid "awrn_max_nr_entries_info" +msgstr "Ta liczba wpisów jest pokazywana w liście Kto jest online?”. To ustawienie nie wpływa zbytnio na moc obliczeniową wyświetlanych top-wartości." + +msgid "awrn_minutes" +msgstr "min" + +msgid "awrn_online" +msgstr "Online" + +msgid "awrn_online_only" +msgstr "Tylko online" + +msgid "awrn_seconds" +msgstr "Sek." + +msgid "awrn_use_osd" +msgstr "Wyskakujące okienko z użytkownikami w trybie online" + +msgid "awrn_use_osd_info" +msgstr "Wyświetla wyskakujące okienko, gdy w oknie „Kto jest online?” pojawią się nowi użytkownicy w trybie online." + +#, fuzzy +msgid "awrn_user_show" +msgstr "Show Your Account in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +#, fuzzy +msgid "user_awrn_default" +msgstr "Default" + +#, fuzzy +msgid "user_awrn_hide" +msgstr "Hide my status" + +#, fuzzy +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_pt.po b/components/ILIAS/Awareness/lang/awrn_pt.po new file mode 100644 index 000000000000..986f65d76d1f --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_pt.po @@ -0,0 +1,94 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: awrn\n" + +msgid "awareness_now_online" +msgstr "Online agora" + +msgid "awareness_settings" +msgstr "Definições" + +msgid "awrn_caching_period" +msgstr "Período Caching" + +msgid "awrn_caching_period_info" +msgstr "Tempo que se espera antes do número de utilizadores na barra superior ser atualizado e de serem determinados novos utilizadores online." + +msgid "awrn_enable" +msgstr "Ativar ferramenta ‘Who is online?’ (Quem está online?)" + +#, fuzzy +msgid "awrn_filter" +msgstr "User Filter" + +msgid "awrn_hide_from_awareness" +msgstr "Ocultar-me da ferramenta ‘Who is online?’ (Quem está online?)" + +msgid "awrn_hide_from_awareness_info" +msgstr "A ferramenta ‘Who is online?’ está na barra superior e enumera os utilizadores selecionados (p. ex. contactos ou membros dos seus cursos)." + +msgid "awrn_inactive" +msgstr "Não constam da lista" + +msgid "awrn_incl_offline" +msgstr "Online e offline" + +msgid "awrn_max_inactivity" +msgstr "Período máximo de inatividade" + +msgid "awrn_max_inactivity_info" +msgstr "Depois deste período, os utilizadores são considerados offline. Se não estiver nada definido, será usado o tempo da sessão." + +msgid "awrn_max_nr_entries" +msgstr "Número máx. de itens" + +msgid "awrn_max_nr_entries_info" +msgstr "Aqui pode procurar utilizadores que gostaria de adicionar a uma conversação. Se a caixa de diálogo de procura tiver sido aberta dentro de um chat de grupo, o novo utilizador será adicionado a este chat. Se começou a procura dentro de um chat 1:1, abre-se uma nova janela de chat de grupo." + +msgid "awrn_minutes" +msgstr "min" + +msgid "awrn_online" +msgstr "Online" + +msgid "awrn_online_only" +msgstr "Online apenas" + +msgid "awrn_seconds" +msgstr "seg" + +msgid "awrn_use_osd" +msgstr "Popup utilizadores online" + +msgid "awrn_use_osd_info" +msgstr "Mostra um popup para indicar novos utilizadores online na lista ‘Who is online?’." + +#, fuzzy +msgid "awrn_user_show" +msgstr "Show your account in \"Who-is-online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +#, fuzzy +msgid "user_awrn_default" +msgstr "Default" + +#, fuzzy +msgid "user_awrn_hide" +msgstr "Hide my status" + +#, fuzzy +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_ro.po b/components/ILIAS/Awareness/lang/awrn_ro.po new file mode 100644 index 000000000000..016b54db4a97 --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_ro.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: awrn\n" + +#, fuzzy +msgid "awareness_now_online" +msgstr "Online Now" + +#, fuzzy +msgid "awareness_settings" +msgstr "Settings" + +#, fuzzy +msgid "awrn_caching_period" +msgstr "Caching Period" + +#, fuzzy +msgid "awrn_caching_period_info" +msgstr "Time that is waited before the number of users in the top bar is updated and new online users are determined." + +#, fuzzy +msgid "awrn_enable" +msgstr "Enable ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_filter" +msgstr "User Filter" + +#, fuzzy +msgid "awrn_hide_from_awareness" +msgstr "Hide Me From ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_hide_from_awareness_info" +msgstr "The ‘Who is online?’-Tool is in the top bar and listing selected users (e.g. contacts or members of your courses)." + +#, fuzzy +msgid "awrn_inactive" +msgstr "Not Listed" + +#, fuzzy +msgid "awrn_incl_offline" +msgstr "Online and Offline" + +#, fuzzy +msgid "awrn_max_inactivity" +msgstr "Maximum Inactivity Period" + +#, fuzzy +msgid "awrn_max_inactivity_info" +msgstr "After this period users are considered being offline. If nothing is set, the session time will be used." + +#, fuzzy +msgid "awrn_max_nr_entries" +msgstr "Max. Number of Items" + +#, fuzzy +msgid "awrn_max_nr_entries_info" +msgstr "Maximum number of items in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_minutes" +msgstr "min" + +#, fuzzy +msgid "awrn_online" +msgstr "Online" + +#, fuzzy +msgid "awrn_online_only" +msgstr "Online Only" + +#, fuzzy +msgid "awrn_seconds" +msgstr "sec" + +#, fuzzy +msgid "awrn_use_osd" +msgstr "Popup Online Users" + +#, fuzzy +msgid "awrn_use_osd_info" +msgstr "Display a popup to indicate new online users in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_user_show" +msgstr "Show Your Account in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +#, fuzzy +msgid "user_awrn_default" +msgstr "Default" + +#, fuzzy +msgid "user_awrn_hide" +msgstr "Hide my status" + +#, fuzzy +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_ru.po b/components/ILIAS/Awareness/lang/awrn_ru.po new file mode 100644 index 000000000000..e2eb674aa41b --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_ru.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: awrn\n" + +#, fuzzy +msgid "awareness_now_online" +msgstr "Online Now" + +#, fuzzy +msgid "awareness_settings" +msgstr "Settings" + +#, fuzzy +msgid "awrn_caching_period" +msgstr "Caching Period" + +#, fuzzy +msgid "awrn_caching_period_info" +msgstr "Time that is waited before the number of users in the top bar is updated and new online users are determined." + +#, fuzzy +msgid "awrn_enable" +msgstr "Enable ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_filter" +msgstr "User Filter" + +#, fuzzy +msgid "awrn_hide_from_awareness" +msgstr "Hide Me From ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_hide_from_awareness_info" +msgstr "The ‘Who is online?’-Tool is in the top bar and listing selected users (e.g. contacts or members of your courses)." + +#, fuzzy +msgid "awrn_inactive" +msgstr "Not Listed" + +#, fuzzy +msgid "awrn_incl_offline" +msgstr "Online and Offline" + +#, fuzzy +msgid "awrn_max_inactivity" +msgstr "Maximum Inactivity Period" + +#, fuzzy +msgid "awrn_max_inactivity_info" +msgstr "After this period users are considered being offline. If nothing is set, the session time will be used." + +#, fuzzy +msgid "awrn_max_nr_entries" +msgstr "Max. Number of Items" + +#, fuzzy +msgid "awrn_max_nr_entries_info" +msgstr "Maximum number of items in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_minutes" +msgstr "min" + +#, fuzzy +msgid "awrn_online" +msgstr "Online" + +#, fuzzy +msgid "awrn_online_only" +msgstr "Online Only" + +#, fuzzy +msgid "awrn_seconds" +msgstr "sec" + +#, fuzzy +msgid "awrn_use_osd" +msgstr "Popup Online Users" + +#, fuzzy +msgid "awrn_use_osd_info" +msgstr "Display a popup to indicate new online users in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_user_show" +msgstr "Show Your Account in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +#, fuzzy +msgid "user_awrn_default" +msgstr "Default" + +#, fuzzy +msgid "user_awrn_hide" +msgstr "Hide my status" + +#, fuzzy +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_sk.po b/components/ILIAS/Awareness/lang/awrn_sk.po new file mode 100644 index 000000000000..bc90a22a8398 --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_sk.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: awrn\n" + +#, fuzzy +msgid "awareness_now_online" +msgstr "Online Now" + +#, fuzzy +msgid "awareness_settings" +msgstr "Settings" + +#, fuzzy +msgid "awrn_caching_period" +msgstr "Caching Period" + +#, fuzzy +msgid "awrn_caching_period_info" +msgstr "Time that is waited before the number of users in the top bar is updated and new online users are determined." + +#, fuzzy +msgid "awrn_enable" +msgstr "Enable ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_filter" +msgstr "User Filter" + +#, fuzzy +msgid "awrn_hide_from_awareness" +msgstr "Hide Me From ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_hide_from_awareness_info" +msgstr "The ‘Who is online?’-Tool is in the top bar and listing selected users (e.g. contacts or members of your courses)." + +#, fuzzy +msgid "awrn_inactive" +msgstr "Not Listed" + +#, fuzzy +msgid "awrn_incl_offline" +msgstr "Online and Offline" + +#, fuzzy +msgid "awrn_max_inactivity" +msgstr "Maximum Inactivity Period" + +#, fuzzy +msgid "awrn_max_inactivity_info" +msgstr "After this period users are considered being offline. If nothing is set, the session time will be used." + +#, fuzzy +msgid "awrn_max_nr_entries" +msgstr "Max. Number of Items" + +#, fuzzy +msgid "awrn_max_nr_entries_info" +msgstr "Maximum number of items in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_minutes" +msgstr "min" + +#, fuzzy +msgid "awrn_online" +msgstr "Online" + +#, fuzzy +msgid "awrn_online_only" +msgstr "Online Only" + +#, fuzzy +msgid "awrn_seconds" +msgstr "sec" + +#, fuzzy +msgid "awrn_use_osd" +msgstr "Popup Online Users" + +#, fuzzy +msgid "awrn_use_osd_info" +msgstr "Display a popup to indicate new online users in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_user_show" +msgstr "Show Your Account in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +#, fuzzy +msgid "user_awrn_default" +msgstr "Default" + +#, fuzzy +msgid "user_awrn_hide" +msgstr "Hide my status" + +#, fuzzy +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_sl.po b/components/ILIAS/Awareness/lang/awrn_sl.po new file mode 100644 index 000000000000..88c9488d7ff0 --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_sl.po @@ -0,0 +1,89 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: awrn\n" + +msgid "awareness_now_online" +msgstr "Online Now" + +msgid "awareness_settings" +msgstr "Settings" + +msgid "awrn_caching_period" +msgstr "Caching Period" + +msgid "awrn_caching_period_info" +msgstr "Time that is waited before the number of users in the top bar is updated and new online users are determined." + +msgid "awrn_enable" +msgstr "Enable ‘Who is online?’-Tool" + +msgid "awrn_filter" +msgstr "User Filter" + +msgid "awrn_hide_from_awareness" +msgstr "Hide Me From ‘Who is online?’-Tool" + +msgid "awrn_hide_from_awareness_info" +msgstr "The ‘Who is online?’-Tool is in the top bar and listing selected users (e.g. contacts or members of your courses)." + +msgid "awrn_inactive" +msgstr "Not Listed" + +msgid "awrn_incl_offline" +msgstr "Online and Offline" + +msgid "awrn_max_inactivity" +msgstr "Maximum Inactivity Period" + +msgid "awrn_max_inactivity_info" +msgstr "After this period users are considered being offline. If nothing is set, the session time will be used." + +msgid "awrn_max_nr_entries" +msgstr "Max. Number of Items" + +msgid "awrn_max_nr_entries_info" +msgstr "Maximum number of items in the ‘Who is online?’ list. This setting has only minimal performance influence when displaying the tool in the top bar." + +msgid "awrn_minutes" +msgstr "min" + +msgid "awrn_online" +msgstr "Online" + +msgid "awrn_online_only" +msgstr "Online Only" + +msgid "awrn_seconds" +msgstr "sec" + +msgid "awrn_use_osd" +msgstr "Popup Online Users" + +msgid "awrn_use_osd_info" +msgstr "Display a popup to indicate new online users in the ‘Who is online?’ list." + +msgid "awrn_user_show" +msgstr "Show your account in \"Who-is-online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +msgid "user_awrn_default" +msgstr "Default" + +msgid "user_awrn_hide" +msgstr "Hide my status" + +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_sq.po b/components/ILIAS/Awareness/lang/awrn_sq.po new file mode 100644 index 000000000000..9995e76cdd4e --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_sq.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: awrn\n" + +#, fuzzy +msgid "awareness_now_online" +msgstr "Online Now" + +#, fuzzy +msgid "awareness_settings" +msgstr "Settings" + +#, fuzzy +msgid "awrn_caching_period" +msgstr "Caching Period" + +#, fuzzy +msgid "awrn_caching_period_info" +msgstr "Time that is waited before the number of users in the top bar is updated and new online users are determined." + +#, fuzzy +msgid "awrn_enable" +msgstr "Enable ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_filter" +msgstr "User Filter" + +#, fuzzy +msgid "awrn_hide_from_awareness" +msgstr "Hide Me From ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_hide_from_awareness_info" +msgstr "The ‘Who is online?’-Tool is in the top bar and listing selected users (e.g. contacts or members of your courses)." + +#, fuzzy +msgid "awrn_inactive" +msgstr "Not Listed" + +#, fuzzy +msgid "awrn_incl_offline" +msgstr "Online and Offline" + +#, fuzzy +msgid "awrn_max_inactivity" +msgstr "Maximum Inactivity Period" + +#, fuzzy +msgid "awrn_max_inactivity_info" +msgstr "After this period users are considered being offline. If nothing is set, the session time will be used." + +#, fuzzy +msgid "awrn_max_nr_entries" +msgstr "Max. Number of Items" + +#, fuzzy +msgid "awrn_max_nr_entries_info" +msgstr "Maximum number of items in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_minutes" +msgstr "min" + +#, fuzzy +msgid "awrn_online" +msgstr "Online" + +#, fuzzy +msgid "awrn_online_only" +msgstr "Online Only" + +#, fuzzy +msgid "awrn_seconds" +msgstr "sec" + +#, fuzzy +msgid "awrn_use_osd" +msgstr "Popup Online Users" + +#, fuzzy +msgid "awrn_use_osd_info" +msgstr "Display a popup to indicate new online users in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_user_show" +msgstr "Show Your Account in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +#, fuzzy +msgid "user_awrn_default" +msgstr "Default" + +#, fuzzy +msgid "user_awrn_hide" +msgstr "Hide my status" + +#, fuzzy +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_sr.po b/components/ILIAS/Awareness/lang/awrn_sr.po new file mode 100644 index 000000000000..04afafb11ac0 --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_sr.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: awrn\n" + +#, fuzzy +msgid "awareness_now_online" +msgstr "Online Now" + +#, fuzzy +msgid "awareness_settings" +msgstr "Settings" + +#, fuzzy +msgid "awrn_caching_period" +msgstr "Caching Period" + +#, fuzzy +msgid "awrn_caching_period_info" +msgstr "Time that is waited before the number of users in the top bar is updated and new online users are determined." + +#, fuzzy +msgid "awrn_enable" +msgstr "Enable ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_filter" +msgstr "User Filter" + +#, fuzzy +msgid "awrn_hide_from_awareness" +msgstr "Hide Me From ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_hide_from_awareness_info" +msgstr "The ‘Who is online?’-Tool is in the top bar and listing selected users (e.g. contacts or members of your courses)." + +#, fuzzy +msgid "awrn_inactive" +msgstr "Not Listed" + +#, fuzzy +msgid "awrn_incl_offline" +msgstr "Online and Offline" + +#, fuzzy +msgid "awrn_max_inactivity" +msgstr "Maximum Inactivity Period" + +#, fuzzy +msgid "awrn_max_inactivity_info" +msgstr "After this period users are considered being offline. If nothing is set, the session time will be used." + +#, fuzzy +msgid "awrn_max_nr_entries" +msgstr "Max. Number of Items" + +#, fuzzy +msgid "awrn_max_nr_entries_info" +msgstr "Maximum number of items in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_minutes" +msgstr "min" + +#, fuzzy +msgid "awrn_online" +msgstr "Online" + +#, fuzzy +msgid "awrn_online_only" +msgstr "Online Only" + +#, fuzzy +msgid "awrn_seconds" +msgstr "sec" + +#, fuzzy +msgid "awrn_use_osd" +msgstr "Popup Online Users" + +#, fuzzy +msgid "awrn_use_osd_info" +msgstr "Display a popup to indicate new online users in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_user_show" +msgstr "Show Your Account in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +#, fuzzy +msgid "user_awrn_default" +msgstr "Default" + +#, fuzzy +msgid "user_awrn_hide" +msgstr "Hide my status" + +#, fuzzy +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_sv.po b/components/ILIAS/Awareness/lang/awrn_sv.po new file mode 100644 index 000000000000..b71fabce8c9f --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_sv.po @@ -0,0 +1,89 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: awrn\n" + +msgid "awareness_now_online" +msgstr "Nu online" + +msgid "awareness_settings" +msgstr "Inställningar" + +msgid "awrn_caching_period" +msgstr "Caching-period" + +msgid "awrn_caching_period_info" +msgstr "Denna period inväntas innan antalet användare i toppdisplayen uppdateras och nya online-användare identifieras." + +msgid "awrn_enable" +msgstr "Aktivera displayen \"Vem är online?\"" + +msgid "awrn_filter" +msgstr "Användarfilter" + +msgid "awrn_hide_from_awareness" +msgstr "Lista inte upp mig i \"Vem är online?\"-visningen" + +msgid "awrn_hide_from_awareness_info" +msgstr "Indikatorn \"Vem är online?\" visas högst upp i applikationen och listar valda användare (t.ex. kontakter eller medlemmar i dina kurser)." + +msgid "awrn_inactive" +msgstr "Ingen display" + +msgid "awrn_incl_offline" +msgstr "Online och offline" + +msgid "awrn_max_inactivity" +msgstr "Max. Inaktivitet" + +msgid "awrn_max_inactivity_info" +msgstr "Användare som inte har agerat under den angivna tidsperioden listas som \"offline\". Om inget värde anges gäller sessionens giltighet." + +msgid "awrn_max_nr_entries" +msgstr "Antal max. inmatningar" + +msgid "awrn_max_nr_entries_info" +msgstr "Detta är det maximala antalet poster som visas i listan \"Vem är online?\". Den här inställningen har ingen större inverkan på visningen i det övre fältet." + +msgid "awrn_minutes" +msgstr "min" + +msgid "awrn_online" +msgstr "Online" + +msgid "awrn_online_only" +msgstr "Endast online" + +msgid "awrn_seconds" +msgstr "Sec." + +msgid "awrn_use_osd" +msgstr "Popup online-användare" + +msgid "awrn_use_osd_info" +msgstr "Visar en popup när nya användare visas i \"Vem är online?\"-displayen med online-status." + +msgid "awrn_user_show" +msgstr "Visa min status i \"Vem är online?" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +msgid "user_awrn_default" +msgstr "Standard" + +msgid "user_awrn_hide" +msgstr "Visa inte" + +msgid "user_awrn_show" +msgstr "Display" diff --git a/components/ILIAS/Awareness/lang/awrn_tr.po b/components/ILIAS/Awareness/lang/awrn_tr.po new file mode 100644 index 000000000000..2968d661ebed --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_tr.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: awrn\n" + +#, fuzzy +msgid "awareness_now_online" +msgstr "Online Now" + +#, fuzzy +msgid "awareness_settings" +msgstr "Settings" + +#, fuzzy +msgid "awrn_caching_period" +msgstr "Caching Period" + +#, fuzzy +msgid "awrn_caching_period_info" +msgstr "Time that is waited before the number of users in the top bar is updated and new online users are determined." + +#, fuzzy +msgid "awrn_enable" +msgstr "Enable ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_filter" +msgstr "User Filter" + +#, fuzzy +msgid "awrn_hide_from_awareness" +msgstr "Hide Me From ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_hide_from_awareness_info" +msgstr "The ‘Who is online?’-Tool is in the top bar and listing selected users (e.g. contacts or members of your courses)." + +#, fuzzy +msgid "awrn_inactive" +msgstr "Not Listed" + +#, fuzzy +msgid "awrn_incl_offline" +msgstr "Online and Offline" + +#, fuzzy +msgid "awrn_max_inactivity" +msgstr "Maximum Inactivity Period" + +#, fuzzy +msgid "awrn_max_inactivity_info" +msgstr "After this period users are considered being offline. If nothing is set, the session time will be used." + +#, fuzzy +msgid "awrn_max_nr_entries" +msgstr "Max. Number of Items" + +#, fuzzy +msgid "awrn_max_nr_entries_info" +msgstr "Maximum number of items in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_minutes" +msgstr "min" + +#, fuzzy +msgid "awrn_online" +msgstr "Online" + +#, fuzzy +msgid "awrn_online_only" +msgstr "Online Only" + +#, fuzzy +msgid "awrn_seconds" +msgstr "sec" + +#, fuzzy +msgid "awrn_use_osd" +msgstr "Popup Online Users" + +#, fuzzy +msgid "awrn_use_osd_info" +msgstr "Display a popup to indicate new online users in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_user_show" +msgstr "Show Your Account in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +#, fuzzy +msgid "user_awrn_default" +msgstr "Default" + +#, fuzzy +msgid "user_awrn_hide" +msgstr "Hide my status" + +#, fuzzy +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_uk.po b/components/ILIAS/Awareness/lang/awrn_uk.po new file mode 100644 index 000000000000..c663f04af9b8 --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_uk.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: awrn\n" + +#, fuzzy +msgid "awareness_now_online" +msgstr "Online Now" + +#, fuzzy +msgid "awareness_settings" +msgstr "Settings" + +#, fuzzy +msgid "awrn_caching_period" +msgstr "Caching Period" + +#, fuzzy +msgid "awrn_caching_period_info" +msgstr "Time that is waited before the number of users in the top bar is updated and new online users are determined." + +#, fuzzy +msgid "awrn_enable" +msgstr "Enable ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_filter" +msgstr "User Filter" + +#, fuzzy +msgid "awrn_hide_from_awareness" +msgstr "Hide Me From ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_hide_from_awareness_info" +msgstr "The ‘Who is online?’-Tool is in the top bar and listing selected users (e.g. contacts or members of your courses)." + +#, fuzzy +msgid "awrn_inactive" +msgstr "Not Listed" + +#, fuzzy +msgid "awrn_incl_offline" +msgstr "Online and Offline" + +#, fuzzy +msgid "awrn_max_inactivity" +msgstr "Maximum Inactivity Period" + +#, fuzzy +msgid "awrn_max_inactivity_info" +msgstr "After this period users are considered being offline. If nothing is set, the session time will be used." + +#, fuzzy +msgid "awrn_max_nr_entries" +msgstr "Max. Number of Items" + +#, fuzzy +msgid "awrn_max_nr_entries_info" +msgstr "Maximum number of items in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_minutes" +msgstr "min" + +#, fuzzy +msgid "awrn_online" +msgstr "Online" + +#, fuzzy +msgid "awrn_online_only" +msgstr "Online Only" + +#, fuzzy +msgid "awrn_seconds" +msgstr "sec" + +#, fuzzy +msgid "awrn_use_osd" +msgstr "Popup Online Users" + +#, fuzzy +msgid "awrn_use_osd_info" +msgstr "Display a popup to indicate new online users in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_user_show" +msgstr "Show Your Account in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +#, fuzzy +msgid "user_awrn_default" +msgstr "Default" + +#, fuzzy +msgid "user_awrn_hide" +msgstr "Hide my status" + +#, fuzzy +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_vi.po b/components/ILIAS/Awareness/lang/awrn_vi.po new file mode 100644 index 000000000000..158337f54a66 --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_vi.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: awrn\n" + +#, fuzzy +msgid "awareness_now_online" +msgstr "Online Now" + +#, fuzzy +msgid "awareness_settings" +msgstr "Settings" + +#, fuzzy +msgid "awrn_caching_period" +msgstr "Caching Period" + +#, fuzzy +msgid "awrn_caching_period_info" +msgstr "Time that is waited before the number of users in the top bar is updated and new online users are determined." + +#, fuzzy +msgid "awrn_enable" +msgstr "Enable ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_filter" +msgstr "User Filter" + +#, fuzzy +msgid "awrn_hide_from_awareness" +msgstr "Hide Me From ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_hide_from_awareness_info" +msgstr "The ‘Who is online?’-Tool is in the top bar and listing selected users (e.g. contacts or members of your courses)." + +#, fuzzy +msgid "awrn_inactive" +msgstr "Not Listed" + +#, fuzzy +msgid "awrn_incl_offline" +msgstr "Online and Offline" + +#, fuzzy +msgid "awrn_max_inactivity" +msgstr "Maximum Inactivity Period" + +#, fuzzy +msgid "awrn_max_inactivity_info" +msgstr "After this period users are considered being offline. If nothing is set, the session time will be used." + +#, fuzzy +msgid "awrn_max_nr_entries" +msgstr "Max. Number of Items" + +#, fuzzy +msgid "awrn_max_nr_entries_info" +msgstr "Maximum number of items in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_minutes" +msgstr "min" + +#, fuzzy +msgid "awrn_online" +msgstr "Online" + +#, fuzzy +msgid "awrn_online_only" +msgstr "Online Only" + +#, fuzzy +msgid "awrn_seconds" +msgstr "sec" + +#, fuzzy +msgid "awrn_use_osd" +msgstr "Popup Online Users" + +#, fuzzy +msgid "awrn_use_osd_info" +msgstr "Display a popup to indicate new online users in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_user_show" +msgstr "Show Your Account in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +#, fuzzy +msgid "user_awrn_default" +msgstr "Default" + +#, fuzzy +msgid "user_awrn_hide" +msgstr "Hide my status" + +#, fuzzy +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Awareness/lang/awrn_zh.po b/components/ILIAS/Awareness/lang/awrn_zh.po new file mode 100644 index 000000000000..c9a4fc86f7fb --- /dev/null +++ b/components/ILIAS/Awareness/lang/awrn_zh.po @@ -0,0 +1,113 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: awrn\n" + +#, fuzzy +msgid "awareness_now_online" +msgstr "Online Now" + +#, fuzzy +msgid "awareness_settings" +msgstr "Settings" + +#, fuzzy +msgid "awrn_caching_period" +msgstr "Caching Period" + +#, fuzzy +msgid "awrn_caching_period_info" +msgstr "Time that is waited before the number of users in the top bar is updated and new online users are determined." + +#, fuzzy +msgid "awrn_enable" +msgstr "Enable ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_filter" +msgstr "User Filter" + +#, fuzzy +msgid "awrn_hide_from_awareness" +msgstr "Hide Me From ‘Who is online?’-Tool" + +#, fuzzy +msgid "awrn_hide_from_awareness_info" +msgstr "The ‘Who is online?’-Tool is in the top bar and listing selected users (e.g. contacts or members of your courses)." + +#, fuzzy +msgid "awrn_inactive" +msgstr "Not Listed" + +#, fuzzy +msgid "awrn_incl_offline" +msgstr "Online and Offline" + +#, fuzzy +msgid "awrn_max_inactivity" +msgstr "Maximum Inactivity Period" + +#, fuzzy +msgid "awrn_max_inactivity_info" +msgstr "After this period users are considered being offline. If nothing is set, the session time will be used." + +#, fuzzy +msgid "awrn_max_nr_entries" +msgstr "Max. Number of Items" + +#, fuzzy +msgid "awrn_max_nr_entries_info" +msgstr "Maximum number of items in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_minutes" +msgstr "min" + +#, fuzzy +msgid "awrn_online" +msgstr "Online" + +#, fuzzy +msgid "awrn_online_only" +msgstr "Online Only" + +#, fuzzy +msgid "awrn_seconds" +msgstr "sec" + +#, fuzzy +msgid "awrn_use_osd" +msgstr "Popup Online Users" + +#, fuzzy +msgid "awrn_use_osd_info" +msgstr "Display a popup to indicate new online users in the ‘Who is online?’ list." + +#, fuzzy +msgid "awrn_user_show" +msgstr "Show Your Account in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default" +msgstr "Default Value for the Visibility in \"Who-Is-Online?\"" + +#, fuzzy +msgid "awrn_user_show_default_info" +msgstr "Defines the default value for the visibility of the status of a user in \"Who-Is-Online?\"." + +#, fuzzy +msgid "user_awrn_default" +msgstr "Default" + +#, fuzzy +msgid "user_awrn_hide" +msgstr "Hide my status" + +#, fuzzy +msgid "user_awrn_show" +msgstr "Show my status" diff --git a/components/ILIAS/Benchmark/Benchmark.php b/components/ILIAS/Benchmark/Benchmark.php index 2bbd3b3ae6f5..482afc70fd2e 100644 --- a/components/ILIAS/Benchmark/Benchmark.php +++ b/components/ILIAS/Benchmark/Benchmark.php @@ -20,6 +20,9 @@ namespace ILIAS; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; + class Benchmark implements Component\Component { public function init( @@ -36,5 +39,9 @@ public function init( new \ILIAS\Benchmark\Setup\Agent( $pull[\ILIAS\Refinery\Factory::class] ); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'benchmark' + ); } } diff --git a/components/ILIAS/Benchmark/lang/benchmark.pot b/components/ILIAS/Benchmark/lang/benchmark.pot new file mode 100644 index 000000000000..51e10c2c7520 --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark.pot @@ -0,0 +1,39 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: benchmark\n" + +msgid "adm_activate_db_benchmark" +msgstr "" + +msgid "adm_activate_db_benchmark_desc" +msgstr "" + +msgid "adm_db_bench_by_first_table" +msgstr "" + +msgid "adm_db_bench_chronological" +msgstr "" + +msgid "adm_db_bench_slowest_first" +msgstr "" + +msgid "adm_db_bench_sorted_by_sql" +msgstr "" + +msgid "adm_db_benchmark" +msgstr "" + +msgid "adm_db_benchmark_user" +msgstr "" + +msgid "adm_db_benchmark_user_desc" +msgstr "" + +msgid "adm_sql" +msgstr "" + +msgid "adm_time" +msgstr "" diff --git a/components/ILIAS/Benchmark/lang/benchmark_ar.po b/components/ILIAS/Benchmark/lang/benchmark_ar.po new file mode 100644 index 000000000000..cfd5b5076643 --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_ar.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_bg.po b/components/ILIAS/Benchmark/lang/benchmark_bg.po new file mode 100644 index 000000000000..0bedab885f22 --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_bg.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_cs.po b/components/ILIAS/Benchmark/lang/benchmark_cs.po new file mode 100644 index 000000000000..d57f95446640 --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_cs.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_da.po b/components/ILIAS/Benchmark/lang/benchmark_da.po new file mode 100644 index 000000000000..0147fca3432c --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_da.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_de.po b/components/ILIAS/Benchmark/lang/benchmark_de.po new file mode 100644 index 000000000000..eb81a8e52628 --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_de.po @@ -0,0 +1,42 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: benchmark\n" + +msgid "adm_activate_db_benchmark" +msgstr "Messung aktivieren" + +msgid "adm_activate_db_benchmark_desc" +msgstr "Die Messung wird automatisch nach einem Server-Request beendet." + +msgid "adm_db_bench_by_first_table" +msgstr "Aggregiert nach dem ersten Tabellennamen" + +msgid "adm_db_bench_chronological" +msgstr "Chronologisch" + +msgid "adm_db_bench_slowest_first" +msgstr "Langsamste zuerst" + +msgid "adm_db_bench_sorted_by_sql" +msgstr "Nach SQL sortieren" + +msgid "adm_db_benchmark" +msgstr "Datenbank Benchmark" + +msgid "adm_db_benchmark_user" +msgstr "Anmeldename" + +msgid "adm_db_benchmark_user_desc" +msgstr "Für dieses ILIAS-Konto wird die Messung durchgeführt. Aktivieren Sie diese Funktion nicht für Ihr eigenes Konto." + +msgid "adm_sql" +msgstr "SQL" + +msgid "adm_time" +msgstr "Zeit" diff --git a/components/ILIAS/Benchmark/lang/benchmark_el.po b/components/ILIAS/Benchmark/lang/benchmark_el.po new file mode 100644 index 000000000000..68746ab6c674 --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_el.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_en.po b/components/ILIAS/Benchmark/lang/benchmark_en.po new file mode 100644 index 000000000000..3c221a49d2b8 --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_en.po @@ -0,0 +1,42 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: benchmark\n" + +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +msgid "adm_sql" +msgstr "SQL" + +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_es.po b/components/ILIAS/Benchmark/lang/benchmark_es.po new file mode 100644 index 000000000000..3f233bad8c64 --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_es.po @@ -0,0 +1,42 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: benchmark\n" + +msgid "adm_activate_db_benchmark" +msgstr "Activar evaluación comparativa" + +msgid "adm_activate_db_benchmark_desc" +msgstr "La evaluación comparativa se desactivará automáticamente después de una solicitud." + +msgid "adm_db_bench_by_first_table" +msgstr "Agregado por la primera tabla en SQL" + +msgid "adm_db_bench_chronological" +msgstr "Cronológico" + +msgid "adm_db_bench_slowest_first" +msgstr "Más lentos primero" + +msgid "adm_db_bench_sorted_by_sql" +msgstr "Ordenado por SQL" + +msgid "adm_db_benchmark" +msgstr "Benchmark de BD" + +msgid "adm_db_benchmark_user" +msgstr "Nombre de la cuenta de usuario" + +msgid "adm_db_benchmark_user_desc" +msgstr "Las mediciones se realizarán solo para este usuario. El nombre de usuario ingresado no debe pertenecer al usuario que inicia la evaluación comparativa." + +msgid "adm_sql" +msgstr "SQL" + +msgid "adm_time" +msgstr "Tiempo" diff --git a/components/ILIAS/Benchmark/lang/benchmark_et.po b/components/ILIAS/Benchmark/lang/benchmark_et.po new file mode 100644 index 000000000000..493214163e4f --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_et.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_fa.po b/components/ILIAS/Benchmark/lang/benchmark_fa.po new file mode 100644 index 000000000000..a23553102810 --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_fa.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_fr.po b/components/ILIAS/Benchmark/lang/benchmark_fr.po new file mode 100644 index 000000000000..8f162766bf3f --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_fr.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_hr.po b/components/ILIAS/Benchmark/lang/benchmark_hr.po new file mode 100644 index 000000000000..eb793e145842 --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_hr.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_hu.po b/components/ILIAS/Benchmark/lang/benchmark_hu.po new file mode 100644 index 000000000000..e8229866971f --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_hu.po @@ -0,0 +1,42 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: benchmark\n" + +msgid "adm_activate_db_benchmark" +msgstr "Teljesítménymérés bekapcsolása" + +msgid "adm_activate_db_benchmark_desc" +msgstr "A teljesítménymérést automatikusan leállítjuk egy kérelem után." + +msgid "adm_db_bench_by_first_table" +msgstr "Első SQL tábla alapján összesítve" + +msgid "adm_db_bench_chronological" +msgstr "Időrendi" + +msgid "adm_db_bench_slowest_first" +msgstr "Leglassabbak előre" + +msgid "adm_db_bench_sorted_by_sql" +msgstr "Rendezés SQL szerint" + +msgid "adm_db_benchmark" +msgstr "Adatbázis teljesítménymérés" + +msgid "adm_db_benchmark_user" +msgstr "Felhasználónév" + +msgid "adm_db_benchmark_user_desc" +msgstr "Csak ehhez a felhasználóhoz készítünk méréseket. A megadott felhasználónév nem tartozhat a teljesítménymérést kezdeményező felhasználóhoz." + +msgid "adm_sql" +msgstr "SQL" + +msgid "adm_time" +msgstr "Idő" diff --git a/components/ILIAS/Benchmark/lang/benchmark_it.po b/components/ILIAS/Benchmark/lang/benchmark_it.po new file mode 100644 index 000000000000..f9940bebd235 --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_it.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_ja.po b/components/ILIAS/Benchmark/lang/benchmark_ja.po new file mode 100644 index 000000000000..b8a277f5f8c6 --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_ja.po @@ -0,0 +1,42 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: benchmark\n" + +msgid "adm_activate_db_benchmark" +msgstr "ベンチマークを有効化" + +msgid "adm_activate_db_benchmark_desc" +msgstr "ベンチマークは1回のリクエスト後に自動的に無効になります" + +msgid "adm_db_bench_by_first_table" +msgstr "SQLの最初のテーブル集計" + +msgid "adm_db_bench_chronological" +msgstr "時系列" + +msgid "adm_db_bench_slowest_first" +msgstr "最も遅いものを最初に" + +msgid "adm_db_bench_sorted_by_sql" +msgstr "SQLでソート" + +msgid "adm_db_benchmark" +msgstr "DBベンチマーク" + +msgid "adm_db_benchmark_user" +msgstr "アカウント名を使用" + +msgid "adm_db_benchmark_user_desc" +msgstr "測定はこのユーザーのみに対して行われます。入力されたユーザー名は、ベンチマークを開始するユーザーのものでないことが必要です。" + +msgid "adm_sql" +msgstr "SQL" + +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_ka.po b/components/ILIAS/Benchmark/lang/benchmark_ka.po new file mode 100644 index 000000000000..aad1b8c4492e --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_ka.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_lt.po b/components/ILIAS/Benchmark/lang/benchmark_lt.po new file mode 100644 index 000000000000..ba0c81eb7bce --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_lt.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_nl.po b/components/ILIAS/Benchmark/lang/benchmark_nl.po new file mode 100644 index 000000000000..c890ed7d3834 --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_nl.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_pl.po b/components/ILIAS/Benchmark/lang/benchmark_pl.po new file mode 100644 index 000000000000..45516930678a --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_pl.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_pt.po b/components/ILIAS/Benchmark/lang/benchmark_pt.po new file mode 100644 index 000000000000..00b2cca4f4fb --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_pt.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_ro.po b/components/ILIAS/Benchmark/lang/benchmark_ro.po new file mode 100644 index 000000000000..a6127e468e37 --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_ro.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_ru.po b/components/ILIAS/Benchmark/lang/benchmark_ru.po new file mode 100644 index 000000000000..18192a618ea1 --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_ru.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_sk.po b/components/ILIAS/Benchmark/lang/benchmark_sk.po new file mode 100644 index 000000000000..85af4cf2a3b7 --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_sk.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_sl.po b/components/ILIAS/Benchmark/lang/benchmark_sl.po new file mode 100644 index 000000000000..fafb374b6345 --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_sl.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_sq.po b/components/ILIAS/Benchmark/lang/benchmark_sq.po new file mode 100644 index 000000000000..f08a1586678e --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_sq.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_sr.po b/components/ILIAS/Benchmark/lang/benchmark_sr.po new file mode 100644 index 000000000000..140c4cb0b78e --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_sr.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_sv.po b/components/ILIAS/Benchmark/lang/benchmark_sv.po new file mode 100644 index 000000000000..2b77b2aede4a --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_sv.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_tr.po b/components/ILIAS/Benchmark/lang/benchmark_tr.po new file mode 100644 index 000000000000..50b2557ca016 --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_tr.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_uk.po b/components/ILIAS/Benchmark/lang/benchmark_uk.po new file mode 100644 index 000000000000..bc03fc1e47c7 --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_uk.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_vi.po b/components/ILIAS/Benchmark/lang/benchmark_vi.po new file mode 100644 index 000000000000..229ec664571e --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_vi.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/Benchmark/lang/benchmark_zh.po b/components/ILIAS/Benchmark/lang/benchmark_zh.po new file mode 100644 index 000000000000..650a8b513e59 --- /dev/null +++ b/components/ILIAS/Benchmark/lang/benchmark_zh.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: benchmark\n" + +#, fuzzy +msgid "adm_activate_db_benchmark" +msgstr "Activate Benchmarking" + +#, fuzzy +msgid "adm_activate_db_benchmark_desc" +msgstr "Benchmarking will be automatically disabled after one request." + +#, fuzzy +msgid "adm_db_bench_by_first_table" +msgstr "Aggregated by First Table in SQL" + +#, fuzzy +msgid "adm_db_bench_chronological" +msgstr "Chronological" + +#, fuzzy +msgid "adm_db_bench_slowest_first" +msgstr "Slowest First" + +#, fuzzy +msgid "adm_db_bench_sorted_by_sql" +msgstr "Sorted by SQL" + +#, fuzzy +msgid "adm_db_benchmark" +msgstr "DB Benchmark" + +#, fuzzy +msgid "adm_db_benchmark_user" +msgstr "User Account Name" + +#, fuzzy +msgid "adm_db_benchmark_user_desc" +msgstr "Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking." + +#, fuzzy +msgid "adm_sql" +msgstr "SQL" + +#, fuzzy +msgid "adm_time" +msgstr "Time" diff --git a/components/ILIAS/COPage/COPage.php b/components/ILIAS/COPage/COPage.php index 590ee96d44e3..1c0c1d8b0d9e 100644 --- a/components/ILIAS/COPage/COPage.php +++ b/components/ILIAS/COPage/COPage.php @@ -20,6 +20,9 @@ namespace ILIAS; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; + class COPage implements Component\Component { public static function getEditorAssetVersion(): string @@ -130,5 +133,17 @@ public function getTarget(): string } }; + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'adve' + ); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'link' + ); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'copg' + ); } } diff --git a/components/ILIAS/COPage/lang/adve.pot b/components/ILIAS/COPage/lang/adve.pot new file mode 100644 index 000000000000..b8c1440520a0 --- /dev/null +++ b/components/ILIAS/COPage/lang/adve.pot @@ -0,0 +1,90 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: adve\n" + +msgid "advanced_editing_excass_settings" +msgstr "" + +msgid "advanced_editing_tst_editing" +msgstr "" + +msgid "advanced_editing_tst_editing_desc" +msgstr "" + +msgid "adve_activation" +msgstr "" + +msgid "adve_auto_url_linking" +msgstr "" + +msgid "adve_auto_url_linking_info" +msgstr "" + +msgid "adve_autosave" +msgstr "" + +msgid "adve_autosave_info" +msgstr "" + +msgid "adve_autosave_info_min_10" +msgstr "" + +msgid "adve_blocking_mode" +msgstr "" + +msgid "adve_excass_settings" +msgstr "" + +msgid "adve_grp_copa" +msgstr "" + +msgid "adve_grp_frm" +msgstr "" + +msgid "adve_grp_glo" +msgstr "" + +msgid "adve_grp_lm" +msgstr "" + +msgid "adve_grp_rep" +msgstr "" + +msgid "adve_grp_scorm" +msgstr "" + +msgid "adve_grp_test" +msgstr "" + +msgid "adve_grp_wiki" +msgstr "" + +msgid "adve_minutes" +msgstr "" + +msgid "adve_minutes_info" +msgstr "" + +msgid "adve_page_editor_settings" +msgstr "" + +msgid "adve_pe_general" +msgstr "" + +msgid "adve_rte_settings" +msgstr "" + +msgid "adve_text_content_features" +msgstr "" + +msgid "adve_use_physical" +msgstr "" + +msgid "adve_use_physical_info" +msgstr "" + +msgid "adve_use_tiny_mce" +msgstr "" diff --git a/components/ILIAS/COPage/lang/adve_ar.po b/components/ILIAS/COPage/lang/adve_ar.po new file mode 100644 index 000000000000..4baaa1133a2f --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_ar.po @@ -0,0 +1,107 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: adve\n" + +#, fuzzy +msgid "advanced_editing_excass_settings" +msgstr "Exercise Assignments Settings" + +#, fuzzy +msgid "advanced_editing_tst_editing" +msgstr "Page Editor for additional question content" + +#, fuzzy +msgid "advanced_editing_tst_editing_desc" +msgstr "Aktivates ILIAS Page Eidotr for feedback and hint text editing." + +msgid "adve_activation" +msgstr "Activation" + +#, fuzzy +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +#, fuzzy +msgid "adve_auto_url_linking_info" +msgstr "Tries to identify URLs like \"http://..\" in text paragraphs and automatically creates links around them." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +#, fuzzy +msgid "adve_blocking_mode" +msgstr "Edit Lock" + +#, fuzzy +msgid "adve_excass_settings" +msgstr "Exercise Assignments" + +#, fuzzy +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +msgid "adve_grp_glo" +msgstr "Glossaries" + +msgid "adve_grp_lm" +msgstr "ILIAS Learning Modules" + +msgid "adve_grp_rep" +msgstr "Repository Pages" + +msgid "adve_grp_scorm" +msgstr "SCORM Editing" + +msgid "adve_grp_test" +msgstr "Test & Assessment" + +msgid "adve_grp_wiki" +msgstr "Wikis" + +#, fuzzy +msgid "adve_minutes" +msgstr "Minutes" + +#, fuzzy +msgid "adve_minutes_info" +msgstr "Minutes of inactivity before an edit lock expires and a page can be edited by another user." + +msgid "adve_page_editor_settings" +msgstr "ILIAS Page Editor Settings" + +msgid "adve_pe_general" +msgstr "General" + +msgid "adve_rte_settings" +msgstr "Rich Text Editor Settings" + +msgid "adve_text_content_features" +msgstr "قائمة محتوى النص" + +msgid "adve_use_physical" +msgstr "Use b/i/u instead of str/emp/imp" + +msgid "adve_use_physical_info" +msgstr "This setting replaces the semantic style class buttons for strong, emphatic and important with physical attribute buttons b (bold), i (italic) and u (underline). Please note, that this may result in inconsistencies, if the style editor is used and other phyiscal attributes are assigned to the strong/emphatic/important style classes." + +msgid "adve_use_tiny_mce" +msgstr "Enable TinyMCE for WYSIWYG Editing" diff --git a/components/ILIAS/COPage/lang/adve_bg.po b/components/ILIAS/COPage/lang/adve_bg.po new file mode 100644 index 000000000000..eb1a3402b157 --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_bg.po @@ -0,0 +1,121 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: adve\n" + +#, fuzzy +msgid "advanced_editing_excass_settings" +msgstr "Exercise Assignments Settings" + +#, fuzzy +msgid "advanced_editing_tst_editing" +msgstr "Page Editor for additional question content" + +#, fuzzy +msgid "advanced_editing_tst_editing_desc" +msgstr "Aktivates ILIAS Page Eidotr for feedback and hint text editing." + +#, fuzzy +msgid "adve_activation" +msgstr "Activation" + +#, fuzzy +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +#, fuzzy +msgid "adve_auto_url_linking_info" +msgstr "Tries to identify URLs like \"http://..\" in text paragraphs and automatically creates links around them." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +#, fuzzy +msgid "adve_blocking_mode" +msgstr "Edit Lock" + +#, fuzzy +msgid "adve_excass_settings" +msgstr "Exercise Assignments" + +#, fuzzy +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +#, fuzzy +msgid "adve_grp_glo" +msgstr "Glossaries" + +#, fuzzy +msgid "adve_grp_lm" +msgstr "ILIAS Learning Modules" + +#, fuzzy +msgid "adve_grp_rep" +msgstr "Repository Pages" + +#, fuzzy +msgid "adve_grp_scorm" +msgstr "SCORM Editing" + +#, fuzzy +msgid "adve_grp_test" +msgstr "Test & Assessment" + +#, fuzzy +msgid "adve_grp_wiki" +msgstr "Wikis" + +#, fuzzy +msgid "adve_minutes" +msgstr "Minutes" + +#, fuzzy +msgid "adve_minutes_info" +msgstr "Minutes of inactivity before an edit lock expires and a page can be edited by another user." + +#, fuzzy +msgid "adve_page_editor_settings" +msgstr "ILIAS Page Editor Settings" + +#, fuzzy +msgid "adve_pe_general" +msgstr "General" + +#, fuzzy +msgid "adve_rte_settings" +msgstr "Rich Text Editor Settings" + +#, fuzzy +msgid "adve_text_content_features" +msgstr "Text Content Menu" + +#, fuzzy +msgid "adve_use_physical" +msgstr "Use b/i/u instead of str/emp/imp" + +#, fuzzy +msgid "adve_use_physical_info" +msgstr "This setting replaces the semantic style class buttons for strong, emphatic and important with physical attribute buttons b (bold), i (italic) and u (underline). Please note, that this may result in inconsistencies, if the style editor is used and other phyiscal attributes are assigned to the strong/emphatic/important style classes." + +#, fuzzy +msgid "adve_use_tiny_mce" +msgstr "Enable TinyMCE for WYSIWYG Editing" diff --git a/components/ILIAS/COPage/lang/adve_cs.po b/components/ILIAS/COPage/lang/adve_cs.po new file mode 100644 index 000000000000..a7ea95e97445 --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_cs.po @@ -0,0 +1,97 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: adve\n" + +msgid "advanced_editing_excass_settings" +msgstr "Nastavení úkolů cvičení" + +msgid "advanced_editing_tst_editing" +msgstr "Editor stránky pro dodatečný obsah otázky" + +msgid "advanced_editing_tst_editing_desc" +msgstr "Aktivuje editor stránky ILIAS pro zpětnou vazbu a úpravu textu nápovědy." + +msgid "adve_activation" +msgstr "Aktivace" + +msgid "adve_auto_url_linking" +msgstr "Automatické URL odkazy" + +msgid "adve_auto_url_linking_info" +msgstr "Snaží se identifikovat URL jako „http: // ..“ v odstavcích textu a automaticky z nich vytváří odkazy." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +msgid "adve_blocking_mode" +msgstr "Uzamčení editace" + +msgid "adve_excass_settings" +msgstr "Úkoly cvičení" + +msgid "adve_grp_copa" +msgstr "Stránky obsahu" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +msgid "adve_grp_glo" +msgstr "Glosáře" + +msgid "adve_grp_lm" +msgstr "Výukové moduly ILIAS" + +msgid "adve_grp_rep" +msgstr "Stránky úložiště" + +msgid "adve_grp_scorm" +msgstr "Editace SCORM" + +msgid "adve_grp_test" +msgstr "Test & Hodnocení" + +msgid "adve_grp_wiki" +msgstr "Wiki" + +msgid "adve_minutes" +msgstr "Minuty" + +msgid "adve_minutes_info" +msgstr "Minuty neaktivity před vypršením uzamčení editace a uvolnění stránky k editaci jiným uživatelem." + +msgid "adve_page_editor_settings" +msgstr "Editor obsahu ILIAS" + +msgid "adve_pe_general" +msgstr "Všeobecné" + +msgid "adve_rte_settings" +msgstr "Editor TinyMCE" + +msgid "adve_text_content_features" +msgstr "Nabídka textového obsahu" + +msgid "adve_use_physical" +msgstr "Použít b/i/u namísto str/emp/imp" + +msgid "adve_use_physical_info" +msgstr "Toto nastavení nahrazuje tlačítka sémantické třídy stylu pro silné (strong), zdůrazněné (emphatic) a důležité (important) tlačítky fyzikálních atributů b (bold-tučné), i (italic-kurzíva) a u (underline-podtržené). Povšimněte si prosím, že to může mít za následek nekonzistence, pokud je použit tento editor stylu a jiné fyzické atributy jsou přiřazeny třídám stylu strong/emphatic/important." + +msgid "adve_use_tiny_mce" +msgstr "Zapnout TinyMCE pro editaci WYSIWYG" diff --git a/components/ILIAS/COPage/lang/adve_da.po b/components/ILIAS/COPage/lang/adve_da.po new file mode 100644 index 000000000000..4c07108d6854 --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_da.po @@ -0,0 +1,112 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: adve\n" + +#, fuzzy +msgid "advanced_editing_excass_settings" +msgstr "Exercise Assignments Settings" + +#, fuzzy +msgid "advanced_editing_tst_editing" +msgstr "Page Editor for additional question content" + +#, fuzzy +msgid "advanced_editing_tst_editing_desc" +msgstr "Aktivates ILIAS Page Eidotr for feedback and hint text editing." + +msgid "adve_activation" +msgstr "Aktivering" + +#, fuzzy +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +#, fuzzy +msgid "adve_auto_url_linking_info" +msgstr "Tries to identify URLs like \"http://..\" in text paragraphs and automatically creates links around them." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +#, fuzzy +msgid "adve_blocking_mode" +msgstr "Edit Lock" + +#, fuzzy +msgid "adve_excass_settings" +msgstr "Exercise Assignments" + +#, fuzzy +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +#, fuzzy +msgid "adve_grp_glo" +msgstr "Glossaries" + +msgid "adve_grp_lm" +msgstr "ILIAS læremoduler" + +msgid "adve_grp_rep" +msgstr "Oversigtssider" + +msgid "adve_grp_scorm" +msgstr "SCORM redigering" + +msgid "adve_grp_test" +msgstr "Test & Evaluering" + +msgid "adve_grp_wiki" +msgstr "Wikier" + +#, fuzzy +msgid "adve_minutes" +msgstr "Minutes" + +#, fuzzy +msgid "adve_minutes_info" +msgstr "Minutes of inactivity before an edit lock expires and a page can be edited by another user." + +msgid "adve_page_editor_settings" +msgstr "ILIAS sideredigering indstillinger" + +#, fuzzy +msgid "adve_pe_general" +msgstr "General" + +msgid "adve_rte_settings" +msgstr "Rigtekst redigering" + +#, fuzzy +msgid "adve_text_content_features" +msgstr "Text Content Menu" + +msgid "adve_use_physical" +msgstr "Brug b/i/u i stedet for str/emp/imp" + +#, fuzzy +msgid "adve_use_physical_info" +msgstr "This setting replaces the semantic style class buttons for strong, emphatic and important with physical attribute buttons b (bold), i (italic) and u (underline). Please note, that this may result in inconsistencies, if the style editor is used and other phyiscal attributes are assigned to the strong/emphatic/important style classes." + +#, fuzzy +msgid "adve_use_tiny_mce" +msgstr "Enable TinyMCE for WYSIWYG Editing" diff --git a/components/ILIAS/COPage/lang/adve_de.po b/components/ILIAS/COPage/lang/adve_de.po new file mode 100644 index 000000000000..e97e149ba224 --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_de.po @@ -0,0 +1,93 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: adve\n" + +msgid "advanced_editing_excass_settings" +msgstr "Einstellungen Übungseinheiten (Textabgaben)" + +msgid "advanced_editing_tst_editing" +msgstr "ILIAS-Seiteneditor für zusätzliche Frageninhalte" + +msgid "advanced_editing_tst_editing_desc" +msgstr "Aktiviert den ILIAS-Seiteneditor für Feedback- und Hinweistexte." + +msgid "adve_activation" +msgstr "Aktivierung" + +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +msgid "adve_auto_url_linking_info" +msgstr "ILIAS durchsucht Textparagraphen nach URLs (z.B. \"http://..\") und verlinkt diese entsprechend automatisch." + +msgid "adve_autosave" +msgstr "Intervall automatisches Speichern" + +msgid "adve_autosave_info" +msgstr "Textinhalte werden in diesem Intervall automatisch gespeichert. Kürzere Intervalle führen zu höherer Serverlast und geringerer Systemperformanz." + +msgid "adve_autosave_info_min_10" +msgstr "Bitte setzen sie den Wert auf mindestens 10 Sekunden, falls sie Funktion nutzen." + +msgid "adve_blocking_mode" +msgstr "Bearbeitungssperre" + +msgid "adve_excass_settings" +msgstr "Übungseinheiten" + +msgid "adve_grp_copa" +msgstr "Inhaltsseiten" + +msgid "adve_grp_frm" +msgstr "Foren" + +msgid "adve_grp_glo" +msgstr "Glossare" + +msgid "adve_grp_lm" +msgstr "ILIAS-Lernmodule" + +msgid "adve_grp_rep" +msgstr "Magazinseiten" + +msgid "adve_grp_scorm" +msgstr "SCORM-Module" + +msgid "adve_grp_test" +msgstr "Test und Assessment" + +msgid "adve_grp_wiki" +msgstr "Wikis" + +msgid "adve_minutes" +msgstr "Minuten" + +msgid "adve_minutes_info" +msgstr "Zeitraum in Minuten bis die Seite wegen fehlender Aktivität wieder freigegeben und dann von einem anderen Benutzer bearbeitet werden kann." + +msgid "adve_page_editor_settings" +msgstr "ILIAS-Seiteneditor" + +msgid "adve_pe_general" +msgstr "Einstellungen" + +msgid "adve_rte_settings" +msgstr "TinyMCE-Editor" + +msgid "adve_text_content_features" +msgstr "Unterstützte Zeichenformate" + +msgid "adve_use_physical" +msgstr "str|emp|imp durch B|I|U ersetzen" + +msgid "adve_use_physical_info" +msgstr "Die Einstellung ersetzt die Buttons der semantischen Styleklassen für strong, emphatic und important durch die fest definierten Auszeichnungen B (bold), I (italic) und U (underline). Achtung: hierbei kann es zu Inkonsistenzen kommen, wenn über den Styleeditor den Styleklassen für strong, emphatic und important andere Auszeichnungen zugeordnet wurden." + +msgid "adve_use_tiny_mce" +msgstr "TinyMCE-Editor für WYSIWYG-Bearbeitung aktivieren" diff --git a/components/ILIAS/COPage/lang/adve_el.po b/components/ILIAS/COPage/lang/adve_el.po new file mode 100644 index 000000000000..86a46d81a4c0 --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_el.po @@ -0,0 +1,121 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: adve\n" + +#, fuzzy +msgid "advanced_editing_excass_settings" +msgstr "Exercise Assignments Settings" + +#, fuzzy +msgid "advanced_editing_tst_editing" +msgstr "Page Editor for additional question content" + +#, fuzzy +msgid "advanced_editing_tst_editing_desc" +msgstr "Aktivates ILIAS Page Eidotr for feedback and hint text editing." + +#, fuzzy +msgid "adve_activation" +msgstr "Activation" + +#, fuzzy +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +#, fuzzy +msgid "adve_auto_url_linking_info" +msgstr "Tries to identify URLs like \"http://..\" in text paragraphs and automatically creates links around them." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +#, fuzzy +msgid "adve_blocking_mode" +msgstr "Edit Lock" + +#, fuzzy +msgid "adve_excass_settings" +msgstr "Exercise Assignments" + +#, fuzzy +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +#, fuzzy +msgid "adve_grp_glo" +msgstr "Glossaries" + +#, fuzzy +msgid "adve_grp_lm" +msgstr "ILIAS Learning Modules" + +#, fuzzy +msgid "adve_grp_rep" +msgstr "Repository Pages" + +#, fuzzy +msgid "adve_grp_scorm" +msgstr "SCORM Editing" + +#, fuzzy +msgid "adve_grp_test" +msgstr "Test & Assessment" + +#, fuzzy +msgid "adve_grp_wiki" +msgstr "Wikis" + +#, fuzzy +msgid "adve_minutes" +msgstr "Minutes" + +#, fuzzy +msgid "adve_minutes_info" +msgstr "Minutes of inactivity before an edit lock expires and a page can be edited by another user." + +#, fuzzy +msgid "adve_page_editor_settings" +msgstr "ILIAS Page Editor Settings" + +#, fuzzy +msgid "adve_pe_general" +msgstr "General" + +#, fuzzy +msgid "adve_rte_settings" +msgstr "Rich Text Editor Settings" + +#, fuzzy +msgid "adve_text_content_features" +msgstr "Text Content Menu" + +#, fuzzy +msgid "adve_use_physical" +msgstr "Use b/i/u instead of str/emp/imp" + +#, fuzzy +msgid "adve_use_physical_info" +msgstr "This setting replaces the semantic style class buttons for strong, emphatic and important with physical attribute buttons b (bold), i (italic) and u (underline). Please note, that this may result in inconsistencies, if the style editor is used and other phyiscal attributes are assigned to the strong/emphatic/important style classes." + +#, fuzzy +msgid "adve_use_tiny_mce" +msgstr "Enable TinyMCE for WYSIWYG Editing" diff --git a/components/ILIAS/COPage/lang/adve_en.po b/components/ILIAS/COPage/lang/adve_en.po new file mode 100644 index 000000000000..cdda3b6b11fa --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_en.po @@ -0,0 +1,93 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: adve\n" + +msgid "advanced_editing_excass_settings" +msgstr "Exercise Text Assignments" + +msgid "advanced_editing_tst_editing" +msgstr "ILIAS Page Editor for additional question content" + +msgid "advanced_editing_tst_editing_desc" +msgstr "Activates ILIAS Page Editor for feedback and hint text editing." + +msgid "adve_activation" +msgstr "Activation" + +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +msgid "adve_auto_url_linking_info" +msgstr "Tries to identify URLs like \"http://..\" in text paragraphs and automatically creates links around them." + +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +msgid "adve_blocking_mode" +msgstr "Edit Lock" + +msgid "adve_excass_settings" +msgstr "Exercise Assignments" + +msgid "adve_grp_copa" +msgstr "Content Pages" + +msgid "adve_grp_frm" +msgstr "Forums" + +msgid "adve_grp_glo" +msgstr "Glossaries" + +msgid "adve_grp_lm" +msgstr "ILIAS Learning Modules" + +msgid "adve_grp_rep" +msgstr "Repository Pages" + +msgid "adve_grp_scorm" +msgstr "SCORM Editing" + +msgid "adve_grp_test" +msgstr "Test and Assessment" + +msgid "adve_grp_wiki" +msgstr "Wikis" + +msgid "adve_minutes" +msgstr "Minutes" + +msgid "adve_minutes_info" +msgstr "Minutes of inactivity before an edit lock expires and a page can be edited by another user." + +msgid "adve_page_editor_settings" +msgstr "ILIAS Page Editor" + +msgid "adve_pe_general" +msgstr "General" + +msgid "adve_rte_settings" +msgstr "TinyMCE Editor" + +msgid "adve_text_content_features" +msgstr "Supported Characters" + +msgid "adve_use_physical" +msgstr "Use b/i/u instead of str/emp/imp" + +msgid "adve_use_physical_info" +msgstr "This setting replaces the semantic style class buttons for ‘strong’, ‘emphatic’ and ‘important’ with physical attribute buttons ‘b’ (bold), ‘i’ (italic) and ‘u’ (underline). Please note, that this may result in inconsistencies if the style editor is used and other physical attributes are assigned to the strong/emphatic/important style classes." + +msgid "adve_use_tiny_mce" +msgstr "Enable TinyMCE Editor for WYSIWYG Editing" diff --git a/components/ILIAS/COPage/lang/adve_es.po b/components/ILIAS/COPage/lang/adve_es.po new file mode 100644 index 000000000000..3de26630e652 --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_es.po @@ -0,0 +1,93 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: adve\n" + +msgid "advanced_editing_excass_settings" +msgstr "Asignaciones de texto de ejercicios" + +msgid "advanced_editing_tst_editing" +msgstr "Editor de Páginas ILIAS para contenido adicional de la pregunta" + +msgid "advanced_editing_tst_editing_desc" +msgstr "Activa el Editor de Páginas ILIAS para la edición de texto de feedback y pistas." + +msgid "adve_activation" +msgstr "Activación" + +msgid "adve_auto_url_linking" +msgstr "Vinculación automática de URL" + +msgid "adve_auto_url_linking_info" +msgstr "Intenta identificar URLs como \"http://..\" en los párrafos de texto y crea automáticamente enlaces alrededor de ellas." + +msgid "adve_autosave" +msgstr "Intervalo de guardado automático" + +msgid "adve_autosave_info" +msgstr "Guardado automático del contenido de texto. Con intervalos más cortos, la carga del servidor aumenta y el rendimiento del sistema disminuye." + +msgid "adve_autosave_info_min_10" +msgstr "Por favor, seleccione un valor mínimo de 10 segundos si ha activado esta función." + +msgid "adve_blocking_mode" +msgstr "Bloqueo de edición" + +msgid "adve_excass_settings" +msgstr "Asignaciones de ejercicios" + +msgid "adve_grp_copa" +msgstr "Páginas de contenido" + +msgid "adve_grp_frm" +msgstr "Foros" + +msgid "adve_grp_glo" +msgstr "Glosarios" + +msgid "adve_grp_lm" +msgstr "Módulos de aprendizaje de ILIAS" + +msgid "adve_grp_rep" +msgstr "Páginas del repositorio" + +msgid "adve_grp_scorm" +msgstr "Edición SCORM" + +msgid "adve_grp_test" +msgstr "Pruebas y evaluación" + +msgid "adve_grp_wiki" +msgstr "Wikis" + +msgid "adve_minutes" +msgstr "Minutos" + +msgid "adve_minutes_info" +msgstr "Minutos de inactividad antes de que un bloqueo de edición expire y otra persona pueda editar la página." + +msgid "adve_page_editor_settings" +msgstr "Editor de páginas de ILIAS" + +msgid "adve_pe_general" +msgstr "General" + +msgid "adve_rte_settings" +msgstr "Editor TinyMCE" + +msgid "adve_text_content_features" +msgstr "Caracteres admitidos" + +msgid "adve_use_physical" +msgstr "Usar b/i/u en lugar de str/emp/imp" + +msgid "adve_use_physical_info" +msgstr "Esta opción reemplaza los botones de clase de estilo semántico para ‘strong’, ‘emphatic’ y ‘important’ por botones de atributos físicos ‘b’ (negrita), ‘i’ (cursiva) y ‘u’ (subrayado). Tenga en cuenta que esto puede provocar inconsistencias si se utiliza el editor de estilos y se asignan otros atributos físicos a las clases de estilo strong/emphatic/important." + +msgid "adve_use_tiny_mce" +msgstr "Activar el editor TinyMCE para edición WYSIWYG" diff --git a/components/ILIAS/COPage/lang/adve_et.po b/components/ILIAS/COPage/lang/adve_et.po new file mode 100644 index 000000000000..c904980239bf --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_et.po @@ -0,0 +1,100 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: adve\n" + +msgid "advanced_editing_excass_settings" +msgstr "Exercise Assignments Settings" + +msgid "advanced_editing_tst_editing" +msgstr "Page Editor for additional question content" + +msgid "advanced_editing_tst_editing_desc" +msgstr "Aktivates ILIAS Page Eidotr for feedback and hint text editing." + +msgid "adve_activation" +msgstr "Aktiveerimine" + +#, fuzzy +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +#, fuzzy +msgid "adve_auto_url_linking_info" +msgstr "Tries to identify URLs like \"http://..\" in text paragraphs and automatically creates links around them." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +msgid "adve_blocking_mode" +msgstr "Edit Lock" + +msgid "adve_excass_settings" +msgstr "Exercise Assignments" + +#, fuzzy +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +msgid "adve_grp_glo" +msgstr "Sõnastikud" + +msgid "adve_grp_lm" +msgstr "ILIAS õppemoodulid" + +msgid "adve_grp_rep" +msgstr "Varamu lehed" + +msgid "adve_grp_scorm" +msgstr "SCORM redaktor" + +msgid "adve_grp_test" +msgstr "Test & hindamine" + +msgid "adve_grp_wiki" +msgstr "Wikid" + +msgid "adve_minutes" +msgstr "Minutes" + +msgid "adve_minutes_info" +msgstr "Minutes of inactivity before an edit lock expires and a page can be edited by another user." + +msgid "adve_page_editor_settings" +msgstr "ILIASe lehe toimeti seaded" + +msgid "adve_pe_general" +msgstr "Üldine" + +msgid "adve_rte_settings" +msgstr "Rikasteksti toimeti seaded" + +msgid "adve_text_content_features" +msgstr "Tekstisisu menüü" + +msgid "adve_use_physical" +msgstr "Kasuta b/i/u str/emp/imp asemel" + +msgid "adve_use_physical_info" +msgstr "See seadistus asendab semantilise stiiliklassi nupud strong, emphatic ja important füüsiliste atribuutnuppudega b (bold), i (italic) ja u (underline). Pane tähele, et see võib põhjustada vastuolusid, kui stiili toimetit on kasutatud ja teis füüsilisi atribuute kasutatud strong/emphatic/important stiiliklasside jaoks." + +msgid "adve_use_tiny_mce" +msgstr "Võimalda TinyMCE WYSIWYG toimetamiseks" diff --git a/components/ILIAS/COPage/lang/adve_fa.po b/components/ILIAS/COPage/lang/adve_fa.po new file mode 100644 index 000000000000..db3fedb3ffeb --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_fa.po @@ -0,0 +1,107 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: adve\n" + +#, fuzzy +msgid "advanced_editing_excass_settings" +msgstr "Exercise Assignments Settings" + +#, fuzzy +msgid "advanced_editing_tst_editing" +msgstr "Page Editor for additional question content" + +#, fuzzy +msgid "advanced_editing_tst_editing_desc" +msgstr "Aktivates ILIAS Page Eidotr for feedback and hint text editing." + +msgid "adve_activation" +msgstr "فعال سازی" + +#, fuzzy +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +#, fuzzy +msgid "adve_auto_url_linking_info" +msgstr "Tries to identify URLs like \"http://..\" in text paragraphs and automatically creates links around them." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +#, fuzzy +msgid "adve_blocking_mode" +msgstr "Edit Lock" + +#, fuzzy +msgid "adve_excass_settings" +msgstr "Exercise Assignments" + +#, fuzzy +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +msgid "adve_grp_glo" +msgstr "لغتنامه ها" + +msgid "adve_grp_lm" +msgstr "ماژول های یادگیری ILIAS" + +msgid "adve_grp_rep" +msgstr "صفحه های مخزن" + +msgid "adve_grp_scorm" +msgstr "ویرایش SCORM" + +msgid "adve_grp_test" +msgstr "تست و ارزیابی" + +msgid "adve_grp_wiki" +msgstr "ویکی" + +#, fuzzy +msgid "adve_minutes" +msgstr "Minutes" + +#, fuzzy +msgid "adve_minutes_info" +msgstr "Minutes of inactivity before an edit lock expires and a page can be edited by another user." + +msgid "adve_page_editor_settings" +msgstr "ILIAS Page Editor Settings" + +msgid "adve_pe_general" +msgstr "عمومی" + +msgid "adve_rte_settings" +msgstr "Rich Text Editor Settings" + +msgid "adve_text_content_features" +msgstr "Text Content Menu" + +msgid "adve_use_physical" +msgstr "از b/i/u instead of str/emp/imp استفاده کن" + +msgid "adve_use_physical_info" +msgstr "This setting replaces the semantic style class buttons for strong, emphatic and important with physical attribute buttons b (bold), i (italic) and u (underline). Please note, that this may result in inconsistencies, if the style editor is used and other phyiscal attributes are assigned to the strong/emphatic/important style classes." + +msgid "adve_use_tiny_mce" +msgstr "Enable TinyMCE for WYSIWYG Editing" diff --git a/components/ILIAS/COPage/lang/adve_fr.po b/components/ILIAS/COPage/lang/adve_fr.po new file mode 100644 index 000000000000..5c838d2b24c2 --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_fr.po @@ -0,0 +1,94 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: adve\n" + +msgid "advanced_editing_excass_settings" +msgstr "Paramètres des Activités d'Exercice" + +msgid "advanced_editing_tst_editing" +msgstr "Activer l'Edition de Contenu pour des questions supplémentaires" + +msgid "advanced_editing_tst_editing_desc" +msgstr "Activate ILIAS Page Editor for feedback and hint text editing." + +msgid "adve_activation" +msgstr "Activation" + +msgid "adve_auto_url_linking" +msgstr "Lien URL automatique" + +msgid "adve_auto_url_linking_info" +msgstr "Essaie d’identifier les URL comme «http://..» dans les paragraphes de textes et crée automatiquement des liens autour." + +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +msgid "adve_blocking_mode" +msgstr "Verrouillage de Page" + +msgid "adve_excass_settings" +msgstr "Activités d'un Exercice" + +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +msgid "adve_grp_glo" +msgstr "Glossaires" + +msgid "adve_grp_lm" +msgstr "Documents d'apprentissage ILIAS" + +msgid "adve_grp_rep" +msgstr "Pages du Catalogue" + +msgid "adve_grp_scorm" +msgstr "Modules SCORM" + +msgid "adve_grp_test" +msgstr "Test & évaluation" + +msgid "adve_grp_wiki" +msgstr "Wikis" + +msgid "adve_minutes" +msgstr "Inactivité (minutes)" + +msgid "adve_minutes_info" +msgstr "Temps d'inactivité avant que le verrouillage de page n'expire et qu'un autre utilisateur puisse l'éditer." + +msgid "adve_page_editor_settings" +msgstr "Éditeur ILIAS" + +msgid "adve_pe_general" +msgstr "Paramètres Généraux" + +msgid "adve_rte_settings" +msgstr "Éditeur TinyMCE" + +msgid "adve_text_content_features" +msgstr "Options de l'éditeur de Texte" + +msgid "adve_use_physical" +msgstr "Utiliser b/i/u au lieu de str/emp/imp" + +msgid "adve_use_physical_info" +msgstr "Ce paramètre permet de remplacer les boutons \"strong\", \"emphatic\" et \"important\" par les boutons \"b\" (bold/gras), \"i\" (italic/italique) et \"u\" (underlined/souligné). Notez que cela peut entraîner des incohérences si l'éditeur de style est utilisé et que d'autres attributs sont affectés aux classes \"strong\", \"emphatic\" et \"important\"." + +msgid "adve_use_tiny_mce" +msgstr "Activez TinyMCE pour une Edition WYSIWYG" diff --git a/components/ILIAS/COPage/lang/adve_hr.po b/components/ILIAS/COPage/lang/adve_hr.po new file mode 100644 index 000000000000..5856041d658d --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_hr.po @@ -0,0 +1,97 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: adve\n" + +msgid "advanced_editing_excass_settings" +msgstr "Exercise Assignments Settings" + +msgid "advanced_editing_tst_editing" +msgstr "Page Editor for additional question content" + +msgid "advanced_editing_tst_editing_desc" +msgstr "Activates ILIAS Page Editor for feedback and hint text editing." + +msgid "adve_activation" +msgstr "Activation" + +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +msgid "adve_auto_url_linking_info" +msgstr "Tries to identify URLs like \"http://..\" in text paragraphs and automatically creates links around them." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +msgid "adve_blocking_mode" +msgstr "Edit Lock" + +msgid "adve_excass_settings" +msgstr "Exercise Assignments" + +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +msgid "adve_grp_glo" +msgstr "Glossaries" + +msgid "adve_grp_lm" +msgstr "ILIAS Learning Modules" + +msgid "adve_grp_rep" +msgstr "Repository Pages" + +msgid "adve_grp_scorm" +msgstr "SCORM Editing" + +msgid "adve_grp_test" +msgstr "Test and Assessment" + +msgid "adve_grp_wiki" +msgstr "Wikis" + +msgid "adve_minutes" +msgstr "Minutes" + +msgid "adve_minutes_info" +msgstr "Minutes of inactivity before an edit lock expires and a page can be edited by another user." + +msgid "adve_page_editor_settings" +msgstr "ILIAS Page Editor" + +msgid "adve_pe_general" +msgstr "General" + +msgid "adve_rte_settings" +msgstr "TinyMCE Editor" + +msgid "adve_text_content_features" +msgstr "Text Content Menu" + +msgid "adve_use_physical" +msgstr "Use b/i/u instead of str/emp/imp" + +msgid "adve_use_physical_info" +msgstr "This setting replaces the semantic style class buttons for strong, emphatic and important with physical attribute buttons b (bold), i (italic) and u (underline). Please note, that this may result in inconsistencies, if the style editor is used and other physical attributes are assigned to the strong/emphatic/important style classes." + +msgid "adve_use_tiny_mce" +msgstr "Enable TinyMCE for WYSIWYG Editing" diff --git a/components/ILIAS/COPage/lang/adve_hu.po b/components/ILIAS/COPage/lang/adve_hu.po new file mode 100644 index 000000000000..7202367621b9 --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_hu.po @@ -0,0 +1,93 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: adve\n" + +msgid "advanced_editing_excass_settings" +msgstr "Beadandó szöveges feladatok" + +msgid "advanced_editing_tst_editing" +msgstr "Lapszerkesztő használata a további kérdéstartalom szerkesztéséhez" + +msgid "advanced_editing_tst_editing_desc" +msgstr "Kapcsolja be az ILIAS-lapszerkesztőt a visszajelzések és a súgószövegek szerkesztéséhez." + +msgid "adve_activation" +msgstr "Aktiválás" + +msgid "adve_auto_url_linking" +msgstr "URL Auto-linkelés" + +msgid "adve_auto_url_linking_info" +msgstr "Megpróbáljuk megtalálni a szövegben lévő az URL-eket (http://…) és automatikusa linkké alakítjuk." + +msgid "adve_autosave" +msgstr "Automatikus mentési időköz" + +msgid "adve_autosave_info" +msgstr "Szöveges tartalom mentésének gyakorsága. A rövidebb időköz növeli a szerver terhelését." + +msgid "adve_autosave_info_min_10" +msgstr "Kérem, legalább 10 mp-es értéket állítson be." + +msgid "adve_blocking_mode" +msgstr "Szerkesztés zárolása" + +msgid "adve_excass_settings" +msgstr "Beadandó feladatok" + +msgid "adve_grp_copa" +msgstr "Tartalomlapok" + +msgid "adve_grp_frm" +msgstr "Fórumok" + +msgid "adve_grp_glo" +msgstr "Fogalomtárak" + +msgid "adve_grp_lm" +msgstr "ILIAS-tananyagok" + +msgid "adve_grp_rep" +msgstr "Tartalomtároló-lapok" + +msgid "adve_grp_scorm" +msgstr "SCORM-szerkesztés" + +msgid "adve_grp_test" +msgstr "Teszt és értékelés" + +msgid "adve_grp_wiki" +msgstr "Wikik" + +msgid "adve_minutes" +msgstr "Perc" + +msgid "adve_minutes_info" +msgstr "A szerkesztési zárolás ennyi inaktív perc után lejár, ezután az oldalt már másik felhasználó is szerkesztheti." + +msgid "adve_page_editor_settings" +msgstr "ILIAS-tartalomszerkesztő" + +msgid "adve_pe_general" +msgstr "Általános" + +msgid "adve_rte_settings" +msgstr "TinyMCE szerkesztő" + +msgid "adve_text_content_features" +msgstr "Szövegtartalom menü" + +msgid "adve_use_physical" +msgstr "b/i/u használata str/emp/imp helyett" + +msgid "adve_use_physical_info" +msgstr "Ez a beállítás lecseréli a félkövér, dőlt, aláhúzott (strong, emphatic, important) szemantikus stílusosztályokhoz tartozó gombokat b (bold), i (italic), u (underline) fizikai attribútumok gombjaira. Ne feledje, hogy ez inkonzisztenciát okozhat, ha a stílusszerkesztőt használ és más fizikai attribútumokat rendelt a strong/emphatic/important stílusosztályokhoz." + +msgid "adve_use_tiny_mce" +msgstr "TinyMCE szerkesztő engedélyezése WYSIWYG szerkesztéshez" diff --git a/components/ILIAS/COPage/lang/adve_it.po b/components/ILIAS/COPage/lang/adve_it.po new file mode 100644 index 000000000000..9fa10e2a29f4 --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_it.po @@ -0,0 +1,94 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: adve\n" + +msgid "advanced_editing_excass_settings" +msgstr "Impostazioni esercizi (consegna testi)" + +msgid "advanced_editing_tst_editing" +msgstr "Editor di pagina per ulteriori contenuti delle domande" + +msgid "advanced_editing_tst_editing_desc" +msgstr "Attiva ILIAS Page Editor per il feedback e la modifica del testo dei suggerimenti." + +msgid "adve_activation" +msgstr "Attivazione" + +msgid "adve_auto_url_linking" +msgstr "URL collegamento automatico" + +msgid "adve_auto_url_linking_info" +msgstr "ILIAS analizza il testo e identifica gli URL (p.es. \"http://..\") creando automaticamente i collegamenti ipertestuali (link)." + +msgid "adve_autosave" +msgstr "Intervallo di salvataggio automatico" + +msgid "adve_autosave_info" +msgstr "Salvataggio automatico per il contenuto di testo. Con intervalli più brevi, il carico del server aumenta e le prestazioni del sistema diminuiscono." + +msgid "adve_autosave_info_min_10" +msgstr "Scegli un valore minimo di 10 secondi se hai attivato questa funzione." + +msgid "adve_blocking_mode" +msgstr "Blocco modifiche" + +msgid "adve_excass_settings" +msgstr "Unità esercizi" + +msgid "adve_grp_copa" +msgstr "Pagine Contenuto" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +msgid "adve_grp_glo" +msgstr "Glossari" + +msgid "adve_grp_lm" +msgstr "Moduli E-learning ILIAS" + +msgid "adve_grp_rep" +msgstr "Pagine dell'Archivio" + +msgid "adve_grp_scorm" +msgstr "Moduli SCORM" + +msgid "adve_grp_test" +msgstr "Test e Valutazione" + +msgid "adve_grp_wiki" +msgstr "Wiki" + +msgid "adve_minutes" +msgstr "Minuti" + +msgid "adve_minutes_info" +msgstr "Minuti di inattività prima della scadenza di un blocco di modifica, successivamente la pagina può essere modificata da un altro utente." + +msgid "adve_page_editor_settings" +msgstr "Impostazioni Editor di Pagina ILIAS" + +msgid "adve_pe_general" +msgstr "Impostazioni" + +msgid "adve_rte_settings" +msgstr "Impostazioni Rich Text Editor" + +msgid "adve_text_content_features" +msgstr "Menu contenuto del testo" + +msgid "adve_use_physical" +msgstr "Utilizzare B|I|U invece di str|emp|imp" + +msgid "adve_use_physical_info" +msgstr "Questa impostazione sostituisce i semantici pulsanti di stile \"strong\", \"emphatic\" e \"important\" con \"b\" (grassetto), \"i\" (corsivo) e \"u\" (sottolineato). Si prega di notare, che questo potrebbe causare incoerenze se l'editor di stile è utilizzato e altri attributi fisici sono assegnati alle classi di stile strong/emphatic/important." + +msgid "adve_use_tiny_mce" +msgstr "Abilita TinyMCE come Editor WYSIWYG (What You See Is What You Get)" diff --git a/components/ILIAS/COPage/lang/adve_ja.po b/components/ILIAS/COPage/lang/adve_ja.po new file mode 100644 index 000000000000..7c89355669c2 --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_ja.po @@ -0,0 +1,93 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: adve\n" + +msgid "advanced_editing_excass_settings" +msgstr "演習割り当て設定" + +msgid "advanced_editing_tst_editing" +msgstr "追加問題コンテンツ用のページエディタ" + +msgid "advanced_editing_tst_editing_desc" +msgstr "フィードバックとヒントテキスト編集用のILIASページエディタをアクティブにする。" + +msgid "adve_activation" +msgstr "アクティベーション" + +msgid "adve_auto_url_linking" +msgstr "URL自動リンク" + +msgid "adve_auto_url_linking_info" +msgstr "テキスト段落内に\"http://..\"のようなURLを識別させて自動的にその周りにリンクを作成します。" + +msgid "adve_autosave" +msgstr "自動保存期間" + +msgid "adve_autosave_info" +msgstr "コンテンツの自動保存。期間を短くするとサーバの負荷が増えてシステムのパフォマンスが低下します。" + +msgid "adve_autosave_info_min_10" +msgstr "この機能を有効にする際は最短10秒の値を選択して下さい。" + +msgid "adve_blocking_mode" +msgstr "ロックを編集" + +msgid "adve_excass_settings" +msgstr "演習割り当て" + +msgid "adve_grp_copa" +msgstr "Content Pages" + +msgid "adve_grp_frm" +msgstr "Forum" + +msgid "adve_grp_glo" +msgstr "用語集" + +msgid "adve_grp_lm" +msgstr "ILIAS学習モジュール" + +msgid "adve_grp_rep" +msgstr "リポジトリーページ" + +msgid "adve_grp_scorm" +msgstr "SCORM編集" + +msgid "adve_grp_test" +msgstr "テストとアセスメント" + +msgid "adve_grp_wiki" +msgstr "Wikis" + +msgid "adve_minutes" +msgstr "分" + +msgid "adve_minutes_info" +msgstr "編集ロックが切れてページが別のユーザにより編集ができる前のアイドル分数" + +msgid "adve_page_editor_settings" +msgstr "ILIASページエディター設定" + +msgid "adve_pe_general" +msgstr "一般" + +msgid "adve_rte_settings" +msgstr "Richテキストエディター設定" + +msgid "adve_text_content_features" +msgstr "テキストコンテンツメニュー" + +msgid "adve_use_physical" +msgstr "str/emp/impに代えてb/i/uを使用" + +msgid "adve_use_physical_info" +msgstr "この設定はセマンティックスタイルクラスボタンのストロング、強調、重要を、物理的な属性ボタンb(ボールド)、i(イタリック)、u(下線)で置き換えます。スタイルエディタが使用されていて他の物理的な属性がストロング/強調/重要スタイルクラスに割り当てられていると矛盾する結果となる事に注意願います。" + +msgid "adve_use_tiny_mce" +msgstr "WYSIWYG編集用にTinyMCEを有効にする" diff --git a/components/ILIAS/COPage/lang/adve_ka.po b/components/ILIAS/COPage/lang/adve_ka.po new file mode 100644 index 000000000000..5e27c57fd3cd --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_ka.po @@ -0,0 +1,107 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: adve\n" + +#, fuzzy +msgid "advanced_editing_excass_settings" +msgstr "Exercise Assignments Settings" + +#, fuzzy +msgid "advanced_editing_tst_editing" +msgstr "Page Editor for additional question content" + +#, fuzzy +msgid "advanced_editing_tst_editing_desc" +msgstr "Aktivates ILIAS Page Eidotr for feedback and hint text editing." + +msgid "adve_activation" +msgstr "Activation" + +#, fuzzy +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +#, fuzzy +msgid "adve_auto_url_linking_info" +msgstr "Tries to identify URLs like \"http://..\" in text paragraphs and automatically creates links around them." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +#, fuzzy +msgid "adve_blocking_mode" +msgstr "Edit Lock" + +#, fuzzy +msgid "adve_excass_settings" +msgstr "Exercise Assignments" + +#, fuzzy +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +msgid "adve_grp_glo" +msgstr "ლექსიკონები" + +msgid "adve_grp_lm" +msgstr "ილიასის საწავლო მოდულები" + +msgid "adve_grp_rep" +msgstr "საწყობის გვერდები" + +msgid "adve_grp_scorm" +msgstr "SCORM ის რედაქტირება" + +msgid "adve_grp_test" +msgstr "ტესტირება და შეფასება" + +msgid "adve_grp_wiki" +msgstr "wiki-ს წყარო" + +#, fuzzy +msgid "adve_minutes" +msgstr "Minutes" + +#, fuzzy +msgid "adve_minutes_info" +msgstr "Minutes of inactivity before an edit lock expires and a page can be edited by another user." + +msgid "adve_page_editor_settings" +msgstr "ILIAS ის გვერდების რედაქტირების პარამეტრები" + +msgid "adve_pe_general" +msgstr "ზოგადი" + +msgid "adve_rte_settings" +msgstr "ტექსტის მდიდარი რედაქტირების პარამეტრები" + +msgid "adve_text_content_features" +msgstr "ტექსტის შინაარსის მენიუ" + +msgid "adve_use_physical" +msgstr "გამოიყენეთ b/i/u, str/emp/imp-ის მაგივრად" + +msgid "adve_use_physical_info" +msgstr "ეს პარამეტრი ცვლის სემანტიკური სტილის კლასის ღილაკებს, ძლიერი, განსაკუთრებული და მნიშვნელოვანი ფიზიკური დახმარების ღილაკებით b (bold), i (italic) and u (underline). გთხოვთ გაითვალისწინოთ ამან შეიძლება გამოიწვიოს შეუსაბამობა, თუ სტილის რედაქტირება გამოიყენება სხვა ფიზიკური დამხარებებით რომლებიც დანიშნულია ძლიერ/განსაკუთრებულ/მნიშვნელოვან სტილის კლასზე." + +msgid "adve_use_tiny_mce" +msgstr "Enable TinyMCE for WYSIWYG Editing" diff --git a/components/ILIAS/COPage/lang/adve_lt.po b/components/ILIAS/COPage/lang/adve_lt.po new file mode 100644 index 000000000000..3470a128523c --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_lt.po @@ -0,0 +1,121 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: adve\n" + +#, fuzzy +msgid "advanced_editing_excass_settings" +msgstr "Exercise Assignments Settings" + +#, fuzzy +msgid "advanced_editing_tst_editing" +msgstr "Page Editor for additional question content" + +#, fuzzy +msgid "advanced_editing_tst_editing_desc" +msgstr "Aktivates ILIAS Page Eidotr for feedback and hint text editing." + +#, fuzzy +msgid "adve_activation" +msgstr "Activation" + +#, fuzzy +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +#, fuzzy +msgid "adve_auto_url_linking_info" +msgstr "Tries to identify URLs like \"http://..\" in text paragraphs and automatically creates links around them." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +#, fuzzy +msgid "adve_blocking_mode" +msgstr "Edit Lock" + +#, fuzzy +msgid "adve_excass_settings" +msgstr "Exercise Assignments" + +#, fuzzy +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +#, fuzzy +msgid "adve_grp_glo" +msgstr "Glossaries" + +#, fuzzy +msgid "adve_grp_lm" +msgstr "ILIAS Learning Modules" + +#, fuzzy +msgid "adve_grp_rep" +msgstr "Repository Pages" + +#, fuzzy +msgid "adve_grp_scorm" +msgstr "SCORM Editing" + +#, fuzzy +msgid "adve_grp_test" +msgstr "Test & Assessment" + +#, fuzzy +msgid "adve_grp_wiki" +msgstr "Wikis" + +#, fuzzy +msgid "adve_minutes" +msgstr "Minutes" + +#, fuzzy +msgid "adve_minutes_info" +msgstr "Minutes of inactivity before an edit lock expires and a page can be edited by another user." + +#, fuzzy +msgid "adve_page_editor_settings" +msgstr "ILIAS Page Editor Settings" + +#, fuzzy +msgid "adve_pe_general" +msgstr "General" + +#, fuzzy +msgid "adve_rte_settings" +msgstr "Rich Text Editor Settings" + +#, fuzzy +msgid "adve_text_content_features" +msgstr "Text Content Menu" + +#, fuzzy +msgid "adve_use_physical" +msgstr "Use b/i/u instead of str/emp/imp" + +#, fuzzy +msgid "adve_use_physical_info" +msgstr "This setting replaces the semantic style class buttons for strong, emphatic and important with physical attribute buttons b (bold), i (italic) and u (underline). Please note, that this may result in inconsistencies, if the style editor is used and other phyiscal attributes are assigned to the strong/emphatic/important style classes." + +#, fuzzy +msgid "adve_use_tiny_mce" +msgstr "Enable TinyMCE for WYSIWYG Editing" diff --git a/components/ILIAS/COPage/lang/adve_nl.po b/components/ILIAS/COPage/lang/adve_nl.po new file mode 100644 index 000000000000..29fc03158664 --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_nl.po @@ -0,0 +1,100 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: adve\n" + +msgid "advanced_editing_excass_settings" +msgstr "Oefeningsinstelligen" + +msgid "advanced_editing_tst_editing" +msgstr "Pagina Editor voor extra inhoud van de vraag." + +msgid "advanced_editing_tst_editing_desc" +msgstr "Inschakelen Pagina Editor voor wijzigen van feedback en suggesties" + +msgid "adve_activation" +msgstr "Inschakelen" + +#, fuzzy +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +#, fuzzy +msgid "adve_auto_url_linking_info" +msgstr "Tries to identify URLs like \"http://..\" in text paragraphs and automatically creates links around them." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +msgid "adve_blocking_mode" +msgstr "Wijzigen Vergrendeling" + +msgid "adve_excass_settings" +msgstr "Oefening" + +#, fuzzy +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +msgid "adve_grp_glo" +msgstr "Woordenlijst" + +msgid "adve_grp_lm" +msgstr "ILIAS Leermodules" + +msgid "adve_grp_rep" +msgstr "Studiecentrum pagina's" + +msgid "adve_grp_scorm" +msgstr "SCORM Editor" + +msgid "adve_grp_test" +msgstr "Toetsing en beoordeling" + +msgid "adve_grp_wiki" +msgstr "Wikis" + +msgid "adve_minutes" +msgstr "Minuten" + +msgid "adve_minutes_info" +msgstr "Aantal minuten inactiviteit voordat een \"wijzig\" vergrendeling afloopt en de pagina door een ander kan worden gewijzigd." + +msgid "adve_page_editor_settings" +msgstr "Instellingen ILIAS Pagina editor" + +msgid "adve_pe_general" +msgstr "Algemeen" + +msgid "adve_rte_settings" +msgstr "Rich Text Editor Instellingen" + +msgid "adve_text_content_features" +msgstr "Tekst inhoudsopgave" + +msgid "adve_use_physical" +msgstr "Gebruik b/i/u in plaats van str/emp/imp" + +msgid "adve_use_physical_info" +msgstr "Deze instelling vervangt de semantische style class tags voor sterk, emfatisch en belangrijk met fysieke attributen: b (bold), i (italic) en u (underline). Let op, dit kan resulteren in inconsistenties, als de style editor wordt gebruikt en andere attributen zijn toegewezen voor sterkte/emfatisch/belangrijkheid van stijlen." + +msgid "adve_use_tiny_mce" +msgstr "Inschakelen TinyMCE voor WYSIWYG Editen" diff --git a/components/ILIAS/COPage/lang/adve_pl.po b/components/ILIAS/COPage/lang/adve_pl.po new file mode 100644 index 000000000000..7f471102f2c2 --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_pl.po @@ -0,0 +1,97 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: adve\n" + +msgid "advanced_editing_excass_settings" +msgstr "Ustawienia dotyczące zadań" + +msgid "advanced_editing_tst_editing" +msgstr "Edytor stron dla dodatkowych treści w pytaniach" + +msgid "advanced_editing_tst_editing_desc" +msgstr "Włącza edytor stron ILIAS dla feedbacków i wskazówek." + +msgid "adve_activation" +msgstr "Aktywacja" + +msgid "adve_auto_url_linking" +msgstr "Automatyczne linkowanie URL" + +msgid "adve_auto_url_linking_info" +msgstr "ILIAS szuka w tekstach adresów URLs (np. \"http://..\") i automatycznie odpowiednio je linkuje." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +msgid "adve_blocking_mode" +msgstr "Blokada edycji" + +msgid "adve_excass_settings" +msgstr "Zadania" + +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +msgid "adve_grp_glo" +msgstr "Słowniki" + +msgid "adve_grp_lm" +msgstr "Moduły nauczania ILIAS" + +msgid "adve_grp_rep" +msgstr "Strony dostępnych zasobów" + +msgid "adve_grp_scorm" +msgstr "Moduł SCORM" + +msgid "adve_grp_test" +msgstr "Test i ocena" + +msgid "adve_grp_wiki" +msgstr "Wikis" + +msgid "adve_minutes" +msgstr "Minuty" + +msgid "adve_minutes_info" +msgstr "Okres czasu w minutach do momentu, w którym strona z powodu brakującej aktywności zostanie udostępniona i może być edytowana przez innego użytkownika." + +msgid "adve_page_editor_settings" +msgstr "Edytor stron ILIAS" + +msgid "adve_pe_general" +msgstr "Ustawienia" + +msgid "adve_rte_settings" +msgstr "Edytor TinyMCE" + +msgid "adve_text_content_features" +msgstr "Tekst menu zawartości" + +msgid "adve_use_physical" +msgstr "W miejsce str|emp|imp wstaw prB|I|U" + +msgid "adve_use_physical_info" +msgstr "To ustawienie zastępuje przyciski semantycznych klas stylów odnoszących się do opcji strong, emphatic oraz important na stałe określonymi wartościami B (bold), I (italic) oraz U (underline). Uwaga: w takiej sytuacji może dojść do niespójności, jeśli poprzez edytorów stylów klasom strong, emphatic i important zostaną przyporządkowane inne wartości." + +msgid "adve_use_tiny_mce" +msgstr "Aktywuj TinyMCE do edytowania WYSIWYG" diff --git a/components/ILIAS/COPage/lang/adve_pt.po b/components/ILIAS/COPage/lang/adve_pt.po new file mode 100644 index 000000000000..ef65114932e3 --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_pt.po @@ -0,0 +1,97 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: adve\n" + +msgid "advanced_editing_excass_settings" +msgstr "Definições de atribuições do exercício" + +msgid "advanced_editing_tst_editing" +msgstr "Editor de páginas para conteúdo de questão adicional" + +msgid "advanced_editing_tst_editing_desc" +msgstr "Ativa o Editor de Página ILIAS para feedback e edição de texto oculto." + +msgid "adve_activation" +msgstr "Ativação" + +msgid "adve_auto_url_linking" +msgstr "Auto-ligação URL" + +msgid "adve_auto_url_linking_info" +msgstr "Tenta identificar URLs como \"http://..\" em parágrafos de texto e cria automaticamente links à sua volta." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +msgid "adve_blocking_mode" +msgstr "Bloqueio de edição" + +msgid "adve_excass_settings" +msgstr "Atribuições do exercício" + +msgid "adve_grp_copa" +msgstr "Conteúdo páginas" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +msgid "adve_grp_glo" +msgstr "Glossários" + +msgid "adve_grp_lm" +msgstr "Módulos de aprendizagem ILIAS" + +msgid "adve_grp_rep" +msgstr "Páginas de repositório" + +msgid "adve_grp_scorm" +msgstr "Editar SCORM" + +msgid "adve_grp_test" +msgstr "Teste e avaliação" + +msgid "adve_grp_wiki" +msgstr "Wikis" + +msgid "adve_minutes" +msgstr "Minutos" + +msgid "adve_minutes_info" +msgstr "Minutos de inatividade antes de um bloqueio de edição expirar e uma página possa ser editada por outro utilizador." + +msgid "adve_page_editor_settings" +msgstr "Editor de Página ILIAS" + +msgid "adve_pe_general" +msgstr "Geral" + +msgid "adve_rte_settings" +msgstr "Editor TinyMCE" + +msgid "adve_text_content_features" +msgstr "Menu conteúdo de texto" + +msgid "adve_use_physical" +msgstr "Usar b/i/u em vez de str/emp/imp" + +msgid "adve_use_physical_info" +msgstr "Esta definição substitui os botões da classe de estilo semântico sobre intensidade, enfatizar e importante por botões de atributos físicos n (negrito), i (itálico) e s (sublinhado). Note que isso pode resultar em inconsistências, se o editor de estilo for usado e se forem atribuídos outros atributos físicos às classes de estilo intensidade/enfatizar/importante." + +msgid "adve_use_tiny_mce" +msgstr "Ativar TinyMCE para a edição WYSIWYG" diff --git a/components/ILIAS/COPage/lang/adve_ro.po b/components/ILIAS/COPage/lang/adve_ro.po new file mode 100644 index 000000000000..e860ecc7ffd3 --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_ro.po @@ -0,0 +1,121 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: adve\n" + +#, fuzzy +msgid "advanced_editing_excass_settings" +msgstr "Exercise Assignments Settings" + +#, fuzzy +msgid "advanced_editing_tst_editing" +msgstr "Page Editor for additional question content" + +#, fuzzy +msgid "advanced_editing_tst_editing_desc" +msgstr "Aktivates ILIAS Page Eidotr for feedback and hint text editing." + +#, fuzzy +msgid "adve_activation" +msgstr "Activation" + +#, fuzzy +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +#, fuzzy +msgid "adve_auto_url_linking_info" +msgstr "Tries to identify URLs like \"http://..\" in text paragraphs and automatically creates links around them." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +#, fuzzy +msgid "adve_blocking_mode" +msgstr "Edit Lock" + +#, fuzzy +msgid "adve_excass_settings" +msgstr "Exercise Assignments" + +#, fuzzy +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +#, fuzzy +msgid "adve_grp_glo" +msgstr "Glossaries" + +#, fuzzy +msgid "adve_grp_lm" +msgstr "ILIAS Learning Modules" + +#, fuzzy +msgid "adve_grp_rep" +msgstr "Repository Pages" + +#, fuzzy +msgid "adve_grp_scorm" +msgstr "SCORM Editing" + +#, fuzzy +msgid "adve_grp_test" +msgstr "Test & Assessment" + +#, fuzzy +msgid "adve_grp_wiki" +msgstr "Wikis" + +#, fuzzy +msgid "adve_minutes" +msgstr "Minutes" + +#, fuzzy +msgid "adve_minutes_info" +msgstr "Minutes of inactivity before an edit lock expires and a page can be edited by another user." + +#, fuzzy +msgid "adve_page_editor_settings" +msgstr "ILIAS Page Editor Settings" + +#, fuzzy +msgid "adve_pe_general" +msgstr "General" + +#, fuzzy +msgid "adve_rte_settings" +msgstr "Rich Text Editor Settings" + +#, fuzzy +msgid "adve_text_content_features" +msgstr "Text Content Menu" + +#, fuzzy +msgid "adve_use_physical" +msgstr "Use b/i/u instead of str/emp/imp" + +#, fuzzy +msgid "adve_use_physical_info" +msgstr "This setting replaces the semantic style class buttons for strong, emphatic and important with physical attribute buttons b (bold), i (italic) and u (underline). Please note, that this may result in inconsistencies, if the style editor is used and other phyiscal attributes are assigned to the strong/emphatic/important style classes." + +#, fuzzy +msgid "adve_use_tiny_mce" +msgstr "Enable TinyMCE for WYSIWYG Editing" diff --git a/components/ILIAS/COPage/lang/adve_ru.po b/components/ILIAS/COPage/lang/adve_ru.po new file mode 100644 index 000000000000..a046aaa4b7b3 --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_ru.po @@ -0,0 +1,100 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: adve\n" + +msgid "advanced_editing_excass_settings" +msgstr "Exercise Assignments Settings" + +msgid "advanced_editing_tst_editing" +msgstr "Page Editor for additional question content" + +msgid "advanced_editing_tst_editing_desc" +msgstr "Aktivates ILIAS Page Eidotr for feedback and hint text editing." + +msgid "adve_activation" +msgstr "Activation" + +#, fuzzy +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +#, fuzzy +msgid "adve_auto_url_linking_info" +msgstr "Tries to identify URLs like \"http://..\" in text paragraphs and automatically creates links around them." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +msgid "adve_blocking_mode" +msgstr "Edit Lock" + +msgid "adve_excass_settings" +msgstr "Exercise Assignments" + +#, fuzzy +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +msgid "adve_grp_glo" +msgstr "Глоссарии" + +msgid "adve_grp_lm" +msgstr "Обучающие модули ILIAS" + +msgid "adve_grp_rep" +msgstr "Страницы репозитория" + +msgid "adve_grp_scorm" +msgstr "Правка SCORM" + +msgid "adve_grp_test" +msgstr "Тесты и оценки" + +msgid "adve_grp_wiki" +msgstr "Вики" + +msgid "adve_minutes" +msgstr "Minutes" + +msgid "adve_minutes_info" +msgstr "Minutes of inactivity before an edit lock expires and a page can be edited by another user." + +msgid "adve_page_editor_settings" +msgstr "Редактор страниц ILIAS" + +msgid "adve_pe_general" +msgstr "Основное" + +msgid "adve_rte_settings" +msgstr "Редактор TinyMCE" + +msgid "adve_text_content_features" +msgstr "Text Content Menu" + +msgid "adve_use_physical" +msgstr "Использовать b/i/u вместо str/emp/imp" + +msgid "adve_use_physical_info" +msgstr "This setting replaces the semantic style class buttons for strong, emphatic and important with physical attribute buttons b (bold), i (italic) and u (underline). Please note, that this may result in inconsistencies, if the style editor is used and other phyiscal attributes are assigned to the strong/emphatic/important style classes." + +msgid "adve_use_tiny_mce" +msgstr "Enable TinyMCE for WYSIWYG Editing" diff --git a/components/ILIAS/COPage/lang/adve_sk.po b/components/ILIAS/COPage/lang/adve_sk.po new file mode 100644 index 000000000000..35d95d7fb968 --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_sk.po @@ -0,0 +1,112 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: adve\n" + +#, fuzzy +msgid "advanced_editing_excass_settings" +msgstr "Exercise Assignments Settings" + +#, fuzzy +msgid "advanced_editing_tst_editing" +msgstr "Page Editor for additional question content" + +#, fuzzy +msgid "advanced_editing_tst_editing_desc" +msgstr "Aktivates ILIAS Page Eidotr for feedback and hint text editing." + +#, fuzzy +msgid "adve_activation" +msgstr "Activation" + +#, fuzzy +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +#, fuzzy +msgid "adve_auto_url_linking_info" +msgstr "Tries to identify URLs like \"http://..\" in text paragraphs and automatically creates links around them." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +#, fuzzy +msgid "adve_blocking_mode" +msgstr "Edit Lock" + +#, fuzzy +msgid "adve_excass_settings" +msgstr "Exercise Assignments" + +#, fuzzy +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +msgid "adve_grp_glo" +msgstr "Glosáře" + +msgid "adve_grp_lm" +msgstr "Výukové moduly ILIAS" + +msgid "adve_grp_rep" +msgstr "Stránky úložiště" + +msgid "adve_grp_scorm" +msgstr "Editace SCORM" + +msgid "adve_grp_test" +msgstr "Test & Hodnocení" + +msgid "adve_grp_wiki" +msgstr "Wiki" + +#, fuzzy +msgid "adve_minutes" +msgstr "Minutes" + +#, fuzzy +msgid "adve_minutes_info" +msgstr "Minutes of inactivity before an edit lock expires and a page can be edited by another user." + +msgid "adve_page_editor_settings" +msgstr "Nastavení editoru stránek ILIAS" + +#, fuzzy +msgid "adve_pe_general" +msgstr "General" + +msgid "adve_rte_settings" +msgstr "Nastavení Rich Text Editoru" + +msgid "adve_text_content_features" +msgstr "Nabídka textového obsahu" + +#, fuzzy +msgid "adve_use_physical" +msgstr "Use b/i/u instead of str/emp/imp" + +#, fuzzy +msgid "adve_use_physical_info" +msgstr "This setting replaces the semantic style class buttons for strong, emphatic and important with physical attribute buttons b (bold), i (italic) and u (underline). Please note, that this may result in inconsistencies, if the style editor is used and other phyiscal attributes are assigned to the strong/emphatic/important style classes." + +#, fuzzy +msgid "adve_use_tiny_mce" +msgstr "Enable TinyMCE for WYSIWYG Editing" diff --git a/components/ILIAS/COPage/lang/adve_sl.po b/components/ILIAS/COPage/lang/adve_sl.po new file mode 100644 index 000000000000..caa9e8b959f7 --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_sl.po @@ -0,0 +1,97 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: adve\n" + +msgid "advanced_editing_excass_settings" +msgstr "Exercise Text Assignments" + +msgid "advanced_editing_tst_editing" +msgstr "Page Editor for additional question content" + +msgid "advanced_editing_tst_editing_desc" +msgstr "Activates ILIAS Page Editor for feedback and hint text editing." + +msgid "adve_activation" +msgstr "Activation" + +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +msgid "adve_auto_url_linking_info" +msgstr "Tries to identify URLs like \"http" + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +msgid "adve_blocking_mode" +msgstr "Edit Lock" + +msgid "adve_excass_settings" +msgstr "Exercise Assignments" + +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +msgid "adve_grp_glo" +msgstr "Glossaries" + +msgid "adve_grp_lm" +msgstr "ILIAS Learning Modules" + +msgid "adve_grp_rep" +msgstr "Repository Pages" + +msgid "adve_grp_scorm" +msgstr "SCORM Editing" + +msgid "adve_grp_test" +msgstr "Test and Assessment" + +msgid "adve_grp_wiki" +msgstr "Wikis" + +msgid "adve_minutes" +msgstr "Minutes" + +msgid "adve_minutes_info" +msgstr "Minutes of inactivity before an edit lock expires and a page can be edited by another user." + +msgid "adve_page_editor_settings" +msgstr "ILIAS Page Editor" + +msgid "adve_pe_general" +msgstr "General" + +msgid "adve_rte_settings" +msgstr "TinyMCE Editor" + +msgid "adve_text_content_features" +msgstr "Text Content Menu" + +msgid "adve_use_physical" +msgstr "Use b/i/u instead of str/emp/imp" + +msgid "adve_use_physical_info" +msgstr "This setting replaces the semantic style class buttons for strong, emphatic and important with physical attribute buttons b (bold), i (italic) and u (underline). Please note, that this may result in inconsistencies, if the style editor is used and other physical attributes are assigned to the strong/emphatic/important style classes." + +msgid "adve_use_tiny_mce" +msgstr "Enable TinyMCE for WYSIWYG Editing" diff --git a/components/ILIAS/COPage/lang/adve_sq.po b/components/ILIAS/COPage/lang/adve_sq.po new file mode 100644 index 000000000000..457c5a4508bf --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_sq.po @@ -0,0 +1,121 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: adve\n" + +#, fuzzy +msgid "advanced_editing_excass_settings" +msgstr "Exercise Assignments Settings" + +#, fuzzy +msgid "advanced_editing_tst_editing" +msgstr "Page Editor for additional question content" + +#, fuzzy +msgid "advanced_editing_tst_editing_desc" +msgstr "Aktivates ILIAS Page Eidotr for feedback and hint text editing." + +#, fuzzy +msgid "adve_activation" +msgstr "Activation" + +#, fuzzy +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +#, fuzzy +msgid "adve_auto_url_linking_info" +msgstr "Tries to identify URLs like \"http://..\" in text paragraphs and automatically creates links around them." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +#, fuzzy +msgid "adve_blocking_mode" +msgstr "Edit Lock" + +#, fuzzy +msgid "adve_excass_settings" +msgstr "Exercise Assignments" + +#, fuzzy +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +#, fuzzy +msgid "adve_grp_glo" +msgstr "Glossaries" + +#, fuzzy +msgid "adve_grp_lm" +msgstr "ILIAS Learning Modules" + +#, fuzzy +msgid "adve_grp_rep" +msgstr "Repository Pages" + +#, fuzzy +msgid "adve_grp_scorm" +msgstr "SCORM Editing" + +#, fuzzy +msgid "adve_grp_test" +msgstr "Test & Assessment" + +#, fuzzy +msgid "adve_grp_wiki" +msgstr "Wikis" + +#, fuzzy +msgid "adve_minutes" +msgstr "Minutes" + +#, fuzzy +msgid "adve_minutes_info" +msgstr "Minutes of inactivity before an edit lock expires and a page can be edited by another user." + +#, fuzzy +msgid "adve_page_editor_settings" +msgstr "ILIAS Page Editor Settings" + +#, fuzzy +msgid "adve_pe_general" +msgstr "General" + +#, fuzzy +msgid "adve_rte_settings" +msgstr "Rich Text Editor Settings" + +#, fuzzy +msgid "adve_text_content_features" +msgstr "Text Content Menu" + +#, fuzzy +msgid "adve_use_physical" +msgstr "Use b/i/u instead of str/emp/imp" + +#, fuzzy +msgid "adve_use_physical_info" +msgstr "This setting replaces the semantic style class buttons for strong, emphatic and important with physical attribute buttons b (bold), i (italic) and u (underline). Please note, that this may result in inconsistencies, if the style editor is used and other phyiscal attributes are assigned to the strong/emphatic/important style classes." + +#, fuzzy +msgid "adve_use_tiny_mce" +msgstr "Enable TinyMCE for WYSIWYG Editing" diff --git a/components/ILIAS/COPage/lang/adve_sr.po b/components/ILIAS/COPage/lang/adve_sr.po new file mode 100644 index 000000000000..72cc37c1d7e6 --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_sr.po @@ -0,0 +1,121 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: adve\n" + +#, fuzzy +msgid "advanced_editing_excass_settings" +msgstr "Exercise Assignments Settings" + +#, fuzzy +msgid "advanced_editing_tst_editing" +msgstr "Page Editor for additional question content" + +#, fuzzy +msgid "advanced_editing_tst_editing_desc" +msgstr "Aktivates ILIAS Page Eidotr for feedback and hint text editing." + +#, fuzzy +msgid "adve_activation" +msgstr "Activation" + +#, fuzzy +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +#, fuzzy +msgid "adve_auto_url_linking_info" +msgstr "Tries to identify URLs like \"http://..\" in text paragraphs and automatically creates links around them." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +#, fuzzy +msgid "adve_blocking_mode" +msgstr "Edit Lock" + +#, fuzzy +msgid "adve_excass_settings" +msgstr "Exercise Assignments" + +#, fuzzy +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +#, fuzzy +msgid "adve_grp_glo" +msgstr "Glossaries" + +#, fuzzy +msgid "adve_grp_lm" +msgstr "ILIAS Learning Modules" + +#, fuzzy +msgid "adve_grp_rep" +msgstr "Repository Pages" + +#, fuzzy +msgid "adve_grp_scorm" +msgstr "SCORM Editing" + +#, fuzzy +msgid "adve_grp_test" +msgstr "Test & Assessment" + +#, fuzzy +msgid "adve_grp_wiki" +msgstr "Wikis" + +#, fuzzy +msgid "adve_minutes" +msgstr "Minutes" + +#, fuzzy +msgid "adve_minutes_info" +msgstr "Minutes of inactivity before an edit lock expires and a page can be edited by another user." + +#, fuzzy +msgid "adve_page_editor_settings" +msgstr "ILIAS Page Editor Settings" + +#, fuzzy +msgid "adve_pe_general" +msgstr "General" + +#, fuzzy +msgid "adve_rte_settings" +msgstr "Rich Text Editor Settings" + +#, fuzzy +msgid "adve_text_content_features" +msgstr "Text Content Menu" + +#, fuzzy +msgid "adve_use_physical" +msgstr "Use b/i/u instead of str/emp/imp" + +#, fuzzy +msgid "adve_use_physical_info" +msgstr "This setting replaces the semantic style class buttons for strong, emphatic and important with physical attribute buttons b (bold), i (italic) and u (underline). Please note, that this may result in inconsistencies, if the style editor is used and other phyiscal attributes are assigned to the strong/emphatic/important style classes." + +#, fuzzy +msgid "adve_use_tiny_mce" +msgstr "Enable TinyMCE for WYSIWYG Editing" diff --git a/components/ILIAS/COPage/lang/adve_sv.po b/components/ILIAS/COPage/lang/adve_sv.po new file mode 100644 index 000000000000..f9380019cebe --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_sv.po @@ -0,0 +1,93 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: adve\n" + +msgid "advanced_editing_excass_settings" +msgstr "Settings Övningsenheter (textleveranser)" + +msgid "advanced_editing_tst_editing" +msgstr "Sidredigerare för ytterligare frågeinnehåll" + +msgid "advanced_editing_tst_editing_desc" +msgstr "Aktiverar ILIAS sidredigerare för feedback och notistexter." + +msgid "adve_activation" +msgstr "Aktivering" + +msgid "adve_auto_url_linking" +msgstr "URL Automatisk länkning" + +msgid "adve_auto_url_linking_info" +msgstr "ILIAS söker i textstycken efter URL-adresser (t.ex. \"http" + +msgid "adve_autosave" +msgstr "Automatiskt sparintervall" + +msgid "adve_autosave_info" +msgstr "Textinnehåll sparas automatiskt vid detta intervall. Kortare intervall leder till högre serverbelastning och lägre systemprestanda." + +msgid "adve_autosave_info_min_10" +msgstr "Ställ in värdet på minst 10 sekunder om du använder funktionen." + +msgid "adve_blocking_mode" +msgstr "Redigera lås" + +msgid "adve_excass_settings" +msgstr "Träningsenheter" + +msgid "adve_grp_copa" +msgstr "Innehållssidor" + +msgid "adve_grp_frm" +msgstr "Forum" + +msgid "adve_grp_glo" +msgstr "Glossarier" + +msgid "adve_grp_lm" +msgstr "ILIAS utbildningsmoduler" + +msgid "adve_grp_rep" +msgstr "Sidor i tidskrifter" + +msgid "adve_grp_scorm" +msgstr "SCORM-moduler" + +msgid "adve_grp_test" +msgstr "Test och bedömning" + +msgid "adve_grp_wiki" +msgstr "Wikis" + +msgid "adve_minutes" +msgstr "minuter" + +msgid "adve_minutes_info" +msgstr "Tidsperiod i minuter tills sidan kan släppas igen på grund av brist på aktivitet och sedan redigeras av en annan användare." + +msgid "adve_page_editor_settings" +msgstr "ILIAS sidredigerare" + +msgid "adve_pe_general" +msgstr "Inställningar" + +msgid "adve_rte_settings" +msgstr "TinyMCE-editor" + +msgid "adve_text_content_features" +msgstr "Text Innehåll Meny" + +msgid "adve_use_physical" +msgstr "Ersätt #str|emp|imp med B|I|U" + +msgid "adve_use_physical_info" +msgstr "Inställningen ersätter knapparna i de semantiska stilklasserna för stark, eftertrycklig och viktig med de fast definierade distinktionerna B (fet), I (kursiv) och U (understruken). Uppmärksamhet" + +msgid "adve_use_tiny_mce" +msgstr "Aktivera TinyMCE för WYSIWYG-redigering" diff --git a/components/ILIAS/COPage/lang/adve_tr.po b/components/ILIAS/COPage/lang/adve_tr.po new file mode 100644 index 000000000000..8b3567350a4e --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_tr.po @@ -0,0 +1,107 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: adve\n" + +#, fuzzy +msgid "advanced_editing_excass_settings" +msgstr "Exercise Assignments Settings" + +#, fuzzy +msgid "advanced_editing_tst_editing" +msgstr "Page Editor for additional question content" + +#, fuzzy +msgid "advanced_editing_tst_editing_desc" +msgstr "Aktivates ILIAS Page Eidotr for feedback and hint text editing." + +msgid "adve_activation" +msgstr "Etkinleştirme" + +#, fuzzy +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +#, fuzzy +msgid "adve_auto_url_linking_info" +msgstr "Tries to identify URLs like \"http://..\" in text paragraphs and automatically creates links around them." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +#, fuzzy +msgid "adve_blocking_mode" +msgstr "Edit Lock" + +#, fuzzy +msgid "adve_excass_settings" +msgstr "Exercise Assignments" + +#, fuzzy +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +msgid "adve_grp_glo" +msgstr "Sözlükler" + +msgid "adve_grp_lm" +msgstr "​​ILIAS Öğrenme Modüllleri" + +msgid "adve_grp_rep" +msgstr "Depo Sayfaları" + +msgid "adve_grp_scorm" +msgstr "SCORM Düzenleme" + +msgid "adve_grp_test" +msgstr "Test ve Değerlendirme" + +msgid "adve_grp_wiki" +msgstr "Wiki'ler" + +#, fuzzy +msgid "adve_minutes" +msgstr "Minutes" + +#, fuzzy +msgid "adve_minutes_info" +msgstr "Minutes of inactivity before an edit lock expires and a page can be edited by another user." + +msgid "adve_page_editor_settings" +msgstr "ILIAS İçerik Düzenleyici" + +msgid "adve_pe_general" +msgstr "Genel" + +msgid "adve_rte_settings" +msgstr "TinyMCE Editör" + +msgid "adve_text_content_features" +msgstr "Metin İçerik Menüsü" + +msgid "adve_use_physical" +msgstr "str / emp / imp yerine b / i / u kullan" + +msgid "adve_use_physical_info" +msgstr "Bu ayar anlamsal stil sınıfı butonları (strong,emphatic,important) yerine b (bold), i (italic) and u (underline) butonlarını koyar. Eğer stil editörü strong/emphatic/important stil sınıflarına atanmış başka fiziksel öznitelikler kullanıyorsa tutarsızlıklar oluşabilir." + +msgid "adve_use_tiny_mce" +msgstr "WYSIWYG düzenleme için TinyMCE kullan" diff --git a/components/ILIAS/COPage/lang/adve_uk.po b/components/ILIAS/COPage/lang/adve_uk.po new file mode 100644 index 000000000000..73a56e47124d --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_uk.po @@ -0,0 +1,121 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: adve\n" + +#, fuzzy +msgid "advanced_editing_excass_settings" +msgstr "Exercise Assignments Settings" + +#, fuzzy +msgid "advanced_editing_tst_editing" +msgstr "Page Editor for additional question content" + +#, fuzzy +msgid "advanced_editing_tst_editing_desc" +msgstr "Aktivates ILIAS Page Eidotr for feedback and hint text editing." + +#, fuzzy +msgid "adve_activation" +msgstr "Activation" + +#, fuzzy +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +#, fuzzy +msgid "adve_auto_url_linking_info" +msgstr "Tries to identify URLs like \"http://..\" in text paragraphs and automatically creates links around them." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +#, fuzzy +msgid "adve_blocking_mode" +msgstr "Edit Lock" + +#, fuzzy +msgid "adve_excass_settings" +msgstr "Exercise Assignments" + +#, fuzzy +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +#, fuzzy +msgid "adve_grp_glo" +msgstr "Glossaries" + +#, fuzzy +msgid "adve_grp_lm" +msgstr "ILIAS Learning Modules" + +#, fuzzy +msgid "adve_grp_rep" +msgstr "Repository Pages" + +#, fuzzy +msgid "adve_grp_scorm" +msgstr "SCORM Editing" + +#, fuzzy +msgid "adve_grp_test" +msgstr "Test & Assessment" + +#, fuzzy +msgid "adve_grp_wiki" +msgstr "Wikis" + +#, fuzzy +msgid "adve_minutes" +msgstr "Minutes" + +#, fuzzy +msgid "adve_minutes_info" +msgstr "Minutes of inactivity before an edit lock expires and a page can be edited by another user." + +#, fuzzy +msgid "adve_page_editor_settings" +msgstr "ILIAS Page Editor Settings" + +#, fuzzy +msgid "adve_pe_general" +msgstr "General" + +#, fuzzy +msgid "adve_rte_settings" +msgstr "Rich Text Editor Settings" + +#, fuzzy +msgid "adve_text_content_features" +msgstr "Text Content Menu" + +#, fuzzy +msgid "adve_use_physical" +msgstr "Use b/i/u instead of str/emp/imp" + +#, fuzzy +msgid "adve_use_physical_info" +msgstr "This setting replaces the semantic style class buttons for strong, emphatic and important with physical attribute buttons b (bold), i (italic) and u (underline). Please note, that this may result in inconsistencies, if the style editor is used and other phyiscal attributes are assigned to the strong/emphatic/important style classes." + +#, fuzzy +msgid "adve_use_tiny_mce" +msgstr "Enable TinyMCE for WYSIWYG Editing" diff --git a/components/ILIAS/COPage/lang/adve_vi.po b/components/ILIAS/COPage/lang/adve_vi.po new file mode 100644 index 000000000000..c359187fe204 --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_vi.po @@ -0,0 +1,121 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: adve\n" + +#, fuzzy +msgid "advanced_editing_excass_settings" +msgstr "Exercise Assignments Settings" + +#, fuzzy +msgid "advanced_editing_tst_editing" +msgstr "Page Editor for additional question content" + +#, fuzzy +msgid "advanced_editing_tst_editing_desc" +msgstr "Aktivates ILIAS Page Eidotr for feedback and hint text editing." + +#, fuzzy +msgid "adve_activation" +msgstr "Activation" + +#, fuzzy +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +#, fuzzy +msgid "adve_auto_url_linking_info" +msgstr "Tries to identify URLs like \"http://..\" in text paragraphs and automatically creates links around them." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +#, fuzzy +msgid "adve_blocking_mode" +msgstr "Edit Lock" + +#, fuzzy +msgid "adve_excass_settings" +msgstr "Exercise Assignments" + +#, fuzzy +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +#, fuzzy +msgid "adve_grp_glo" +msgstr "Glossaries" + +#, fuzzy +msgid "adve_grp_lm" +msgstr "ILIAS Learning Modules" + +#, fuzzy +msgid "adve_grp_rep" +msgstr "Repository Pages" + +#, fuzzy +msgid "adve_grp_scorm" +msgstr "SCORM Editing" + +#, fuzzy +msgid "adve_grp_test" +msgstr "Test & Assessment" + +#, fuzzy +msgid "adve_grp_wiki" +msgstr "Wikis" + +#, fuzzy +msgid "adve_minutes" +msgstr "Minutes" + +#, fuzzy +msgid "adve_minutes_info" +msgstr "Minutes of inactivity before an edit lock expires and a page can be edited by another user." + +#, fuzzy +msgid "adve_page_editor_settings" +msgstr "ILIAS Page Editor Settings" + +#, fuzzy +msgid "adve_pe_general" +msgstr "General" + +#, fuzzy +msgid "adve_rte_settings" +msgstr "Rich Text Editor Settings" + +#, fuzzy +msgid "adve_text_content_features" +msgstr "Text Content Menu" + +#, fuzzy +msgid "adve_use_physical" +msgstr "Use b/i/u instead of str/emp/imp" + +#, fuzzy +msgid "adve_use_physical_info" +msgstr "This setting replaces the semantic style class buttons for strong, emphatic and important with physical attribute buttons b (bold), i (italic) and u (underline). Please note, that this may result in inconsistencies, if the style editor is used and other phyiscal attributes are assigned to the strong/emphatic/important style classes." + +#, fuzzy +msgid "adve_use_tiny_mce" +msgstr "Enable TinyMCE for WYSIWYG Editing" diff --git a/components/ILIAS/COPage/lang/adve_zh.po b/components/ILIAS/COPage/lang/adve_zh.po new file mode 100644 index 000000000000..e5df9b1b003f --- /dev/null +++ b/components/ILIAS/COPage/lang/adve_zh.po @@ -0,0 +1,107 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: adve\n" + +#, fuzzy +msgid "advanced_editing_excass_settings" +msgstr "Exercise Assignments Settings" + +#, fuzzy +msgid "advanced_editing_tst_editing" +msgstr "Page Editor for additional question content" + +#, fuzzy +msgid "advanced_editing_tst_editing_desc" +msgstr "Aktivates ILIAS Page Eidotr for feedback and hint text editing." + +msgid "adve_activation" +msgstr "活跃" + +#, fuzzy +msgid "adve_auto_url_linking" +msgstr "URL Auto-Linking" + +#, fuzzy +msgid "adve_auto_url_linking_info" +msgstr "Tries to identify URLs like \"http://..\" in text paragraphs and automatically creates links around them." + +#, fuzzy +msgid "adve_autosave" +msgstr "Automatic Saving Intervall" + +#, fuzzy +msgid "adve_autosave_info" +msgstr "Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases." + +#, fuzzy +msgid "adve_autosave_info_min_10" +msgstr "Please choose a value of minimal 10 seconds if you activated this feature." + +#, fuzzy +msgid "adve_blocking_mode" +msgstr "Edit Lock" + +#, fuzzy +msgid "adve_excass_settings" +msgstr "Exercise Assignments" + +#, fuzzy +msgid "adve_grp_copa" +msgstr "Content Pages" + +#, fuzzy +msgid "adve_grp_frm" +msgstr "Forums" + +msgid "adve_grp_glo" +msgstr "词汇表" + +msgid "adve_grp_lm" +msgstr "ILIAS学习模块" + +msgid "adve_grp_rep" +msgstr "库页面" + +msgid "adve_grp_scorm" +msgstr "编辑SCORM" + +msgid "adve_grp_test" +msgstr "测试&评估" + +msgid "adve_grp_wiki" +msgstr "维基" + +#, fuzzy +msgid "adve_minutes" +msgstr "Minutes" + +#, fuzzy +msgid "adve_minutes_info" +msgstr "Minutes of inactivity before an edit lock expires and a page can be edited by another user." + +msgid "adve_page_editor_settings" +msgstr "ILIAS页面编辑器设置" + +msgid "adve_pe_general" +msgstr "常规" + +msgid "adve_rte_settings" +msgstr "富文本编辑器设置" + +msgid "adve_text_content_features" +msgstr "文本内容菜单" + +msgid "adve_use_physical" +msgstr "使用 b/i/u 而不是 str/emp/imp" + +msgid "adve_use_physical_info" +msgstr "为strong、emphatic和重要的物理属性按钮b(bold)、i(italic)和 u(underline)设置替代语义样式类。请注意,如果样式编辑器已在使用,并且其他物理属性已分配给strong/emphatic/important 样式类,这可能导致不一致的结果。" + +msgid "adve_use_tiny_mce" +msgstr "为所见即所得编辑启用TinyMCE。" diff --git a/components/ILIAS/COPage/lang/copg.pot b/components/ILIAS/COPage/lang/copg.pot new file mode 100644 index 000000000000..487682eda880 --- /dev/null +++ b/components/ILIAS/COPage/lang/copg.pot @@ -0,0 +1,132 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: copg\n" + +msgid "copg_active_to_small" +msgstr "" + +msgid "copg_add_content" +msgstr "" + +msgid "copg_allow_html" +msgstr "" + +msgid "copg_allow_html_info" +msgstr "" + +msgid "copg_an_error_occured" +msgstr "" + +msgid "copg_confirm_el_deletion" +msgstr "" + +msgid "copg_cron_days" +msgstr "" + +msgid "copg_cron_days_info" +msgstr "" + +msgid "copg_cron_keep_entries" +msgstr "" + +msgid "copg_cron_keep_entries_info" +msgstr "" + +msgid "copg_days" +msgstr "" + +msgid "copg_details" +msgstr "" + +msgid "copg_edit_iframe_title" +msgstr "" + +msgid "copg_edit_style_class" +msgstr "" + +msgid "copg_entries" +msgstr "" + +msgid "copg_error" +msgstr "" + +msgid "copg_error_occured_modal" +msgstr "" + +msgid "copg_est_reading_time" +msgstr "" + +msgid "copg_history_cleanup_cron" +msgstr "" + +msgid "copg_history_cleanup_cron_info" +msgstr "" + +msgid "copg_list_item_style" +msgstr "" + +msgid "copg_list_style" +msgstr "" + +msgid "copg_list_styles" +msgstr "" + +msgid "copg_more_character_formats" +msgstr "" + +msgid "copg_obj_types" +msgstr "" + +msgid "copg_page_element_not_found" +msgstr "" + +msgid "copg_page_type_stys" +msgstr "" + +msgid "copg_pages" +msgstr "" + +msgid "copg_par_format_selection" +msgstr "" + +msgid "copg_pc_mob_does_not_exist" +msgstr "" + +msgid "copg_plugin" +msgstr "" + +msgid "copg_plugin_not_avail" +msgstr "" + +msgid "copg_questions_not_supported_here" +msgstr "" + +msgid "copg_reload_page" +msgstr "" + +msgid "copg_remove_formats" +msgstr "" + +msgid "copg_sec_link_info" +msgstr "" + +msgid "copg_select_two_versions" +msgstr "" + +msgid "copg_snippet_cannot_be_edited" +msgstr "" + +msgid "copg_templates" +msgstr "" + +msgid "copg_unsupported_media_type" +msgstr "" + +msgid "copg_use_template" +msgstr "" + +msgid "copg_x_minutes" +msgstr "" diff --git a/components/ILIAS/COPage/lang/copg_ar.po b/components/ILIAS/COPage/lang/copg_ar.po new file mode 100644 index 000000000000..942910bb019c --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_ar.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +#, fuzzy +msgid "copg_confirm_el_deletion" +msgstr "Do you really want to delete the selected elements?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +#, fuzzy +msgid "copg_questions_not_supported_here" +msgstr "Questions are not supported in this context." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +#, fuzzy +msgid "copg_sec_link_info" +msgstr "If you set a link on the whole section, please ensure that no other interactive elements are included within the section. Otherwise their behaviour may be erratically." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +#, fuzzy +msgid "copg_snippet_cannot_be_edited" +msgstr "This is a predefined content snippet and cannot be edited here." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_bg.po b/components/ILIAS/COPage/lang/copg_bg.po new file mode 100644 index 000000000000..89a31be26694 --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_bg.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +#, fuzzy +msgid "copg_confirm_el_deletion" +msgstr "Do you really want to delete the selected elements?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +#, fuzzy +msgid "copg_questions_not_supported_here" +msgstr "Questions are not supported in this context." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +#, fuzzy +msgid "copg_sec_link_info" +msgstr "If you set a link on the whole section, please ensure that no other interactive elements are included within the section. Otherwise their behaviour may be erratically." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +#, fuzzy +msgid "copg_snippet_cannot_be_edited" +msgstr "This is a predefined content snippet and cannot be edited here." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_cs.po b/components/ILIAS/COPage/lang/copg_cs.po new file mode 100644 index 000000000000..5124b593ea22 --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_cs.po @@ -0,0 +1,173 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +msgid "copg_confirm_el_deletion" +msgstr "Opravdu chcete smazat vybrané prvky?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +msgid "copg_questions_not_supported_here" +msgstr "V tomto kontextu nejsou otázky podporovány." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +msgid "copg_sec_link_info" +msgstr "Pokud nastavíte odkaz na celou část, ujistěte se, že v této části nejsou obsaženy žádné další interaktivní prvky. Jinak může být jejich chování nevypočitatelné." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +msgid "copg_snippet_cannot_be_edited" +msgstr "Jedná se o předem definovaný úryvek obsahu, který zde nelze upravovat." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_da.po b/components/ILIAS/COPage/lang/copg_da.po new file mode 100644 index 000000000000..e8934bb1ba44 --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_da.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +#, fuzzy +msgid "copg_confirm_el_deletion" +msgstr "Do you really want to delete the selected elements?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +#, fuzzy +msgid "copg_questions_not_supported_here" +msgstr "Questions are not supported in this context." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +#, fuzzy +msgid "copg_sec_link_info" +msgstr "If you set a link on the whole section, please ensure that no other interactive elements are included within the section. Otherwise their behaviour may be erratically." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +#, fuzzy +msgid "copg_snippet_cannot_be_edited" +msgstr "This is a predefined content snippet and cannot be edited here." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_de.po b/components/ILIAS/COPage/lang/copg_de.po new file mode 100644 index 000000000000..4475052ba9bc --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_de.po @@ -0,0 +1,135 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: copg\n" + +msgid "copg_active_to_small" +msgstr "Dieses Datum muss größer als das „Aktiv ab“-Datum sein." + +msgid "copg_add_content" +msgstr "Inhalte hinzufügen" + +msgid "copg_allow_html" +msgstr "HTML/Javascript erlauben" + +msgid "copg_allow_html_info" +msgstr "Benutzer können HTML oder Javascript in Seiteninhalten verwenden. Dies kann zu Sicherheitsproblemen führen. Sie sollten diese Funktion nur für Komponenten aktivieren, die von vertrauenswürdigen Benutzern verwendet werden. Die Möglichkeit, HTML in dieser Art einzubinden, wird möglicherweise in einer zukünftigen Version komplett entfallen." + +msgid "copg_an_error_occured" +msgstr "Es ist leider ein Problem aufgetreten." + +msgid "copg_confirm_el_deletion" +msgstr "Sollen die ausgewählten Elemente wirklich gelöscht werden?" + +msgid "copg_cron_days" +msgstr "Einträge älter als x löschen" + +msgid "copg_cron_days_info" +msgstr "Löscht Einträge aus dem Verlauf, die älter als der angegebene Zeitraum sind." + +msgid "copg_cron_keep_entries" +msgstr "Mindestanzahl Einträge" + +msgid "copg_cron_keep_entries_info" +msgstr "Diese Anzahl an Einträgen wird im Verlauf behalten, auch wenn diese älter als der angegebene Zeitraum sind." + +msgid "copg_days" +msgstr "Tage" + +msgid "copg_details" +msgstr "Details" + +msgid "copg_edit_iframe_title" +msgstr "Text bearbeiten im Seiteneditor" + +msgid "copg_edit_style_class" +msgstr "Style-Klasse bearbeiten" + +msgid "copg_entries" +msgstr "Einträge" + +msgid "copg_error" +msgstr "Problem" + +msgid "copg_error_occured_modal" +msgstr "Es ist leider ein Fehler aufgetreten. Bitte drücken Sie \"Seite neu laden\" um zum zuletzt gespeicherten Inhalt zu gelangen." + +msgid "copg_est_reading_time" +msgstr "Geschätzte Lesezeit" + +msgid "copg_history_cleanup_cron" +msgstr "Verlaufsbereinigung" + +msgid "copg_history_cleanup_cron_info" +msgstr "Löscht ältere Einträge aus dem Verlauf des Seiteneditors." + +msgid "copg_list_item_style" +msgstr "Listeneintrag" + +msgid "copg_list_style" +msgstr "Liste" + +msgid "copg_list_styles" +msgstr "Listenformat" + +msgid "copg_more_character_formats" +msgstr "Weitere Zeichenformate" + +msgid "copg_obj_types" +msgstr "Objekttypen" + +msgid "copg_page_element_not_found" +msgstr "Unbekanntes Seitenelement." + +msgid "copg_page_type_stys" +msgstr "Seitenlayout" + +msgid "copg_pages" +msgstr "Seiten" + +msgid "copg_par_format_selection" +msgstr "Absatzformatauswahl" + +msgid "copg_pc_mob_does_not_exist" +msgstr "Das Medienobjekt wurde nicht gefunden." + +msgid "copg_plugin" +msgstr "Plugin" + +msgid "copg_plugin_not_avail" +msgstr "Plugin %s nicht verfügbar." + +msgid "copg_questions_not_supported_here" +msgstr "In diesem Kontext werden keine Fragen unterstützt." + +msgid "copg_reload_page" +msgstr "Seite neu laden" + +msgid "copg_remove_formats" +msgstr "Zeichenformate entfernen" + +msgid "copg_sec_link_info" +msgstr "Wählen Sie ein Ziel für die Verlinkung des Blocks. Achtung: In diesem Fall darf der Inhalt des Blocks dann selbst keine weiteren Links enthalten!" + +msgid "copg_select_two_versions" +msgstr "Bitte wählen Sie genau zwei Versionen zum Vergleich aus." + +msgid "copg_snippet_cannot_be_edited" +msgstr "Dies ist ein vordefinierter Inhaltsbaustein, der an dieser Stelle nicht editiert werden kann." + +msgid "copg_templates" +msgstr "Vorlagen" + +msgid "copg_unsupported_media_type" +msgstr "Dieses Medienobjekt hat einen nicht unterstützen Medientyp." + +msgid "copg_use_template" +msgstr "Vorlage nutzen" + +msgid "copg_x_minutes" +msgstr "%s Minute(n)" diff --git a/components/ILIAS/COPage/lang/copg_el.po b/components/ILIAS/COPage/lang/copg_el.po new file mode 100644 index 000000000000..8a2b6023a7aa --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_el.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +#, fuzzy +msgid "copg_confirm_el_deletion" +msgstr "Do you really want to delete the selected elements?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +#, fuzzy +msgid "copg_questions_not_supported_here" +msgstr "Questions are not supported in this context." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +#, fuzzy +msgid "copg_sec_link_info" +msgstr "If you set a link on the whole section, please ensure that no other interactive elements are included within the section. Otherwise their behaviour may be erratically." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +#, fuzzy +msgid "copg_snippet_cannot_be_edited" +msgstr "This is a predefined content snippet and cannot be edited here." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_en.po b/components/ILIAS/COPage/lang/copg_en.po new file mode 100644 index 000000000000..c032611ad4dd --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_en.po @@ -0,0 +1,135 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: copg\n" + +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +msgid "copg_add_content" +msgstr "Add Content" + +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +msgid "copg_an_error_occured" +msgstr "An error occured." + +msgid "copg_confirm_el_deletion" +msgstr "Do you really want to delete the selected elements?" + +msgid "copg_cron_days" +msgstr "Delete pages older than" + +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +msgid "copg_days" +msgstr "Days" + +msgid "copg_details" +msgstr "Details" + +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +msgid "copg_entries" +msgstr "Entries" + +msgid "copg_error" +msgstr "Error" + +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +msgid "copg_list_item_style" +msgstr "List Item" + +msgid "copg_list_style" +msgstr "List" + +msgid "copg_list_styles" +msgstr "List Formats" + +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +msgid "copg_obj_types" +msgstr "Object Types" + +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +msgid "copg_page_type_stys" +msgstr "Layout Page" + +msgid "copg_pages" +msgstr "Pages" + +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +msgid "copg_plugin" +msgstr "Plugin" + +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +msgid "copg_questions_not_supported_here" +msgstr "Questions are not supported in this context." + +msgid "copg_reload_page" +msgstr "Reload Page" + +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +msgid "copg_sec_link_info" +msgstr "Select a target for linking the block. Attention: In this case, the content of the block must not contain any further links itself!" + +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +msgid "copg_snippet_cannot_be_edited" +msgstr "This is a predefined content snippet and cannot be edited here." + +msgid "copg_templates" +msgstr "Templates" + +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +msgid "copg_use_template" +msgstr "Use Template" + +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_es.po b/components/ILIAS/COPage/lang/copg_es.po new file mode 100644 index 000000000000..a89d60a63800 --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_es.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: copg\n" + +msgid "copg_active_to_small" +msgstr "Esta fecha debe ser posterior a la fecha de inicio." + +msgid "copg_add_content" +msgstr "Añadir Contenido" + +msgid "copg_allow_html" +msgstr "Activar HTML/Javascript" + +msgid "copg_allow_html_info" +msgstr "El usuario puede utilizar HTML o Javascript en el contenido de la página. Esto puede conllevar problemas de seguridad. No lo active si las funciones pueden ser utilizadas por usuarios que no considere de confianza. El soporte para añadir contenido HTML de esta forma podría interrumpirse en una versión futura." + +msgid "copg_an_error_occured" +msgstr "Se ha producido un error." + +msgid "copg_confirm_el_deletion" +msgstr "¿Realmente desea eliminar los elementos seleccionados?" + +msgid "copg_cron_days" +msgstr "Eliminar páginas anteriores a" + +msgid "copg_cron_days_info" +msgstr "Se eliminarán las entradas del historial de páginas anteriores a este periodo." + +msgid "copg_cron_keep_entries" +msgstr "Mantener Mínimo" + +msgid "copg_cron_keep_entries_info" +msgstr "Este número es el mínimo de entradas que se conservarán, aunque sean anteriores al periodo de eliminación." + +msgid "copg_days" +msgstr "Días" + +msgid "copg_details" +msgstr "Detalles" + +msgid "copg_edit_iframe_title" +msgstr "Edición de texto del editor de páginas" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +msgid "copg_entries" +msgstr "Entradas" + +msgid "copg_error" +msgstr "Error" + +msgid "copg_error_occured_modal" +msgstr "Se ha producido un error al procesar la página. Haga clic en \"Recargar página\" para volver al estado guardado anteriormente." + +msgid "copg_est_reading_time" +msgstr "Tiempo estimado de lectura" + +msgid "copg_history_cleanup_cron" +msgstr "Limpieza del historial del editor de páginas" + +msgid "copg_history_cleanup_cron_info" +msgstr "Elimina las entradas antiguas del historial de la página." + +msgid "copg_list_item_style" +msgstr "Elemento de lista" + +msgid "copg_list_style" +msgstr "Lista" + +msgid "copg_list_styles" +msgstr "Formatos de lista" + +msgid "copg_more_character_formats" +msgstr "Más estilos de caracteres" + +msgid "copg_obj_types" +msgstr "Tipos de objeto" + +msgid "copg_page_element_not_found" +msgstr "Elemento de página no encontrado." + +msgid "copg_page_type_stys" +msgstr "Página de diseño" + +msgid "copg_pages" +msgstr "Páginas" + +msgid "copg_par_format_selection" +msgstr "Selección de formato de párrafo" + +msgid "copg_pc_mob_does_not_exist" +msgstr "Este objeto multimedia no existe." + +msgid "copg_plugin" +msgstr "Plugin" + +msgid "copg_plugin_not_avail" +msgstr "El plugin %s no está disponible." + +msgid "copg_questions_not_supported_here" +msgstr "Las preguntas no están soportadas en este contexto." + +msgid "copg_reload_page" +msgstr "Recargar página" + +msgid "copg_remove_formats" +msgstr "Eliminar formato" + +msgid "copg_sec_link_info" +msgstr "Seleccione un destino para vincular el bloque. Atención: ¡En este caso, el contenido del bloque no debe contener más enlaces!" + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +msgid "copg_snippet_cannot_be_edited" +msgstr "Este es un fragmento de contenido predefinido y no se puede editar aquí." + +msgid "copg_templates" +msgstr "Templates" + +msgid "copg_unsupported_media_type" +msgstr "Este objeto multimedia tiene un tipo de medio no compatible." + +msgid "copg_use_template" +msgstr "Usar plantilla" + +msgid "copg_x_minutes" +msgstr "%s minuto(s)" diff --git a/components/ILIAS/COPage/lang/copg_et.po b/components/ILIAS/COPage/lang/copg_et.po new file mode 100644 index 000000000000..3949b3062bef --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_et.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +#, fuzzy +msgid "copg_confirm_el_deletion" +msgstr "Do you really want to delete the selected elements?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +#, fuzzy +msgid "copg_questions_not_supported_here" +msgstr "Questions are not supported in this context." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +#, fuzzy +msgid "copg_sec_link_info" +msgstr "If you set a link on the whole section, please ensure that no other interactive elements are included within the section. Otherwise their behaviour may be erratically." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +#, fuzzy +msgid "copg_snippet_cannot_be_edited" +msgstr "This is a predefined content snippet and cannot be edited here." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_fa.po b/components/ILIAS/COPage/lang/copg_fa.po new file mode 100644 index 000000000000..ced4ef5725dc --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_fa.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +#, fuzzy +msgid "copg_confirm_el_deletion" +msgstr "Do you really want to delete the selected elements?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +#, fuzzy +msgid "copg_questions_not_supported_here" +msgstr "Questions are not supported in this context." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +#, fuzzy +msgid "copg_sec_link_info" +msgstr "If you set a link on the whole section, please ensure that no other interactive elements are included within the section. Otherwise their behaviour may be erratically." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +#, fuzzy +msgid "copg_snippet_cannot_be_edited" +msgstr "This is a predefined content snippet and cannot be edited here." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_fr.po b/components/ILIAS/COPage/lang/copg_fr.po new file mode 100644 index 000000000000..a896229ba79b --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_fr.po @@ -0,0 +1,164 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +msgid "copg_an_error_occured" +msgstr "An error occured." + +msgid "copg_confirm_el_deletion" +msgstr "Voulez-vous vraiment supprimer les éléments sélectionnés?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +msgid "copg_error" +msgstr "Error" + +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +msgid "copg_questions_not_supported_here" +msgstr "Les questions ne sont pas supportées dans ce contexte." + +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +msgid "copg_sec_link_info" +msgstr "Si vous définissez un lien sur toute la section, veuillez vous assurer qu’aucun autre élément interactif n’est inclus dans la section. Autrement, son comportement peut être irrégulier." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +msgid "copg_snippet_cannot_be_edited" +msgstr "Il s'agit d’un extrait du contenu prédéfini et il ne peut pas être édité ici." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_hr.po b/components/ILIAS/COPage/lang/copg_hr.po new file mode 100644 index 000000000000..24cea7ab6898 --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_hr.po @@ -0,0 +1,173 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +msgid "copg_confirm_el_deletion" +msgstr "Želite li zaista izbrisati odabrane elemente?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +msgid "copg_questions_not_supported_here" +msgstr "Pitanja nisu podržana u ovom kontekstu." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +msgid "copg_sec_link_info" +msgstr "Ako postavite poveznicu na cijeli odjeljak, pripazite da unutar odjeljka ne postoje drugi interaktivni elementi. U protivnom njihovo ponašanje može biti nestalno." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +msgid "copg_snippet_cannot_be_edited" +msgstr "Ovo je unaprijed definirani isječak sadržaja koji se ovdje ne može uređivati." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_hu.po b/components/ILIAS/COPage/lang/copg_hu.po new file mode 100644 index 000000000000..bcf22890833f --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_hu.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: copg\n" + +msgid "copg_active_to_small" +msgstr "A dátumnak a kezdő dátumnál későbbinek kell lennie." + +msgid "copg_add_content" +msgstr "Tartalom hozzáadása" + +msgid "copg_allow_html" +msgstr "HTML/Javascript bekapcsolása" + +msgid "copg_allow_html_info" +msgstr "HTML, illetve Javascript oldaltartalmakat használhat. Ez biztonsági rést okozhat, ezért ne kapcsolja be, ha lehet ártó szándékú felhasználója. Az ilyen módú HTML-tartalom hozzáadása várhatóan már nem lesz támogatott a későbbi verziókban." + +msgid "copg_an_error_occured" +msgstr "Hiba történt." + +msgid "copg_confirm_el_deletion" +msgstr "Biztos, hogy törli a kijelölt elemeket?" + +msgid "copg_cron_days" +msgstr "Ennél régebbi lapok törlése:" + +msgid "copg_cron_days_info" +msgstr "Töröljük a megadottnál régebbi lapelőzményeket." + +msgid "copg_cron_keep_entries" +msgstr "Minimálisan megtartandók" + +msgid "copg_cron_keep_entries_info" +msgstr "Legalább ennyi bejegyzést akkor is megtartunk, ha azok régebbiek a megadottnál." + +msgid "copg_days" +msgstr "Napok" + +msgid "copg_details" +msgstr "Részletek" + +msgid "copg_edit_iframe_title" +msgstr "Az oldalszerkesztő szövegszerkesztése" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +msgid "copg_entries" +msgstr "Bejegyzések" + +msgid "copg_error" +msgstr "Hiba" + +msgid "copg_error_occured_modal" +msgstr "Hiba az oldal betöltése közben. Kattintson az oldal újratöltésére, így visszatér a korábban mentett állapothoz." + +msgid "copg_est_reading_time" +msgstr "Becsült olvasási idő" + +msgid "copg_history_cleanup_cron" +msgstr "Oldalszerkesztőelőzmény-tisztítás" + +msgid "copg_history_cleanup_cron_info" +msgstr "Régi bejegyzések eltávolítása az oldalelőzményekből." + +msgid "copg_list_item_style" +msgstr "Felsorolás eleme" + +msgid "copg_list_style" +msgstr "Felsorolás" + +msgid "copg_list_styles" +msgstr "Felsorolási formátumok" + +msgid "copg_more_character_formats" +msgstr "További karakterstílusok" + +msgid "copg_obj_types" +msgstr "Objektumtípusok" + +msgid "copg_page_element_not_found" +msgstr "Az oldalelem nem található." + +msgid "copg_page_type_stys" +msgstr "Lapelrendezés" + +msgid "copg_pages" +msgstr "Lapok" + +msgid "copg_par_format_selection" +msgstr "Bekezdésformátumok" + +msgid "copg_pc_mob_does_not_exist" +msgstr "Ez a médiaelem nem létezik." + +msgid "copg_plugin" +msgstr "Bővítmény" + +msgid "copg_plugin_not_avail" +msgstr "‘%s’ bővítmény nem érhető el" + +msgid "copg_questions_not_supported_here" +msgstr "Ebben a kontextusban a kérdéseket nem támogatjuk." + +msgid "copg_reload_page" +msgstr "Oldal újratöltése" + +msgid "copg_remove_formats" +msgstr "Formázás eltávolítása" + +msgid "copg_sec_link_info" +msgstr "Válassza ki a célt, amire a blokk mutat. Figyelem: Ebben az esetben a blokk nem tartalmazhat további linket!" + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +msgid "copg_snippet_cannot_be_edited" +msgstr "Ez egy előre definiált tartalom-építőelem, ezért itt nem módosítható." + +msgid "copg_templates" +msgstr "Sablonok" + +msgid "copg_unsupported_media_type" +msgstr "Nem támogatott médiatípus." + +msgid "copg_use_template" +msgstr "Sablon használata" + +msgid "copg_x_minutes" +msgstr "%s perc" diff --git a/components/ILIAS/COPage/lang/copg_it.po b/components/ILIAS/COPage/lang/copg_it.po new file mode 100644 index 000000000000..1c333ea94203 --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_it.po @@ -0,0 +1,166 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +msgid "copg_allow_html" +msgstr "Abilita HTML / Javascript" + +msgid "copg_allow_html_info" +msgstr "L'utente può utilizzare il contenuto della pagina HTML o Javascript. Ciò può causare problemi di sicurezza. Non attivare, se le funzionalità possono essere utilizzate dagli utenti che ritieni non attendibili. Il supporto per aggiungere contenuto HTML in questo modo potrebbe essere sospeso in una versione futura." + +msgid "copg_an_error_occured" +msgstr "An error occured." + +msgid "copg_confirm_el_deletion" +msgstr "Vuoi davvero eliminare gli elementi selezionati?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +msgid "copg_page_type_stys" +msgstr "Pagina layout" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +msgid "copg_questions_not_supported_here" +msgstr "Le domande non sono supportate in questo contesto." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +msgid "copg_sec_link_info" +msgstr "Se si imposta un link sul tutta la sezione, bisogna assicurarsi che nessun altro elemento interattivo sia incluso nella sezione. Altrimenti il loro comportamento potrebbe essere errato." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +msgid "copg_snippet_cannot_be_edited" +msgstr "Questo è un frammento di contenuto predefinito e non può essere modificato qui." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_ja.po b/components/ILIAS/COPage/lang/copg_ja.po new file mode 100644 index 000000000000..edf9c9b92266 --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_ja.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: copg\n" + +msgid "copg_active_to_small" +msgstr "この日付は開始日よりも高くする必要があります。" + +msgid "copg_add_content" +msgstr "コンテンツを追加" + +msgid "copg_allow_html" +msgstr "HTML/Javascriptを有効にする" + +msgid "copg_allow_html_info" +msgstr "ユーザはHTMLまたはJavascriptページコンテンツを利用できます。セキュリティ事項に影響する可能性があります。信頼に欠けるユーザによる機能の利用可能性がある場合は有効にしてはいけません。HTMLコンテンツの追加するサポートは将来バージョンで打ち切る可能性があります。" + +msgid "copg_an_error_occured" +msgstr "エラーが発生しました。" + +msgid "copg_confirm_el_deletion" +msgstr "選択の要素を本当に削除しますか?" + +msgid "copg_cron_days" +msgstr "古いページを削除" + +msgid "copg_cron_days_info" +msgstr "この期間よりも古いページ履歴は削除されます。" + +msgid "copg_cron_keep_entries" +msgstr "最少を継続" + +msgid "copg_cron_keep_entries_info" +msgstr "この数字は、削除期間よりも古かった場合に継続される最小エントリーです。" + +msgid "copg_days" +msgstr "日にち" + +msgid "copg_details" +msgstr "詳細" + +msgid "copg_edit_iframe_title" +msgstr "ページエディタのテキスト編集" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +msgid "copg_entries" +msgstr "エントリー" + +msgid "copg_error" +msgstr "Error" + +msgid "copg_error_occured_modal" +msgstr "ページ処理中にエラー発生。保存した状態前に戻るには\"ページの再読み込み\"を押す。" + +msgid "copg_est_reading_time" +msgstr "予測読込み時間" + +msgid "copg_history_cleanup_cron" +msgstr "ページエディター履歴のクリーンアップ" + +msgid "copg_history_cleanup_cron_info" +msgstr "ページ履歴から過去のエントリーを削除" + +msgid "copg_list_item_style" +msgstr "アイテムをリスト" + +msgid "copg_list_style" +msgstr "リスト" + +msgid "copg_list_styles" +msgstr "形式をリスト" + +msgid "copg_more_character_formats" +msgstr "文字用の他のスタイル" + +msgid "copg_obj_types" +msgstr "オブジェクトタイプ" + +msgid "copg_page_element_not_found" +msgstr "ページ要素が見つかりません。" + +msgid "copg_page_type_stys" +msgstr "ページをレイアウト" + +msgid "copg_pages" +msgstr "ページ" + +msgid "copg_par_format_selection" +msgstr "図書式選択" + +msgid "copg_pc_mob_does_not_exist" +msgstr "このメディア オブジェクトは存在しません。" + +msgid "copg_plugin" +msgstr "Plugin" + +msgid "copg_plugin_not_avail" +msgstr "Plugin %s は利用できません" + +msgid "copg_questions_not_supported_here" +msgstr "問題はこのコンテキスト内でサポートされません。" + +msgid "copg_reload_page" +msgstr "ページの再読み込み" + +msgid "copg_remove_formats" +msgstr "書式を削除" + +msgid "copg_sec_link_info" +msgstr "全セクションのリンクを設定するには他のインタラクティブ要素がセクション内に含まれない事を確認して下さい。そうでないと動作が不安定になります。" + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +msgid "copg_snippet_cannot_be_edited" +msgstr "これは事前定義済みコンテンツスニペットなのでここでは編集できません。" + +msgid "copg_templates" +msgstr "テンプレート" + +msgid "copg_unsupported_media_type" +msgstr "このメディアオブジェクトは未サポートのメディアタイプがあります。" + +msgid "copg_use_template" +msgstr "テンプレートを使用" + +msgid "copg_x_minutes" +msgstr "%s 分" diff --git a/components/ILIAS/COPage/lang/copg_ka.po b/components/ILIAS/COPage/lang/copg_ka.po new file mode 100644 index 000000000000..dae0dda2cb8f --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_ka.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +#, fuzzy +msgid "copg_confirm_el_deletion" +msgstr "Do you really want to delete the selected elements?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +#, fuzzy +msgid "copg_questions_not_supported_here" +msgstr "Questions are not supported in this context." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +#, fuzzy +msgid "copg_sec_link_info" +msgstr "If you set a link on the whole section, please ensure that no other interactive elements are included within the section. Otherwise their behaviour may be erratically." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +#, fuzzy +msgid "copg_snippet_cannot_be_edited" +msgstr "This is a predefined content snippet and cannot be edited here." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_lt.po b/components/ILIAS/COPage/lang/copg_lt.po new file mode 100644 index 000000000000..41461f9740ad --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_lt.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +#, fuzzy +msgid "copg_confirm_el_deletion" +msgstr "Do you really want to delete the selected elements?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +#, fuzzy +msgid "copg_questions_not_supported_here" +msgstr "Questions are not supported in this context." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +#, fuzzy +msgid "copg_sec_link_info" +msgstr "If you set a link on the whole section, please ensure that no other interactive elements are included within the section. Otherwise their behaviour may be erratically." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +#, fuzzy +msgid "copg_snippet_cannot_be_edited" +msgstr "This is a predefined content snippet and cannot be edited here." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_nl.po b/components/ILIAS/COPage/lang/copg_nl.po new file mode 100644 index 000000000000..eac30f55000e --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_nl.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +#, fuzzy +msgid "copg_confirm_el_deletion" +msgstr "Do you really want to delete the selected elements?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +#, fuzzy +msgid "copg_questions_not_supported_here" +msgstr "Questions are not supported in this context." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +#, fuzzy +msgid "copg_sec_link_info" +msgstr "If you set a link on the whole section, please ensure that no other interactive elements are included within the section. Otherwise their behaviour may be erratically." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +#, fuzzy +msgid "copg_snippet_cannot_be_edited" +msgstr "This is a predefined content snippet and cannot be edited here." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_pl.po b/components/ILIAS/COPage/lang/copg_pl.po new file mode 100644 index 000000000000..499f23dfe448 --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_pl.po @@ -0,0 +1,173 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +msgid "copg_confirm_el_deletion" +msgstr "Czy na pewno chcesz usunąć wybrane elementy?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +msgid "copg_questions_not_supported_here" +msgstr "W tym kontekście nie obsługiwane są żadne pytania." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +msgid "copg_sec_link_info" +msgstr "Jeśli ustawisz link na całą sekcję, upewnij się, że nie są w niej zawarte żadne inne elementy interaktywne (np. inne linki). Ta funkcja jest gwarantowana." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +msgid "copg_snippet_cannot_be_edited" +msgstr "Jest to wstępnie zdefiniowany moduł treści, którego nie można w tym miejscu edytować." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_pt.po b/components/ILIAS/COPage/lang/copg_pt.po new file mode 100644 index 000000000000..aa91363de322 --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_pt.po @@ -0,0 +1,173 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +msgid "copg_confirm_el_deletion" +msgstr "Tem a certeza que quer apagar os elementos selecionados?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +msgid "copg_questions_not_supported_here" +msgstr "As perguntas não são suportadas neste contexto." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +msgid "copg_sec_link_info" +msgstr "Se definir uma ligação em toda a secção, certifique-se que não está incluído nenhum outro elemento interativo dentro da secção. Caso contrário, o respetivo comportamento pode ser irregular." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +msgid "copg_snippet_cannot_be_edited" +msgstr "Este é um fragmento conteúdo predefinido e não pode ser editado aqui." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_ro.po b/components/ILIAS/COPage/lang/copg_ro.po new file mode 100644 index 000000000000..a19d86a1a290 --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_ro.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +#, fuzzy +msgid "copg_confirm_el_deletion" +msgstr "Do you really want to delete the selected elements?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +#, fuzzy +msgid "copg_questions_not_supported_here" +msgstr "Questions are not supported in this context." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +#, fuzzy +msgid "copg_sec_link_info" +msgstr "If you set a link on the whole section, please ensure that no other interactive elements are included within the section. Otherwise their behaviour may be erratically." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +#, fuzzy +msgid "copg_snippet_cannot_be_edited" +msgstr "This is a predefined content snippet and cannot be edited here." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_ru.po b/components/ILIAS/COPage/lang/copg_ru.po new file mode 100644 index 000000000000..d7ef46086e09 --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_ru.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +#, fuzzy +msgid "copg_confirm_el_deletion" +msgstr "Do you really want to delete the selected elements?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +#, fuzzy +msgid "copg_questions_not_supported_here" +msgstr "Questions are not supported in this context." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +#, fuzzy +msgid "copg_sec_link_info" +msgstr "If you set a link on the whole section, please ensure that no other interactive elements are included within the section. Otherwise their behaviour may be erratically." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +#, fuzzy +msgid "copg_snippet_cannot_be_edited" +msgstr "This is a predefined content snippet and cannot be edited here." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_sk.po b/components/ILIAS/COPage/lang/copg_sk.po new file mode 100644 index 000000000000..c9b922140214 --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_sk.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +#, fuzzy +msgid "copg_confirm_el_deletion" +msgstr "Do you really want to delete the selected elements?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +#, fuzzy +msgid "copg_questions_not_supported_here" +msgstr "Questions are not supported in this context." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +#, fuzzy +msgid "copg_sec_link_info" +msgstr "If you set a link on the whole section, please ensure that no other interactive elements are included within the section. Otherwise their behaviour may be erratically." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +#, fuzzy +msgid "copg_snippet_cannot_be_edited" +msgstr "This is a predefined content snippet and cannot be edited here." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_sl.po b/components/ILIAS/COPage/lang/copg_sl.po new file mode 100644 index 000000000000..ecf06a535c9a --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_sl.po @@ -0,0 +1,170 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +msgid "copg_confirm_el_deletion" +msgstr "Ali res želite izbrisati izbrane elemente?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +msgid "copg_questions_not_supported_here" +msgstr "Vprašanja v tem kontekstu niso podprta." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +msgid "copg_sec_link_info" +msgstr "Če ustvarite povezavo do celotnega bloka, se prepričajte, da ta ne vsebuje nadaljnjih interaktivnih elementov (npr. drugih povezav). Njihovo delovanje ni zagotovljeno." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +msgid "copg_snippet_cannot_be_edited" +msgstr "To je vnaprej določen sestavni del vsebine, ki ga na tem mestu ni mogoče urejati." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_sq.po b/components/ILIAS/COPage/lang/copg_sq.po new file mode 100644 index 000000000000..c7dd3f484f58 --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_sq.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +#, fuzzy +msgid "copg_confirm_el_deletion" +msgstr "Do you really want to delete the selected elements?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +#, fuzzy +msgid "copg_questions_not_supported_here" +msgstr "Questions are not supported in this context." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +#, fuzzy +msgid "copg_sec_link_info" +msgstr "If you set a link on the whole section, please ensure that no other interactive elements are included within the section. Otherwise their behaviour may be erratically." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +#, fuzzy +msgid "copg_snippet_cannot_be_edited" +msgstr "This is a predefined content snippet and cannot be edited here." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_sr.po b/components/ILIAS/COPage/lang/copg_sr.po new file mode 100644 index 000000000000..cca4860c592b --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_sr.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +#, fuzzy +msgid "copg_confirm_el_deletion" +msgstr "Do you really want to delete the selected elements?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +#, fuzzy +msgid "copg_questions_not_supported_here" +msgstr "Questions are not supported in this context." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +#, fuzzy +msgid "copg_sec_link_info" +msgstr "If you set a link on the whole section, please ensure that no other interactive elements are included within the section. Otherwise their behaviour may be erratically." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +#, fuzzy +msgid "copg_snippet_cannot_be_edited" +msgstr "This is a predefined content snippet and cannot be edited here." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_sv.po b/components/ILIAS/COPage/lang/copg_sv.po new file mode 100644 index 000000000000..195f0ca54444 --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_sv.po @@ -0,0 +1,154 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +msgid "copg_allow_html" +msgstr "Tillåt HTML/Javascript" + +msgid "copg_allow_html_info" +msgstr "Användare kan använda HTML eller Javascript i sidinnehåll. Detta kan leda till säkerhetsproblem. Du bör endast aktivera denna funktion för komponenter som används av betrodda användare. Möjligheten att inkludera HTML på detta sätt kan komma att tas bort" + +msgid "copg_an_error_occured" +msgstr "Tyvärr har ett problem uppstått." + +msgid "copg_confirm_el_deletion" +msgstr "Vill du verkligen ta bort de markerade objekten?" + +msgid "copg_cron_days" +msgstr "Radera poster som är äldre än x" + +msgid "copg_cron_days_info" +msgstr "Raderar poster från historiken som är äldre än den angivna perioden." + +msgid "copg_cron_keep_entries" +msgstr "Minsta antal bidrag" + +msgid "copg_cron_keep_entries_info" +msgstr "Detta antal poster sparas i historiken, även om de är äldre än den angivna perioden." + +msgid "copg_days" +msgstr "dagar" + +msgid "copg_details" +msgstr "Detaljer" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +msgid "copg_entries" +msgstr "Inträden" + +msgid "copg_error" +msgstr "Problem" + +msgid "copg_error_occured_modal" +msgstr "Tyvärr, ett fel har uppstått. Tryck på \"Ladda om sidan\" för att återgå till det senast sparade innehållet." + +msgid "copg_est_reading_time" +msgstr "Uppskattad lästid" + +msgid "copg_history_cleanup_cron" +msgstr "Page Editor Historik rensning" + +msgid "copg_history_cleanup_cron_info" +msgstr " Raderar äldre poster från sidredigerarens historik." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +msgid "copg_page_element_not_found" +msgstr " Okänt sidelement." + +msgid "copg_page_type_stys" +msgstr "Sidans layout" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +msgid "copg_questions_not_supported_here" +msgstr "Inga frågor stöds i detta sammanhang." + +msgid "copg_reload_page" +msgstr "Reload sida" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +msgid "copg_sec_link_info" +msgstr "Välj en destination för länkning av blocket. Uppmärksamhet" + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +msgid "copg_snippet_cannot_be_edited" +msgstr "Detta är en fördefinierad innehållsmodul som inte kan redigeras just nu." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +msgid "copg_x_minutes" +msgstr "%s minut(er)" diff --git a/components/ILIAS/COPage/lang/copg_tr.po b/components/ILIAS/COPage/lang/copg_tr.po new file mode 100644 index 000000000000..a86444f42e05 --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_tr.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +#, fuzzy +msgid "copg_confirm_el_deletion" +msgstr "Do you really want to delete the selected elements?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +#, fuzzy +msgid "copg_questions_not_supported_here" +msgstr "Questions are not supported in this context." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +#, fuzzy +msgid "copg_sec_link_info" +msgstr "If you set a link on the whole section, please ensure that no other interactive elements are included within the section. Otherwise their behaviour may be erratically." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +#, fuzzy +msgid "copg_snippet_cannot_be_edited" +msgstr "This is a predefined content snippet and cannot be edited here." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_uk.po b/components/ILIAS/COPage/lang/copg_uk.po new file mode 100644 index 000000000000..c8428b6df289 --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_uk.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +#, fuzzy +msgid "copg_confirm_el_deletion" +msgstr "Do you really want to delete the selected elements?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +#, fuzzy +msgid "copg_questions_not_supported_here" +msgstr "Questions are not supported in this context." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +#, fuzzy +msgid "copg_sec_link_info" +msgstr "If you set a link on the whole section, please ensure that no other interactive elements are included within the section. Otherwise their behaviour may be erratically." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +#, fuzzy +msgid "copg_snippet_cannot_be_edited" +msgstr "This is a predefined content snippet and cannot be edited here." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_vi.po b/components/ILIAS/COPage/lang/copg_vi.po new file mode 100644 index 000000000000..714ece1fa9ec --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_vi.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +#, fuzzy +msgid "copg_confirm_el_deletion" +msgstr "Do you really want to delete the selected elements?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +#, fuzzy +msgid "copg_questions_not_supported_here" +msgstr "Questions are not supported in this context." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +#, fuzzy +msgid "copg_sec_link_info" +msgstr "If you set a link on the whole section, please ensure that no other interactive elements are included within the section. Otherwise their behaviour may be erratically." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +#, fuzzy +msgid "copg_snippet_cannot_be_edited" +msgstr "This is a predefined content snippet and cannot be edited here." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/copg_zh.po b/components/ILIAS/COPage/lang/copg_zh.po new file mode 100644 index 000000000000..170a147ecc04 --- /dev/null +++ b/components/ILIAS/COPage/lang/copg_zh.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: copg\n" + +#, fuzzy +msgid "copg_active_to_small" +msgstr "This date must be higher than the starting date." + +#, fuzzy +msgid "copg_add_content" +msgstr "Add Content" + +#, fuzzy +msgid "copg_allow_html" +msgstr "Enable HTML/Javascript" + +#, fuzzy +msgid "copg_allow_html_info" +msgstr "User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version." + +#, fuzzy +msgid "copg_an_error_occured" +msgstr "An error occured." + +#, fuzzy +msgid "copg_confirm_el_deletion" +msgstr "Do you really want to delete the selected elements?" + +#, fuzzy +msgid "copg_cron_days" +msgstr "Delete pages older than" + +#, fuzzy +msgid "copg_cron_days_info" +msgstr "Page history entries older than this period will be deleted." + +#, fuzzy +msgid "copg_cron_keep_entries" +msgstr "Keep Minimum" + +#, fuzzy +msgid "copg_cron_keep_entries_info" +msgstr "This number is the minimum of entries that will be kept, even if they are older than the deletion period." + +#, fuzzy +msgid "copg_days" +msgstr "Days" + +#, fuzzy +msgid "copg_details" +msgstr "Details" + +#, fuzzy +msgid "copg_edit_iframe_title" +msgstr "Text Editing of Page Editor" + +#, fuzzy +msgid "copg_edit_style_class" +msgstr "Edit Style Class" + +#, fuzzy +msgid "copg_entries" +msgstr "Entries" + +#, fuzzy +msgid "copg_error" +msgstr "Error" + +#, fuzzy +msgid "copg_error_occured_modal" +msgstr "An error occured while processing the page. Hit \"Reload Page\" to return to the previously saved state." + +#, fuzzy +msgid "copg_est_reading_time" +msgstr "Estimated Reading Time" + +#, fuzzy +msgid "copg_history_cleanup_cron" +msgstr "Page Editor History Cleanup" + +#, fuzzy +msgid "copg_history_cleanup_cron_info" +msgstr "Removes older entries from the page history." + +#, fuzzy +msgid "copg_list_item_style" +msgstr "List Item" + +#, fuzzy +msgid "copg_list_style" +msgstr "List" + +#, fuzzy +msgid "copg_list_styles" +msgstr "List Formats" + +#, fuzzy +msgid "copg_more_character_formats" +msgstr "More Styles for Characters" + +#, fuzzy +msgid "copg_obj_types" +msgstr "Object Types" + +#, fuzzy +msgid "copg_page_element_not_found" +msgstr "Page element not found." + +#, fuzzy +msgid "copg_page_type_stys" +msgstr "Layout Page" + +#, fuzzy +msgid "copg_pages" +msgstr "Pages" + +#, fuzzy +msgid "copg_par_format_selection" +msgstr "Paragraph Format Selection" + +#, fuzzy +msgid "copg_pc_mob_does_not_exist" +msgstr "This media object does not exist." + +#, fuzzy +msgid "copg_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "copg_plugin_not_avail" +msgstr "Plugin %s not available." + +#, fuzzy +msgid "copg_questions_not_supported_here" +msgstr "Questions are not supported in this context." + +#, fuzzy +msgid "copg_reload_page" +msgstr "Reload Page" + +#, fuzzy +msgid "copg_remove_formats" +msgstr "Remove Formatting" + +#, fuzzy +msgid "copg_sec_link_info" +msgstr "If you set a link on the whole section, please ensure that no other interactive elements are included within the section. Otherwise their behaviour may be erratically." + +#, fuzzy +msgid "copg_select_two_versions" +msgstr "Select exactly two versions of the page to compare." + +#, fuzzy +msgid "copg_snippet_cannot_be_edited" +msgstr "This is a predefined content snippet and cannot be edited here." + +#, fuzzy +msgid "copg_templates" +msgstr "Templates" + +#, fuzzy +msgid "copg_unsupported_media_type" +msgstr "This media object has an unsupported media type." + +#, fuzzy +msgid "copg_use_template" +msgstr "Use Template" + +#, fuzzy +msgid "copg_x_minutes" +msgstr "%s minute(s)" diff --git a/components/ILIAS/COPage/lang/link.pot b/components/ILIAS/COPage/lang/link.pot new file mode 100644 index 000000000000..8733dc5a773e --- /dev/null +++ b/components/ILIAS/COPage/lang/link.pot @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: link\n" + +msgid "link_chapters" +msgstr "" + +msgid "link_link" +msgstr "" + +msgid "link_mobs" +msgstr "" + +msgid "link_terms" +msgstr "" + +msgid "link_wpages" +msgstr "" diff --git a/components/ILIAS/COPage/lang/link_ar.po b/components/ILIAS/COPage/lang/link_ar.po new file mode 100644 index 000000000000..c874c749a65f --- /dev/null +++ b/components/ILIAS/COPage/lang/link_ar.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: link\n" + +#, fuzzy +msgid "link_chapters" +msgstr "Chapters" + +#, fuzzy +msgid "link_link" +msgstr "Link" + +#, fuzzy +msgid "link_mobs" +msgstr "Media Objects" + +#, fuzzy +msgid "link_terms" +msgstr "Terms" + +#, fuzzy +msgid "link_wpages" +msgstr "Wiki Pages" diff --git a/components/ILIAS/COPage/lang/link_bg.po b/components/ILIAS/COPage/lang/link_bg.po new file mode 100644 index 000000000000..66d703ecbfd2 --- /dev/null +++ b/components/ILIAS/COPage/lang/link_bg.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: link\n" + +#, fuzzy +msgid "link_chapters" +msgstr "Chapters" + +#, fuzzy +msgid "link_link" +msgstr "Link" + +#, fuzzy +msgid "link_mobs" +msgstr "Media Objects" + +#, fuzzy +msgid "link_terms" +msgstr "Terms" + +#, fuzzy +msgid "link_wpages" +msgstr "Wiki Pages" diff --git a/components/ILIAS/COPage/lang/link_cs.po b/components/ILIAS/COPage/lang/link_cs.po new file mode 100644 index 000000000000..2375f84828d3 --- /dev/null +++ b/components/ILIAS/COPage/lang/link_cs.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: link\n" + +msgid "link_chapters" +msgstr "Kapitoly" + +msgid "link_link" +msgstr "Odkaz" + +msgid "link_mobs" +msgstr "Mediální objekty" + +msgid "link_terms" +msgstr "Podmínky" + +msgid "link_wpages" +msgstr "Stránky Wiki" diff --git a/components/ILIAS/COPage/lang/link_da.po b/components/ILIAS/COPage/lang/link_da.po new file mode 100644 index 000000000000..c5357b4a03fe --- /dev/null +++ b/components/ILIAS/COPage/lang/link_da.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: link\n" + +#, fuzzy +msgid "link_chapters" +msgstr "Chapters" + +#, fuzzy +msgid "link_link" +msgstr "Link" + +#, fuzzy +msgid "link_mobs" +msgstr "Media Objects" + +#, fuzzy +msgid "link_terms" +msgstr "Terms" + +#, fuzzy +msgid "link_wpages" +msgstr "Wiki Pages" diff --git a/components/ILIAS/COPage/lang/link_de.po b/components/ILIAS/COPage/lang/link_de.po new file mode 100644 index 000000000000..98d0e0463980 --- /dev/null +++ b/components/ILIAS/COPage/lang/link_de.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: link\n" + +msgid "link_chapters" +msgstr "Kapitel" + +msgid "link_link" +msgstr "Link" + +msgid "link_mobs" +msgstr "Medienobjekte" + +msgid "link_terms" +msgstr "Begriffe" + +msgid "link_wpages" +msgstr "Wikiseiten" diff --git a/components/ILIAS/COPage/lang/link_el.po b/components/ILIAS/COPage/lang/link_el.po new file mode 100644 index 000000000000..a63f9ceb2fde --- /dev/null +++ b/components/ILIAS/COPage/lang/link_el.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: link\n" + +#, fuzzy +msgid "link_chapters" +msgstr "Chapters" + +#, fuzzy +msgid "link_link" +msgstr "Link" + +#, fuzzy +msgid "link_mobs" +msgstr "Media Objects" + +#, fuzzy +msgid "link_terms" +msgstr "Terms" + +#, fuzzy +msgid "link_wpages" +msgstr "Wiki Pages" diff --git a/components/ILIAS/COPage/lang/link_en.po b/components/ILIAS/COPage/lang/link_en.po new file mode 100644 index 000000000000..6d961d31bf7f --- /dev/null +++ b/components/ILIAS/COPage/lang/link_en.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: link\n" + +msgid "link_chapters" +msgstr "Chapters" + +msgid "link_link" +msgstr "Link" + +msgid "link_mobs" +msgstr "Media Objects" + +msgid "link_terms" +msgstr "Terms" + +msgid "link_wpages" +msgstr "Wiki Pages" diff --git a/components/ILIAS/COPage/lang/link_es.po b/components/ILIAS/COPage/lang/link_es.po new file mode 100644 index 000000000000..7044a7b3dfc7 --- /dev/null +++ b/components/ILIAS/COPage/lang/link_es.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: link\n" + +msgid "link_chapters" +msgstr "Capítulos" + +msgid "link_link" +msgstr "Enlace" + +msgid "link_mobs" +msgstr "Objetos multimedia" + +msgid "link_terms" +msgstr "Términos" + +msgid "link_wpages" +msgstr "Páginas de Wiki" diff --git a/components/ILIAS/COPage/lang/link_et.po b/components/ILIAS/COPage/lang/link_et.po new file mode 100644 index 000000000000..4a2b36b64347 --- /dev/null +++ b/components/ILIAS/COPage/lang/link_et.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: link\n" + +msgid "link_chapters" +msgstr "Chapters" + +#, fuzzy +msgid "link_link" +msgstr "Link" + +msgid "link_mobs" +msgstr "Media Objects" + +msgid "link_terms" +msgstr "Terms" + +msgid "link_wpages" +msgstr "Wiki Pages" diff --git a/components/ILIAS/COPage/lang/link_fa.po b/components/ILIAS/COPage/lang/link_fa.po new file mode 100644 index 000000000000..4921d72ab495 --- /dev/null +++ b/components/ILIAS/COPage/lang/link_fa.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: link\n" + +#, fuzzy +msgid "link_chapters" +msgstr "Chapters" + +#, fuzzy +msgid "link_link" +msgstr "Link" + +#, fuzzy +msgid "link_mobs" +msgstr "Media Objects" + +#, fuzzy +msgid "link_terms" +msgstr "Terms" + +#, fuzzy +msgid "link_wpages" +msgstr "Wiki Pages" diff --git a/components/ILIAS/COPage/lang/link_fr.po b/components/ILIAS/COPage/lang/link_fr.po new file mode 100644 index 000000000000..640b1a345f13 --- /dev/null +++ b/components/ILIAS/COPage/lang/link_fr.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: link\n" + +msgid "link_chapters" +msgstr "Chapitres" + +msgid "link_link" +msgstr "Lien" + +msgid "link_mobs" +msgstr "Objets média" + +msgid "link_terms" +msgstr "Termes" + +msgid "link_wpages" +msgstr "Pages Wiki" diff --git a/components/ILIAS/COPage/lang/link_hr.po b/components/ILIAS/COPage/lang/link_hr.po new file mode 100644 index 000000000000..7d832dedf48b --- /dev/null +++ b/components/ILIAS/COPage/lang/link_hr.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: link\n" + +msgid "link_chapters" +msgstr "Poglavlja" + +msgid "link_link" +msgstr "Poveznica" + +msgid "link_mobs" +msgstr "Medijski objekti" + +msgid "link_terms" +msgstr "Pojmovi" + +msgid "link_wpages" +msgstr "Wiki stranice" diff --git a/components/ILIAS/COPage/lang/link_hu.po b/components/ILIAS/COPage/lang/link_hu.po new file mode 100644 index 000000000000..39a01bf4d0d0 --- /dev/null +++ b/components/ILIAS/COPage/lang/link_hu.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: link\n" + +msgid "link_chapters" +msgstr "Fejezetek" + +msgid "link_link" +msgstr "Link" + +msgid "link_mobs" +msgstr "Médiaobjektumok" + +msgid "link_terms" +msgstr "Fogalmak" + +msgid "link_wpages" +msgstr "Wiki oldalak" diff --git a/components/ILIAS/COPage/lang/link_it.po b/components/ILIAS/COPage/lang/link_it.po new file mode 100644 index 000000000000..84fe1a49df6c --- /dev/null +++ b/components/ILIAS/COPage/lang/link_it.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: link\n" + +msgid "link_chapters" +msgstr "Capitoli" + +msgid "link_link" +msgstr "Collegamento" + +msgid "link_mobs" +msgstr "Oggetti multimediali" + +msgid "link_terms" +msgstr "Termini" + +msgid "link_wpages" +msgstr "Pagine Wiki" diff --git a/components/ILIAS/COPage/lang/link_ja.po b/components/ILIAS/COPage/lang/link_ja.po new file mode 100644 index 000000000000..a6d1440bb01f --- /dev/null +++ b/components/ILIAS/COPage/lang/link_ja.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: link\n" + +msgid "link_chapters" +msgstr "章" + +msgid "link_link" +msgstr "リンク" + +msgid "link_mobs" +msgstr "メディアオブジェクト" + +msgid "link_terms" +msgstr "用語" + +msgid "link_wpages" +msgstr "Wiki Pages" diff --git a/components/ILIAS/COPage/lang/link_ka.po b/components/ILIAS/COPage/lang/link_ka.po new file mode 100644 index 000000000000..061452bd40bf --- /dev/null +++ b/components/ILIAS/COPage/lang/link_ka.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: link\n" + +#, fuzzy +msgid "link_chapters" +msgstr "Chapters" + +#, fuzzy +msgid "link_link" +msgstr "Link" + +#, fuzzy +msgid "link_mobs" +msgstr "Media Objects" + +#, fuzzy +msgid "link_terms" +msgstr "Terms" + +#, fuzzy +msgid "link_wpages" +msgstr "Wiki Pages" diff --git a/components/ILIAS/COPage/lang/link_lt.po b/components/ILIAS/COPage/lang/link_lt.po new file mode 100644 index 000000000000..c854fe715c36 --- /dev/null +++ b/components/ILIAS/COPage/lang/link_lt.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: link\n" + +#, fuzzy +msgid "link_chapters" +msgstr "Chapters" + +#, fuzzy +msgid "link_link" +msgstr "Link" + +#, fuzzy +msgid "link_mobs" +msgstr "Media Objects" + +#, fuzzy +msgid "link_terms" +msgstr "Terms" + +#, fuzzy +msgid "link_wpages" +msgstr "Wiki Pages" diff --git a/components/ILIAS/COPage/lang/link_nl.po b/components/ILIAS/COPage/lang/link_nl.po new file mode 100644 index 000000000000..5659e87261d9 --- /dev/null +++ b/components/ILIAS/COPage/lang/link_nl.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: link\n" + +msgid "link_chapters" +msgstr "Hoofstukken" + +#, fuzzy +msgid "link_link" +msgstr "Link" + +msgid "link_mobs" +msgstr "Media Objecten" + +msgid "link_terms" +msgstr "Vakterm" + +msgid "link_wpages" +msgstr "Wiki Pagina's" diff --git a/components/ILIAS/COPage/lang/link_pl.po b/components/ILIAS/COPage/lang/link_pl.po new file mode 100644 index 000000000000..5e2f53220e20 --- /dev/null +++ b/components/ILIAS/COPage/lang/link_pl.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: link\n" + +msgid "link_chapters" +msgstr "Rozdziały" + +msgid "link_link" +msgstr "Link" + +msgid "link_mobs" +msgstr "Obiekty multimedialne" + +msgid "link_terms" +msgstr "Terminy" + +msgid "link_wpages" +msgstr "Strony Wiki" diff --git a/components/ILIAS/COPage/lang/link_pt.po b/components/ILIAS/COPage/lang/link_pt.po new file mode 100644 index 000000000000..e2be54a0ac54 --- /dev/null +++ b/components/ILIAS/COPage/lang/link_pt.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: link\n" + +msgid "link_chapters" +msgstr "Capítulos" + +msgid "link_link" +msgstr "Link" + +msgid "link_mobs" +msgstr "Objetos de media" + +msgid "link_terms" +msgstr "Termos" + +msgid "link_wpages" +msgstr "Páginas wiki" diff --git a/components/ILIAS/COPage/lang/link_ro.po b/components/ILIAS/COPage/lang/link_ro.po new file mode 100644 index 000000000000..cbbf1f0dc3ea --- /dev/null +++ b/components/ILIAS/COPage/lang/link_ro.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: link\n" + +#, fuzzy +msgid "link_chapters" +msgstr "Chapters" + +#, fuzzy +msgid "link_link" +msgstr "Link" + +#, fuzzy +msgid "link_mobs" +msgstr "Media Objects" + +#, fuzzy +msgid "link_terms" +msgstr "Terms" + +#, fuzzy +msgid "link_wpages" +msgstr "Wiki Pages" diff --git a/components/ILIAS/COPage/lang/link_ru.po b/components/ILIAS/COPage/lang/link_ru.po new file mode 100644 index 000000000000..1d6e2fcfa83b --- /dev/null +++ b/components/ILIAS/COPage/lang/link_ru.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: link\n" + +#, fuzzy +msgid "link_chapters" +msgstr "Chapters" + +#, fuzzy +msgid "link_link" +msgstr "Link" + +#, fuzzy +msgid "link_mobs" +msgstr "Media Objects" + +#, fuzzy +msgid "link_terms" +msgstr "Terms" + +#, fuzzy +msgid "link_wpages" +msgstr "Wiki Pages" diff --git a/components/ILIAS/COPage/lang/link_sk.po b/components/ILIAS/COPage/lang/link_sk.po new file mode 100644 index 000000000000..a7e6941e7e88 --- /dev/null +++ b/components/ILIAS/COPage/lang/link_sk.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: link\n" + +#, fuzzy +msgid "link_chapters" +msgstr "Chapters" + +#, fuzzy +msgid "link_link" +msgstr "Link" + +#, fuzzy +msgid "link_mobs" +msgstr "Media Objects" + +#, fuzzy +msgid "link_terms" +msgstr "Terms" + +#, fuzzy +msgid "link_wpages" +msgstr "Wiki Pages" diff --git a/components/ILIAS/COPage/lang/link_sl.po b/components/ILIAS/COPage/lang/link_sl.po new file mode 100644 index 000000000000..7814b3c12763 --- /dev/null +++ b/components/ILIAS/COPage/lang/link_sl.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: link\n" + +msgid "link_chapters" +msgstr "Poglavje" + +msgid "link_link" +msgstr "Povezava" + +msgid "link_mobs" +msgstr "Medijski objekti" + +msgid "link_terms" +msgstr "Pojmi" + +msgid "link_wpages" +msgstr "Strani Wiki" diff --git a/components/ILIAS/COPage/lang/link_sq.po b/components/ILIAS/COPage/lang/link_sq.po new file mode 100644 index 000000000000..8279970b63cf --- /dev/null +++ b/components/ILIAS/COPage/lang/link_sq.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: link\n" + +#, fuzzy +msgid "link_chapters" +msgstr "Chapters" + +#, fuzzy +msgid "link_link" +msgstr "Link" + +#, fuzzy +msgid "link_mobs" +msgstr "Media Objects" + +#, fuzzy +msgid "link_terms" +msgstr "Terms" + +#, fuzzy +msgid "link_wpages" +msgstr "Wiki Pages" diff --git a/components/ILIAS/COPage/lang/link_sr.po b/components/ILIAS/COPage/lang/link_sr.po new file mode 100644 index 000000000000..d49160228034 --- /dev/null +++ b/components/ILIAS/COPage/lang/link_sr.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: link\n" + +#, fuzzy +msgid "link_chapters" +msgstr "Chapters" + +#, fuzzy +msgid "link_link" +msgstr "Link" + +#, fuzzy +msgid "link_mobs" +msgstr "Media Objects" + +#, fuzzy +msgid "link_terms" +msgstr "Terms" + +#, fuzzy +msgid "link_wpages" +msgstr "Wiki Pages" diff --git a/components/ILIAS/COPage/lang/link_sv.po b/components/ILIAS/COPage/lang/link_sv.po new file mode 100644 index 000000000000..08a97db79e99 --- /dev/null +++ b/components/ILIAS/COPage/lang/link_sv.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: link\n" + +msgid "link_chapters" +msgstr "Kapitel" + +msgid "link_link" +msgstr "Länk" + +msgid "link_mobs" +msgstr "Medieobjekt" + +msgid "link_terms" +msgstr "Termer" + +msgid "link_wpages" +msgstr "Wiki-sidor" diff --git a/components/ILIAS/COPage/lang/link_tr.po b/components/ILIAS/COPage/lang/link_tr.po new file mode 100644 index 000000000000..d5cd57aa41ca --- /dev/null +++ b/components/ILIAS/COPage/lang/link_tr.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: link\n" + +#, fuzzy +msgid "link_chapters" +msgstr "Chapters" + +#, fuzzy +msgid "link_link" +msgstr "Link" + +#, fuzzy +msgid "link_mobs" +msgstr "Media Objects" + +#, fuzzy +msgid "link_terms" +msgstr "Terms" + +#, fuzzy +msgid "link_wpages" +msgstr "Wiki Pages" diff --git a/components/ILIAS/COPage/lang/link_uk.po b/components/ILIAS/COPage/lang/link_uk.po new file mode 100644 index 000000000000..467580f004fc --- /dev/null +++ b/components/ILIAS/COPage/lang/link_uk.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: link\n" + +#, fuzzy +msgid "link_chapters" +msgstr "Chapters" + +#, fuzzy +msgid "link_link" +msgstr "Link" + +#, fuzzy +msgid "link_mobs" +msgstr "Media Objects" + +#, fuzzy +msgid "link_terms" +msgstr "Terms" + +#, fuzzy +msgid "link_wpages" +msgstr "Wiki Pages" diff --git a/components/ILIAS/COPage/lang/link_vi.po b/components/ILIAS/COPage/lang/link_vi.po new file mode 100644 index 000000000000..45d4d05ed098 --- /dev/null +++ b/components/ILIAS/COPage/lang/link_vi.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: link\n" + +#, fuzzy +msgid "link_chapters" +msgstr "Chapters" + +#, fuzzy +msgid "link_link" +msgstr "Link" + +#, fuzzy +msgid "link_mobs" +msgstr "Media Objects" + +#, fuzzy +msgid "link_terms" +msgstr "Terms" + +#, fuzzy +msgid "link_wpages" +msgstr "Wiki Pages" diff --git a/components/ILIAS/COPage/lang/link_zh.po b/components/ILIAS/COPage/lang/link_zh.po new file mode 100644 index 000000000000..bb4fb12f2062 --- /dev/null +++ b/components/ILIAS/COPage/lang/link_zh.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: link\n" + +#, fuzzy +msgid "link_chapters" +msgstr "Chapters" + +#, fuzzy +msgid "link_link" +msgstr "Link" + +#, fuzzy +msgid "link_mobs" +msgstr "Media Objects" + +#, fuzzy +msgid "link_terms" +msgstr "Terms" + +#, fuzzy +msgid "link_wpages" +msgstr "Wiki Pages" diff --git a/components/ILIAS/Certificate/tests/ilCertificateDateHelperTest.php b/components/ILIAS/Certificate/tests/ilCertificateDateHelperTest.php index 516aae78b4c1..cf8941f1c3e5 100644 --- a/components/ILIAS/Certificate/tests/ilCertificateDateHelperTest.php +++ b/components/ILIAS/Certificate/tests/ilCertificateDateHelperTest.php @@ -333,7 +333,7 @@ private function mockUserLanguageGerman(): void $ilDB->method('query')->willReturnCallback(function ($query): ilDBStatement { $statement = $this->createMock(ilDBStatement::class); - if (str_contains($query, 'SELECT * FROM lng_modules')) { + if (str_contains($query, 'FROM lng_modules')) { $statement->method('numRows')->willReturn(1); $statement->method('fetchRow')->willReturn([ 'lang_array' => serialize([ diff --git a/components/ILIAS/CmiXapi/CmiXapi.php b/components/ILIAS/CmiXapi/CmiXapi.php index 6b7458feab53..fd126f61b8a6 100644 --- a/components/ILIAS/CmiXapi/CmiXapi.php +++ b/components/ILIAS/CmiXapi/CmiXapi.php @@ -20,6 +20,9 @@ namespace ILIAS; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; + class CmiXapi implements Component\Component { public function init( @@ -44,5 +47,9 @@ public function init( $contribute[Component\Resource\PublicAsset::class] = fn() => new Component\Resource\Endpoint($this, "xapiexit.php"); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'cmxv' + ); } } diff --git a/components/ILIAS/CmiXapi/lang/cmxv.pot b/components/ILIAS/CmiXapi/lang/cmxv.pot new file mode 100644 index 000000000000..a3a9a91e0bc7 --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv.pot @@ -0,0 +1,12 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: cmxv\n" + +msgid "cmxv_create" +msgstr "" + +msgid "cmxv_create_info" +msgstr "" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_ar.po b/components/ILIAS/CmiXapi/lang/cmxv_ar.po new file mode 100644 index 000000000000..200055800fc2 --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_ar.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: cmxv\n" + +#, fuzzy +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +#, fuzzy +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_bg.po b/components/ILIAS/CmiXapi/lang/cmxv_bg.po new file mode 100644 index 000000000000..00a9e3fddb67 --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_bg.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmxv\n" + +msgid "cmxv_create" +msgstr "Създаване на сертификат за обект xAPI/cmi5" + +msgid "cmxv_create_info" +msgstr "Изберете завършен обект xAPI/cmi5, за да генерирате сертификат за него" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_cs.po b/components/ILIAS/CmiXapi/lang/cmxv_cs.po new file mode 100644 index 000000000000..0342b33d9660 --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_cs.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: cmxv\n" + +#, fuzzy +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +#, fuzzy +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_da.po b/components/ILIAS/CmiXapi/lang/cmxv_da.po new file mode 100644 index 000000000000..dcec4c0c5ffa --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_da.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmxv\n" + +#, fuzzy +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +#, fuzzy +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_de.po b/components/ILIAS/CmiXapi/lang/cmxv_de.po new file mode 100644 index 000000000000..1bf3243d9847 --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_de.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmxv\n" + +msgid "cmxv_create" +msgstr "Zertifikat für xAPI/cmi5-Objekt erstellen" + +msgid "cmxv_create_info" +msgstr "Wählen Sie ein abgeschlossenes xAPI/cmi5-Objekt aus, um ein Zertifikat dafür zu generieren." diff --git a/components/ILIAS/CmiXapi/lang/cmxv_el.po b/components/ILIAS/CmiXapi/lang/cmxv_el.po new file mode 100644 index 000000000000..f69ee6afa961 --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_el.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmxv\n" + +#, fuzzy +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +#, fuzzy +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_en.po b/components/ILIAS/CmiXapi/lang/cmxv_en.po new file mode 100644 index 000000000000..31f3671b6dc5 --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_en.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmxv\n" + +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_es.po b/components/ILIAS/CmiXapi/lang/cmxv_es.po new file mode 100644 index 000000000000..1c140a0bd54e --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_es.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: cmxv\n" + +msgid "cmxv_create" +msgstr "Crear certificado para objeto xAPI/cmi5" + +msgid "cmxv_create_info" +msgstr "Seleccione un objeto xAPI/cmi5 finalizado para generar un certificado para el mismo" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_et.po b/components/ILIAS/CmiXapi/lang/cmxv_et.po new file mode 100644 index 000000000000..c8f3c69c8264 --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_et.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmxv\n" + +#, fuzzy +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +#, fuzzy +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_fa.po b/components/ILIAS/CmiXapi/lang/cmxv_fa.po new file mode 100644 index 000000000000..b93994c37579 --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_fa.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: cmxv\n" + +#, fuzzy +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +#, fuzzy +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_fr.po b/components/ILIAS/CmiXapi/lang/cmxv_fr.po new file mode 100644 index 000000000000..da2ab2c64d9b --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_fr.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: cmxv\n" + +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_hr.po b/components/ILIAS/CmiXapi/lang/cmxv_hr.po new file mode 100644 index 000000000000..0a5c1e836fc0 --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_hr.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cmxv\n" + +#, fuzzy +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +#, fuzzy +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_hu.po b/components/ILIAS/CmiXapi/lang/cmxv_hu.po new file mode 100644 index 000000000000..575785d8ceba --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_hu.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmxv\n" + +msgid "cmxv_create" +msgstr "Tanúsítvány létrehozása a xAPI/cmi5-objektumhoz" + +msgid "cmxv_create_info" +msgstr "Válassza ki a teljesített xAPI/cmi5-objektumot, melyhez tanúsítványt kíván generálni" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_it.po b/components/ILIAS/CmiXapi/lang/cmxv_it.po new file mode 100644 index 000000000000..11e78c5df9bd --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_it.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: cmxv\n" + +msgid "cmxv_create" +msgstr "Crea certificato per l'oggetto xAPI/cmi5" + +msgid "cmxv_create_info" +msgstr "Seleziona un oggetto xAPI/cmi5 completato per generare un certificato relativo ad esso" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_ja.po b/components/ILIAS/CmiXapi/lang/cmxv_ja.po new file mode 100644 index 000000000000..3a3c8af05b67 --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_ja.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: cmxv\n" + +msgid "cmxv_create" +msgstr "xAPI/cmi5 Objectの証明書を作成" + +msgid "cmxv_create_info" +msgstr "そのための証明書を作成するには、完了済xAPI/cmi5 objectを選択" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_ka.po b/components/ILIAS/CmiXapi/lang/cmxv_ka.po new file mode 100644 index 000000000000..f73827b85c91 --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_ka.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmxv\n" + +#, fuzzy +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +#, fuzzy +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_lt.po b/components/ILIAS/CmiXapi/lang/cmxv_lt.po new file mode 100644 index 000000000000..39711fc97b0e --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_lt.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: cmxv\n" + +#, fuzzy +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +#, fuzzy +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_nl.po b/components/ILIAS/CmiXapi/lang/cmxv_nl.po new file mode 100644 index 000000000000..637fe948870d --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_nl.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmxv\n" + +#, fuzzy +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +#, fuzzy +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_pl.po b/components/ILIAS/CmiXapi/lang/cmxv_pl.po new file mode 100644 index 000000000000..670c9deefca1 --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_pl.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cmxv\n" + +#, fuzzy +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +#, fuzzy +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_pt.po b/components/ILIAS/CmiXapi/lang/cmxv_pt.po new file mode 100644 index 000000000000..4d80eadbb89c --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_pt.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: cmxv\n" + +#, fuzzy +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +#, fuzzy +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_ro.po b/components/ILIAS/CmiXapi/lang/cmxv_ro.po new file mode 100644 index 000000000000..d3e90bb64931 --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_ro.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: cmxv\n" + +#, fuzzy +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +#, fuzzy +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_ru.po b/components/ILIAS/CmiXapi/lang/cmxv_ru.po new file mode 100644 index 000000000000..84b7e4cca4ed --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_ru.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cmxv\n" + +#, fuzzy +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +#, fuzzy +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_sk.po b/components/ILIAS/CmiXapi/lang/cmxv_sk.po new file mode 100644 index 000000000000..576f6b701ee9 --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_sk.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: cmxv\n" + +#, fuzzy +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +#, fuzzy +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_sl.po b/components/ILIAS/CmiXapi/lang/cmxv_sl.po new file mode 100644 index 000000000000..82f4df8dc355 --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_sl.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: cmxv\n" + +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_sq.po b/components/ILIAS/CmiXapi/lang/cmxv_sq.po new file mode 100644 index 000000000000..a06eff38987a --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_sq.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmxv\n" + +#, fuzzy +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +#, fuzzy +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_sr.po b/components/ILIAS/CmiXapi/lang/cmxv_sr.po new file mode 100644 index 000000000000..f1d0c5aaa7d8 --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_sr.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cmxv\n" + +#, fuzzy +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +#, fuzzy +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_sv.po b/components/ILIAS/CmiXapi/lang/cmxv_sv.po new file mode 100644 index 000000000000..b5f54dbf7f46 --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_sv.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmxv\n" + +msgid "cmxv_create" +msgstr "Skapa certifikat för xAPI/cmi5-objekt" + +msgid "cmxv_create_info" +msgstr "Välj ett slutfört xAPI/cmi5-objekt för att generera ett certifikat för det." diff --git a/components/ILIAS/CmiXapi/lang/cmxv_tr.po b/components/ILIAS/CmiXapi/lang/cmxv_tr.po new file mode 100644 index 000000000000..07b3f027df78 --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_tr.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmxv\n" + +#, fuzzy +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +#, fuzzy +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_uk.po b/components/ILIAS/CmiXapi/lang/cmxv_uk.po new file mode 100644 index 000000000000..5f5bdd3d344e --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_uk.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cmxv\n" + +#, fuzzy +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +#, fuzzy +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_vi.po b/components/ILIAS/CmiXapi/lang/cmxv_vi.po new file mode 100644 index 000000000000..22d09fc7f3ea --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_vi.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: cmxv\n" + +#, fuzzy +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +#, fuzzy +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/CmiXapi/lang/cmxv_zh.po b/components/ILIAS/CmiXapi/lang/cmxv_zh.po new file mode 100644 index 000000000000..08d82020451d --- /dev/null +++ b/components/ILIAS/CmiXapi/lang/cmxv_zh.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: cmxv\n" + +#, fuzzy +msgid "cmxv_create" +msgstr "Create Certificate for xAPI/cmi5 Object" + +#, fuzzy +msgid "cmxv_create_info" +msgstr "Select a completed xAPI/cmi5 object to generate a certificate for it" diff --git a/components/ILIAS/Component/Component.php b/components/ILIAS/Component/Component.php index c0cea15a0749..606515ca945b 100644 --- a/components/ILIAS/Component/Component.php +++ b/components/ILIAS/Component/Component.php @@ -20,6 +20,9 @@ namespace ILIAS; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; + class Component implements Component\Component { public function init( @@ -53,5 +56,9 @@ public function init( $internal[Component\Resource\PublicAssetManager::class] = static fn() => new Component\Resource\PublicAssetManager(); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'cmps' + ); } } diff --git a/components/ILIAS/Component/lang/cmps.pot b/components/ILIAS/Component/lang/cmps.pot new file mode 100644 index 000000000000..a95f41569c52 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps.pot @@ -0,0 +1,228 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "" + +msgid "cmps_active" +msgstr "" + +msgid "cmps_add_new_rank" +msgstr "" + +msgid "cmps_available" +msgstr "" + +msgid "cmps_available_version" +msgstr "" + +msgid "cmps_basic_files" +msgstr "" + +msgid "cmps_class_file" +msgstr "" + +msgid "cmps_component" +msgstr "" + +msgid "cmps_configure" +msgstr "" + +msgid "cmps_current_db_version" +msgstr "" + +msgid "cmps_current_version" +msgstr "" + +msgid "cmps_database" +msgstr "" + +msgid "cmps_db_update" +msgstr "" + +msgid "cmps_deactivate" +msgstr "" + +msgid "cmps_detailed_information" +msgstr "" + +msgid "cmps_dir" +msgstr "" + +msgid "cmps_disable_creation" +msgstr "" + +msgid "cmps_enable_creation" +msgstr "" + +msgid "cmps_file_version" +msgstr "" + +msgid "cmps_group" +msgstr "" + +msgid "cmps_id" +msgstr "" + +msgid "cmps_ilias_max_version" +msgstr "" + +msgid "cmps_ilias_min_version" +msgstr "" + +msgid "cmps_inactive" +msgstr "" + +msgid "cmps_install" +msgstr "" + +msgid "cmps_is_active" +msgstr "" + +msgid "cmps_is_installed" +msgstr "" + +msgid "cmps_lang_files" +msgstr "" + +msgid "cmps_lang_prefix" +msgstr "" + +msgid "cmps_languages" +msgstr "" + +msgid "cmps_main_dir" +msgstr "" + +msgid "cmps_missing" +msgstr "" + +msgid "cmps_module" +msgstr "" + +msgid "cmps_must_installed" +msgstr "" + +msgid "cmps_name" +msgstr "" + +msgid "cmps_needs_matching_ilias_version" +msgstr "" + +msgid "cmps_needs_newer_ilias_version" +msgstr "" + +msgid "cmps_needs_newer_plugin_version" +msgstr "" + +msgid "cmps_needs_update" +msgstr "" + +msgid "cmps_needs_upgrade" +msgstr "" + +msgid "cmps_no_db_update_file_available" +msgstr "" + +msgid "cmps_no_language_file_available" +msgstr "" + +msgid "cmps_plugin" +msgstr "" + +msgid "cmps_plugin_activated" +msgstr "" + +msgid "cmps_plugin_db_prefixes" +msgstr "" + +msgid "cmps_plugin_deactivated" +msgstr "" + +msgid "cmps_plugin_deinstalled" +msgstr "" + +msgid "cmps_plugin_file" +msgstr "" + +msgid "cmps_plugin_lang_prefixes" +msgstr "" + +msgid "cmps_plugin_slot" +msgstr "" + +msgid "cmps_plugin_uninstalled" +msgstr "" + +msgid "cmps_plugin_updated" +msgstr "" + +msgid "cmps_plugins" +msgstr "" + +msgid "cmps_refresh" +msgstr "" + +msgid "cmps_refresh_lng" +msgstr "" + +msgid "cmps_rep_object" +msgstr "" + +msgid "cmps_repository_object_types" +msgstr "" + +msgid "cmps_responsible" +msgstr "" + +msgid "cmps_responsible_mail" +msgstr "" + +msgid "cmps_save_options" +msgstr "" + +msgid "cmps_service" +msgstr "" + +msgid "cmps_show_details" +msgstr "" + +msgid "cmps_slots" +msgstr "" + +msgid "cmps_status" +msgstr "" + +msgid "cmps_supports_cli_setup" +msgstr "" + +msgid "cmps_supports_export" +msgstr "" + +msgid "cmps_supports_learning_progress" +msgstr "" + +msgid "cmps_uninstall" +msgstr "" + +msgid "cmps_uninstall_confirm" +msgstr "" + +msgid "cmps_uninstall_inactive_confirm" +msgstr "" + +msgid "cmps_update" +msgstr "" + +msgid "cmps_version" +msgstr "" + +msgid "database_is_uptodate" +msgstr "" + +msgid "no_changes" +msgstr "" diff --git a/components/ILIAS/Component/lang/cmps_ar.po b/components/ILIAS/Component/lang/cmps_ar.po new file mode 100644 index 000000000000..e389b24c2e9e --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_ar.po @@ -0,0 +1,254 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "تفعيل" + +msgid "cmps_active" +msgstr "فعال" + +msgid "cmps_add_new_rank" +msgstr "الوضعية في قائمة اضافة-عنصر-جديد" + +msgid "cmps_available" +msgstr "Available" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +msgid "cmps_basic_files" +msgstr "Basic Files" + +msgid "cmps_class_file" +msgstr "Class File" + +msgid "cmps_component" +msgstr "Component" + +msgid "cmps_configure" +msgstr "Configure" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +msgid "cmps_current_version" +msgstr "Current Version" + +msgid "cmps_database" +msgstr "Database" + +msgid "cmps_db_update" +msgstr "DB Update Script" + +msgid "cmps_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +msgid "cmps_dir" +msgstr "الدليل" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +#, fuzzy +msgid "cmps_enable_creation" +msgstr "Enable Creation" + +msgid "cmps_file_version" +msgstr "Update File Version" + +msgid "cmps_group" +msgstr "مجموعة" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Max. ILIAS Version" + +msgid "cmps_ilias_min_version" +msgstr "Min. ILIAS Version" + +msgid "cmps_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cmps_install" +msgstr "Install" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +msgid "cmps_lang_files" +msgstr "Language Files" + +msgid "cmps_lang_prefix" +msgstr "بادئة متغيرات اللغة" + +msgid "cmps_languages" +msgstr "Languages" + +msgid "cmps_main_dir" +msgstr "Main Directory" + +msgid "cmps_missing" +msgstr "Missing" + +msgid "cmps_module" +msgstr "وحدة" + +#, fuzzy +msgid "cmps_must_installed" +msgstr "The component must be installed." + +msgid "cmps_name" +msgstr "Name" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +msgid "cmps_needs_newer_ilias_version" +msgstr "This plugin version only runs on newer ILIAS versions. Please upgrade ILIAS." + +msgid "cmps_needs_newer_plugin_version" +msgstr "This ILIAS version needs a newer plugin version. Please upgrade the plugin." + +msgid "cmps_needs_update" +msgstr "Needs update." + +msgid "cmps_needs_upgrade" +msgstr "The plugin version currently installed is older than a previously installed version. Please upgrade the plugin." + +msgid "cmps_no_db_update_file_available" +msgstr "No DB update script available." + +msgid "cmps_no_language_file_available" +msgstr "لا يوجد ملف لغة" + +msgid "cmps_plugin" +msgstr "Plugin" + +msgid "cmps_plugin_activated" +msgstr "The plugin has been activated." + +msgid "cmps_plugin_db_prefixes" +msgstr "DB Table Prefixes" + +msgid "cmps_plugin_deactivated" +msgstr "The plugin has been deactivated." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +msgid "cmps_plugin_file" +msgstr "Plugin File" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Plugin Language Prefixes" + +msgid "cmps_plugin_slot" +msgstr "قائمة الاضافات" + +#, fuzzy +msgid "cmps_plugin_uninstalled" +msgstr "The plugin has been uninstalled." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +msgid "cmps_plugins" +msgstr "الاضافات" + +msgid "cmps_refresh" +msgstr "Refresh" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +msgid "cmps_rep_object" +msgstr "نوع عنصر المكتبة" + +#, fuzzy +msgid "cmps_repository_object_types" +msgstr "Repository Object Types" + +msgid "cmps_responsible" +msgstr "Responsible" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "حفظ الخيارات" + +msgid "cmps_service" +msgstr "خدمة" + +msgid "cmps_show_details" +msgstr "عرض التفاصيل" + +#, fuzzy +msgid "cmps_slots" +msgstr "Slots" + +msgid "cmps_status" +msgstr "Status" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +#, fuzzy +msgid "cmps_uninstall" +msgstr "Uninstall" + +#, fuzzy +msgid "cmps_uninstall_confirm" +msgstr "Are you sure you want to uninstall the plugin \"%s\"?" + +#, fuzzy +msgid "cmps_uninstall_inactive_confirm" +msgstr "The plugin \"%1$s\" can currently not be activated (\"%2$s\"). In this state plugins cannot be uninstalled completely. As only the core integration is reverted, plugin custom data may remain. Would you like to continue with the partial uninstall?" + +msgid "cmps_update" +msgstr "Update" + +msgid "cmps_version" +msgstr "Version" + +msgid "database_is_uptodate" +msgstr "The database is up to date." + +msgid "no_changes" +msgstr "No changes" diff --git a/components/ILIAS/Component/lang/cmps_bg.po b/components/ILIAS/Component/lang/cmps_bg.po new file mode 100644 index 000000000000..f47e61318f8c --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_bg.po @@ -0,0 +1,245 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Активиране" + +msgid "cmps_active" +msgstr "Активиран" + +msgid "cmps_add_new_rank" +msgstr "Позиция в списъка за добавяне на нови обекти" + +msgid "cmps_available" +msgstr "Available" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +msgid "cmps_basic_files" +msgstr "Основни файлове" + +msgid "cmps_class_file" +msgstr "Файл на класа" + +msgid "cmps_component" +msgstr "Component" + +msgid "cmps_configure" +msgstr "Конфигуриране" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +msgid "cmps_current_version" +msgstr " Текуща версия" + +msgid "cmps_database" +msgstr "База данни" + +msgid "cmps_db_update" +msgstr "Скрипт за обновяване на базата данни" + +msgid "cmps_deactivate" +msgstr "Деактивиране" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +msgid "cmps_dir" +msgstr "Директория" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +msgid "cmps_enable_creation" +msgstr "Активиране на създаването" + +msgid "cmps_file_version" +msgstr "Актуализиране на версията на файла" + +msgid "cmps_group" +msgstr "Група" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Max. Версия на ILIAS" + +msgid "cmps_ilias_min_version" +msgstr "Min. Версия на ILIAS" + +msgid "cmps_inactive" +msgstr "Inactive" + +msgid "cmps_install" +msgstr "Инсталиране" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +msgid "cmps_lang_files" +msgstr "Езикови файлове" + +msgid "cmps_lang_prefix" +msgstr " Префикс на езиковите променливи" + +msgid "cmps_languages" +msgstr "Езици" + +msgid "cmps_main_dir" +msgstr "Основна директория" + +msgid "cmps_missing" +msgstr "Пропускане" + +msgid "cmps_module" +msgstr "Module" + +msgid "cmps_must_installed" +msgstr "Компонентът трябва да е инсталиран." + +msgid "cmps_name" +msgstr "Име" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +msgid "cmps_needs_newer_ilias_version" +msgstr "Тази версия на плъгина работи само с по-нови версии на ILIAS. Моля, надградете ILIAS." + +msgid "cmps_needs_newer_plugin_version" +msgstr "Тази версия на ILIAS се нуждае от по-нова версия на плъгина. Моля, актуализирайте плъгина." + +msgid "cmps_needs_update" +msgstr "Необходима е актуализация." + +msgid "cmps_needs_upgrade" +msgstr "Инсталираната в момента версия на плъгина е по-стара от предишната. Моля, актуализирайте плъгина." + +msgid "cmps_no_db_update_file_available" +msgstr "Няма наличен скрипт за актуализация на БД." + +msgid "cmps_no_language_file_available" +msgstr "Няма наличен езиков файл." + +msgid "cmps_plugin" +msgstr "Plugin" + +msgid "cmps_plugin_activated" +msgstr "Плъгинът е активиран." + +msgid "cmps_plugin_db_prefixes" +msgstr " Префикси на таблици за БД" + +msgid "cmps_plugin_deactivated" +msgstr "Плъгинът е деактивиран." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +msgid "cmps_plugin_file" +msgstr "Файл на приставка" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Префикси на езика на приставката" + +msgid "cmps_plugin_slot" +msgstr "Плъгин слот" + +msgid "cmps_plugin_uninstalled" +msgstr "Плъгинът е деинсталиран." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +msgid "cmps_plugins" +msgstr "Plugins" + +msgid "cmps_refresh" +msgstr "Refresh" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +msgid "cmps_rep_object" +msgstr " Тип на обекта на хранилището" + +msgid "cmps_repository_object_types" +msgstr "Типове обекти на хранилището" + +msgid "cmps_responsible" +msgstr "Responsible" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "Запазване на опции" + +msgid "cmps_service" +msgstr "Service" + +msgid "cmps_show_details" +msgstr "Покажи подробности" + +msgid "cmps_slots" +msgstr "Места" + +msgid "cmps_status" +msgstr "Статус" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +msgid "cmps_uninstall" +msgstr "Деинсталиране" + +msgid "cmps_uninstall_confirm" +msgstr "Със сигурност ли искате да деинсталирате приставката \"%s\"?" + +msgid "cmps_uninstall_inactive_confirm" +msgstr "Плъгинът \"%1$s\" понастоящем не може да бъде активиран (\"%2$s\"). В това състояние плъгините не могат да бъдат деинсталирани напълно. Тъй като се възстановява само интеграцията на ядрото, потребителските данни на плъгина могат да останат. Искате ли да продължите с частичното деинсталиране?" + +msgid "cmps_update" +msgstr "Актуализация" + +msgid "cmps_version" +msgstr "Версия" + +msgid "database_is_uptodate" +msgstr "Базата данни е актуална" + +msgid "no_changes" +msgstr "Няма промени" diff --git a/components/ILIAS/Component/lang/cmps_cs.po b/components/ILIAS/Component/lang/cmps_cs.po new file mode 100644 index 000000000000..c4ee2133f834 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_cs.po @@ -0,0 +1,245 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Aktivovat" + +msgid "cmps_active" +msgstr "Aktivní" + +msgid "cmps_add_new_rank" +msgstr "Pozice v seznamu \"Přidat nový objekt\"" + +msgid "cmps_available" +msgstr "Dostupné" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +msgid "cmps_basic_files" +msgstr "Základní soubory" + +msgid "cmps_class_file" +msgstr "Soubor třídy" + +msgid "cmps_component" +msgstr "Komponenta" + +msgid "cmps_configure" +msgstr "Konfigurovat" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +msgid "cmps_current_version" +msgstr "Aktuální verze" + +msgid "cmps_database" +msgstr "Databáze" + +msgid "cmps_db_update" +msgstr "Skript aktualizace DB" + +msgid "cmps_deactivate" +msgstr "Deaktivovat" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +msgid "cmps_dir" +msgstr "Adresář" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +msgid "cmps_enable_creation" +msgstr "Zapnout tvorbu" + +msgid "cmps_file_version" +msgstr "Verze akualizačního souboru" + +msgid "cmps_group" +msgstr "Skupina" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Max. verze ILIAS" + +msgid "cmps_ilias_min_version" +msgstr "Min. verze ILIAS" + +msgid "cmps_inactive" +msgstr "Neaktivní" + +msgid "cmps_install" +msgstr "Install" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +msgid "cmps_lang_files" +msgstr "Soubory jazyků" + +msgid "cmps_lang_prefix" +msgstr "Označení jazykových proměnných" + +msgid "cmps_languages" +msgstr "Jazyky" + +msgid "cmps_main_dir" +msgstr "Hlavní adresář" + +msgid "cmps_missing" +msgstr "Chybí" + +msgid "cmps_module" +msgstr "Modul" + +msgid "cmps_must_installed" +msgstr "Komponenta musí být instalována." + +msgid "cmps_name" +msgstr "Název" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +msgid "cmps_needs_newer_ilias_version" +msgstr "Tato verze pluginu běží jen na novější verzi ILIAS. Aktualizujte prosím ILIAS." + +msgid "cmps_needs_newer_plugin_version" +msgstr "Tato verze ILIAS vyžaduje novější verzi zásuvného souboru. Aktualizujte prosím plugin." + +msgid "cmps_needs_update" +msgstr "Vyžaduje aktualizaci." + +msgid "cmps_needs_upgrade" +msgstr "Verze pluginu, kterou instalujete, je starší než nainstalovaná verze. Aktualizujte prosím plugin." + +msgid "cmps_no_db_update_file_available" +msgstr "Není dostupný žádný skript aktualizace DB." + +msgid "cmps_no_language_file_available" +msgstr "Žádný jazykový soubor není dostupný." + +msgid "cmps_plugin" +msgstr "Plugin" + +msgid "cmps_plugin_activated" +msgstr "Plugin byl aktivován." + +msgid "cmps_plugin_db_prefixes" +msgstr "Označení tabulek DB" + +msgid "cmps_plugin_deactivated" +msgstr "Plugin byl deaktivován." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +msgid "cmps_plugin_file" +msgstr "Soubor pluginu" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Označení jazykových pluginů" + +msgid "cmps_plugin_slot" +msgstr "Slot pluginu" + +msgid "cmps_plugin_uninstalled" +msgstr "Plugin byl odinstalován." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +msgid "cmps_plugins" +msgstr "Pluginy" + +msgid "cmps_refresh" +msgstr "Obnovení" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +msgid "cmps_rep_object" +msgstr "Typ objektu úložiště" + +msgid "cmps_repository_object_types" +msgstr "Typy objektů úložiště" + +msgid "cmps_responsible" +msgstr "Zodpovědný" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "Uložit nastavení" + +msgid "cmps_service" +msgstr "Služba" + +msgid "cmps_show_details" +msgstr "Zobrazit detaily" + +msgid "cmps_slots" +msgstr "Sloty" + +msgid "cmps_status" +msgstr "Status" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +msgid "cmps_uninstall" +msgstr "Odinstalovat" + +msgid "cmps_uninstall_confirm" +msgstr "Opravdu chcete odinstalovat plugin „%s“?" + +msgid "cmps_uninstall_inactive_confirm" +msgstr "Plugin „%1$s“ nelze v současné době aktivovat („%2$s“). V tomto stavu nelze pluginy zcela odinstalovat. Vzhledem k tomu, že je vrácena pouze integrace jádra, mohou zůstat zachována vlastní data pluginu. Chcete pokračovat v částečném odinstalování?" + +msgid "cmps_update" +msgstr "Akualizovat" + +msgid "cmps_version" +msgstr "Verze" + +msgid "database_is_uptodate" +msgstr "Tato databáze je aktuální." + +msgid "no_changes" +msgstr "Žádné změny" diff --git a/components/ILIAS/Component/lang/cmps_da.po b/components/ILIAS/Component/lang/cmps_da.po new file mode 100644 index 000000000000..4820de0280a5 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_da.po @@ -0,0 +1,256 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Aktiver" + +msgid "cmps_active" +msgstr "Aktiv" + +msgid "cmps_add_new_rank" +msgstr "Position i opret rullemenu" + +msgid "cmps_available" +msgstr "Tilgængelig" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +msgid "cmps_basic_files" +msgstr "Basisfiler" + +msgid "cmps_class_file" +msgstr "Klassefiler" + +msgid "cmps_component" +msgstr "Komponent" + +#, fuzzy +msgid "cmps_configure" +msgstr "Configure" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +msgid "cmps_current_version" +msgstr "Nuværende version" + +msgid "cmps_database" +msgstr "Database" + +msgid "cmps_db_update" +msgstr "Database opdaterings script" + +msgid "cmps_deactivate" +msgstr "Deaktiver" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +msgid "cmps_dir" +msgstr "Mappe" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +#, fuzzy +msgid "cmps_enable_creation" +msgstr "Enable Creation" + +msgid "cmps_file_version" +msgstr "Opdater filversion" + +msgid "cmps_group" +msgstr "Gruppe" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Maks ILIAS version" + +msgid "cmps_ilias_min_version" +msgstr "Min ILIAS version" + +msgid "cmps_inactive" +msgstr "Inaktiv" + +#, fuzzy +msgid "cmps_install" +msgstr "Install" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +msgid "cmps_lang_files" +msgstr "Sprogfiler" + +msgid "cmps_lang_prefix" +msgstr "Prefix for sprogvariable" + +msgid "cmps_languages" +msgstr "Sprog" + +msgid "cmps_main_dir" +msgstr "Rod folder" + +msgid "cmps_missing" +msgstr "Mangler" + +msgid "cmps_module" +msgstr "Modul" + +#, fuzzy +msgid "cmps_must_installed" +msgstr "The component must be installed." + +msgid "cmps_name" +msgstr "Navn" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +msgid "cmps_needs_newer_ilias_version" +msgstr "Denne version af pluginet kører kun på en nyerere version af ILIAS. Du skal opgadere ILIAS før du kan anvende dette." + +msgid "cmps_needs_newer_plugin_version" +msgstr "Denne ILIAS version kræver en nyerere plugin. Opgrader venligst pluginet." + +msgid "cmps_needs_update" +msgstr "Kræver opdatering" + +#, fuzzy +msgid "cmps_needs_upgrade" +msgstr "The plugin version currently installed is older than a previously installed version. Please upgrade the plugin." + +msgid "cmps_no_db_update_file_available" +msgstr "Intet database script tilgængeligt" + +msgid "cmps_no_language_file_available" +msgstr "Ingen sprogfil tilgængelig" + +msgid "cmps_plugin" +msgstr "Plugin" + +msgid "cmps_plugin_activated" +msgstr "Plugin blev aktiveret." + +msgid "cmps_plugin_db_prefixes" +msgstr "Database tabel prefix" + +msgid "cmps_plugin_deactivated" +msgstr "Plugin er deaktiveret." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +msgid "cmps_plugin_file" +msgstr "Plugin fil" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Plugin sprog prefixer" + +msgid "cmps_plugin_slot" +msgstr "Plugin plads" + +#, fuzzy +msgid "cmps_plugin_uninstalled" +msgstr "The plugin has been uninstalled." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +msgid "cmps_plugins" +msgstr "Plugins" + +msgid "cmps_refresh" +msgstr "Opfrisk" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +msgid "cmps_rep_object" +msgstr "Oversigts objekttype" + +#, fuzzy +msgid "cmps_repository_object_types" +msgstr "Repository Object Types" + +msgid "cmps_responsible" +msgstr "Ansvarlig" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "Gem indstillinger" + +msgid "cmps_service" +msgstr "Service" + +msgid "cmps_show_details" +msgstr "Vis detaljer" + +#, fuzzy +msgid "cmps_slots" +msgstr "Slots" + +msgid "cmps_status" +msgstr "Status" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +#, fuzzy +msgid "cmps_uninstall" +msgstr "Uninstall" + +#, fuzzy +msgid "cmps_uninstall_confirm" +msgstr "Are you sure you want to uninstall the plugin \"%s\"?" + +#, fuzzy +msgid "cmps_uninstall_inactive_confirm" +msgstr "The plugin \"%1$s\" can currently not be activated (\"%2$s\"). In this state plugins cannot be uninstalled completely. As only the core integration is reverted, plugin custom data may remain. Would you like to continue with the partial uninstall?" + +msgid "cmps_update" +msgstr "Opdater" + +msgid "cmps_version" +msgstr "Version" + +msgid "database_is_uptodate" +msgstr "Databasen er opdateret" + +msgid "no_changes" +msgstr "Ingen ændringer" diff --git a/components/ILIAS/Component/lang/cmps_de.po b/components/ILIAS/Component/lang/cmps_de.po new file mode 100644 index 000000000000..83829b78f52d --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_de.po @@ -0,0 +1,231 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Aktivieren" + +msgid "cmps_active" +msgstr "Aktiv" + +msgid "cmps_add_new_rank" +msgstr "Position in der Auswahlliste für hinzuzufügende Objekte" + +msgid "cmps_available" +msgstr "Verfügbar" + +msgid "cmps_available_version" +msgstr "Verfügbare Version" + +msgid "cmps_basic_files" +msgstr "Basis-Dateien" + +msgid "cmps_class_file" +msgstr "Klassen-Datei" + +msgid "cmps_component" +msgstr "Komponente" + +msgid "cmps_configure" +msgstr "Konfigurieren" + +msgid "cmps_current_db_version" +msgstr "Aktuelle DB-Version" + +msgid "cmps_current_version" +msgstr "Aktuelle Version" + +msgid "cmps_database" +msgstr "Datenbank" + +msgid "cmps_db_update" +msgstr "Skript für Datenbankaktualisierung" + +msgid "cmps_deactivate" +msgstr "Deaktivieren" + +msgid "cmps_detailed_information" +msgstr "Detaillierte Informationen" + +msgid "cmps_dir" +msgstr "Verzeichnis" + +msgid "cmps_disable_creation" +msgstr "Erstellung ausschalten" + +msgid "cmps_enable_creation" +msgstr "Erstellung einschalten" + +msgid "cmps_file_version" +msgstr "Dateiversion aktualisieren" + +msgid "cmps_group" +msgstr "Gruppe" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Maximale ILIAS-Version" + +msgid "cmps_ilias_min_version" +msgstr "Minimale ILIAS-Version" + +msgid "cmps_inactive" +msgstr "Inaktiv" + +msgid "cmps_install" +msgstr "Installieren" + +msgid "cmps_is_active" +msgstr "Aktiviert" + +msgid "cmps_is_installed" +msgstr "Installiert" + +msgid "cmps_lang_files" +msgstr "Sprachdatei" + +msgid "cmps_lang_prefix" +msgstr "Präfix Sprachvariable" + +msgid "cmps_languages" +msgstr "Sprachen" + +msgid "cmps_main_dir" +msgstr "Hauptverzeichnis" + +msgid "cmps_missing" +msgstr "Fehlt" + +msgid "cmps_module" +msgstr "Modul" + +msgid "cmps_must_installed" +msgstr "Die Komponente muss installiert werden." + +msgid "cmps_name" +msgstr "Name" + +msgid "cmps_needs_matching_ilias_version" +msgstr "Dieses Plugin kann nicht mit der aktuellen Version dieser ILIAS-Installation verwendet werden." + +msgid "cmps_needs_newer_ilias_version" +msgstr "Dieses Plugin kann nur mit einer neueren ILIAS-Version verwendet werden. Bitte aktualisieren Sie Ihre ILIAS-Version." + +msgid "cmps_needs_newer_plugin_version" +msgstr "Diese ILIAS-Version benötigt eine neuere Plugin-Version. Bitte aktualisieren Sie das Plugin." + +msgid "cmps_needs_update" +msgstr "Aktualisierung notwendig" + +msgid "cmps_needs_upgrade" +msgstr "Die aktuell installierte Plugin-Version ist älter als die zuvor installierte. Bitte installieren Sie das aktuelle Plugin." + +msgid "cmps_no_db_update_file_available" +msgstr "Kein Datenbank-Update-Skript verfügbar" + +msgid "cmps_no_language_file_available" +msgstr "Keine Sprachdatei verfügbar" + +msgid "cmps_plugin" +msgstr "Plugin" + +msgid "cmps_plugin_activated" +msgstr "Das Plugin wurde aktiviert." + +msgid "cmps_plugin_db_prefixes" +msgstr "Präfixe Datenbanktabelle" + +msgid "cmps_plugin_deactivated" +msgstr "Das Plugin wurde deaktiviert." + +msgid "cmps_plugin_deinstalled" +msgstr "Das Plugin wurde deinstalliert." + +msgid "cmps_plugin_file" +msgstr "Plugin-Datei" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Plugin-Sprachpräfixe" + +msgid "cmps_plugin_slot" +msgstr "Plugin-Slot" + +msgid "cmps_plugin_uninstalled" +msgstr "Alle Sprach- und Datenbankeinträge, die sich auf das Plugin beziehen, wurden gelöscht und das Plugin deaktiviert. Sie können jetzt das Verzeichnis und den Quellcode des Plugins aus dem ‘Customizing’-Verzeichnis entfernen, um das Plugin endgültig zu deinstallieren." + +msgid "cmps_plugin_updated" +msgstr "Das Plugin wurde aktualisiert." + +msgid "cmps_plugins" +msgstr "Plugins" + +msgid "cmps_refresh" +msgstr "Sprachen neu laden" + +msgid "cmps_refresh_lng" +msgstr "Sprache aktualisiert" + +msgid "cmps_rep_object" +msgstr "Objekttyp im Magazin" + +msgid "cmps_repository_object_types" +msgstr "Objekttypen im Magazin" + +msgid "cmps_responsible" +msgstr "Verantwortlich" + +msgid "cmps_responsible_mail" +msgstr "Mail (Verantwortlicher)" + +msgid "cmps_save_options" +msgstr "Speichern" + +msgid "cmps_service" +msgstr "Dienst" + +msgid "cmps_show_details" +msgstr "Details anzeigen" + +msgid "cmps_slots" +msgstr "Slots" + +msgid "cmps_status" +msgstr "Status" + +msgid "cmps_supports_cli_setup" +msgstr "Unterstützt CLI-Setup" + +msgid "cmps_supports_export" +msgstr "Unterstützt Export" + +msgid "cmps_supports_learning_progress" +msgstr "Unterstützt Lernfortschritt" + +msgid "cmps_uninstall" +msgstr "Deinstallieren" + +msgid "cmps_uninstall_confirm" +msgstr "Wollen Sie wirklich das Plugin „%s“ deinstallieren und alle zugehörigen Datenbankeinträge löschen?" + +msgid "cmps_uninstall_inactive_confirm" +msgstr "Das Plugin \"%1$s\" ist aktuell nicht aktivierbar (\"%2$s\"). In diesem Status können Plugins nicht komplett deinstalliert werden. Da nur die Systemintegration entfernt wird, könnten Plugin-eigene Daten zurückbleiben. Möchten Sie mit der teilweisen Deinstallation fortfahren?" + +msgid "cmps_update" +msgstr "Aktualisieren" + +msgid "cmps_version" +msgstr "Version" + +msgid "database_is_uptodate" +msgstr "Die Datenbank ist aktuell." + +msgid "no_changes" +msgstr "Keine Änderungen" diff --git a/components/ILIAS/Component/lang/cmps_el.po b/components/ILIAS/Component/lang/cmps_el.po new file mode 100644 index 000000000000..20f17f2cfbb0 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_el.po @@ -0,0 +1,259 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Activate" + +msgid "cmps_active" +msgstr "Active" + +msgid "cmps_add_new_rank" +msgstr "Position in Add-New-Object List" + +msgid "cmps_available" +msgstr "Available" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +msgid "cmps_basic_files" +msgstr "Basic Files" + +msgid "cmps_class_file" +msgstr "Class File" + +msgid "cmps_component" +msgstr "Component" + +#, fuzzy +msgid "cmps_configure" +msgstr "Configure" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +msgid "cmps_current_version" +msgstr "Current Version" + +msgid "cmps_database" +msgstr "Database" + +msgid "cmps_db_update" +msgstr "DB Update Script" + +msgid "cmps_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +msgid "cmps_dir" +msgstr "Directory" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +#, fuzzy +msgid "cmps_enable_creation" +msgstr "Enable Creation" + +msgid "cmps_file_version" +msgstr "Update File Version" + +msgid "cmps_group" +msgstr "Group" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Max. ILIAS Version" + +msgid "cmps_ilias_min_version" +msgstr "Min. ILIAS Version" + +msgid "cmps_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cmps_install" +msgstr "Install" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +msgid "cmps_lang_files" +msgstr "Language Files" + +msgid "cmps_lang_prefix" +msgstr "Language Variables Prefix" + +msgid "cmps_languages" +msgstr "Languages" + +msgid "cmps_main_dir" +msgstr "Main Directory" + +msgid "cmps_missing" +msgstr "Missing" + +msgid "cmps_module" +msgstr "Module" + +#, fuzzy +msgid "cmps_must_installed" +msgstr "The component must be installed." + +msgid "cmps_name" +msgstr "Name" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +msgid "cmps_needs_newer_ilias_version" +msgstr "This plugin version only runs on newer ILIAS versions. Please upgrade ILIAS." + +msgid "cmps_needs_newer_plugin_version" +msgstr "This ILIAS version needs a newer plugin version. Please upgrade the plugin." + +msgid "cmps_needs_update" +msgstr "Needs update." + +msgid "cmps_needs_upgrade" +msgstr "The plugin version currently installed is older than a previously installed version. Please upgrade the plugin." + +msgid "cmps_no_db_update_file_available" +msgstr "No DB update script available." + +msgid "cmps_no_language_file_available" +msgstr "No language file available." + +msgid "cmps_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "cmps_plugin_activated" +msgstr "The plugin has been activated." + +msgid "cmps_plugin_db_prefixes" +msgstr "DB Table Prefixes" + +#, fuzzy +msgid "cmps_plugin_deactivated" +msgstr "The plugin has been deactivated." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +msgid "cmps_plugin_file" +msgstr "Plugin File" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Plugin Language Prefixes" + +msgid "cmps_plugin_slot" +msgstr "Plugin Slot" + +#, fuzzy +msgid "cmps_plugin_uninstalled" +msgstr "The plugin has been uninstalled." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +msgid "cmps_plugins" +msgstr "Plugins" + +msgid "cmps_refresh" +msgstr "Refresh" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +msgid "cmps_rep_object" +msgstr "Repository Object Type" + +#, fuzzy +msgid "cmps_repository_object_types" +msgstr "Repository Object Types" + +msgid "cmps_responsible" +msgstr "Responsible" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "Save Options" + +msgid "cmps_service" +msgstr "Service" + +msgid "cmps_show_details" +msgstr "Show Details" + +#, fuzzy +msgid "cmps_slots" +msgstr "Slots" + +msgid "cmps_status" +msgstr "Status" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +#, fuzzy +msgid "cmps_uninstall" +msgstr "Uninstall" + +#, fuzzy +msgid "cmps_uninstall_confirm" +msgstr "Are you sure you want to uninstall the plugin \"%s\"?" + +#, fuzzy +msgid "cmps_uninstall_inactive_confirm" +msgstr "The plugin \"%1$s\" can currently not be activated (\"%2$s\"). In this state plugins cannot be uninstalled completely. As only the core integration is reverted, plugin custom data may remain. Would you like to continue with the partial uninstall?" + +msgid "cmps_update" +msgstr "Update" + +msgid "cmps_version" +msgstr "Version" + +#, fuzzy +msgid "database_is_uptodate" +msgstr "Die Datenbank ist aktuell." + +#, fuzzy +msgid "no_changes" +msgstr "Keine Änderungen" diff --git a/components/ILIAS/Component/lang/cmps_en.po b/components/ILIAS/Component/lang/cmps_en.po new file mode 100644 index 000000000000..c7bced4c6785 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_en.po @@ -0,0 +1,231 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Activate" + +msgid "cmps_active" +msgstr "Active" + +msgid "cmps_add_new_rank" +msgstr "Position in Add-New-Object List" + +msgid "cmps_available" +msgstr "Available" + +msgid "cmps_available_version" +msgstr "Available Version" + +msgid "cmps_basic_files" +msgstr "Basic Files" + +msgid "cmps_class_file" +msgstr "Class File" + +msgid "cmps_component" +msgstr "Component" + +msgid "cmps_configure" +msgstr "Configure" + +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +msgid "cmps_current_version" +msgstr "Current Version" + +msgid "cmps_database" +msgstr "Database" + +msgid "cmps_db_update" +msgstr "DB Update Script" + +msgid "cmps_deactivate" +msgstr "Deactivate" + +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +msgid "cmps_dir" +msgstr "Directory" + +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +msgid "cmps_enable_creation" +msgstr "Enable Creation" + +msgid "cmps_file_version" +msgstr "Update File Version" + +msgid "cmps_group" +msgstr "Group" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Max. ILIAS Version" + +msgid "cmps_ilias_min_version" +msgstr "Min. ILIAS Version" + +msgid "cmps_inactive" +msgstr "Inactive" + +msgid "cmps_install" +msgstr "Install" + +msgid "cmps_is_active" +msgstr "Activated" + +msgid "cmps_is_installed" +msgstr "Installed" + +msgid "cmps_lang_files" +msgstr "Language Files" + +msgid "cmps_lang_prefix" +msgstr "Language Variables Prefix" + +msgid "cmps_languages" +msgstr "Languages" + +msgid "cmps_main_dir" +msgstr "Main Directory" + +msgid "cmps_missing" +msgstr "Missing" + +msgid "cmps_module" +msgstr "Module" + +msgid "cmps_must_installed" +msgstr "The component must be installed." + +msgid "cmps_name" +msgstr "Name" + +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +msgid "cmps_needs_newer_ilias_version" +msgstr "This plugin version only runs on newer ILIAS versions. Please upgrade ILIAS." + +msgid "cmps_needs_newer_plugin_version" +msgstr "This ILIAS version needs a newer plugin version. Please upgrade the plugin." + +msgid "cmps_needs_update" +msgstr "Needs update." + +msgid "cmps_needs_upgrade" +msgstr "The plugin version currently installed is older than a previously installed version. Please upgrade the plugin." + +msgid "cmps_no_db_update_file_available" +msgstr "No DB update script available." + +msgid "cmps_no_language_file_available" +msgstr "No language file available." + +msgid "cmps_plugin" +msgstr "Plugin" + +msgid "cmps_plugin_activated" +msgstr "The plugin has been activated." + +msgid "cmps_plugin_db_prefixes" +msgstr "DB Table Prefixes" + +msgid "cmps_plugin_deactivated" +msgstr "The plugin has been deactivated." + +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +msgid "cmps_plugin_file" +msgstr "Plugin File" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Plugin Language Prefixes" + +msgid "cmps_plugin_slot" +msgstr "Plugin Slot" + +msgid "cmps_plugin_uninstalled" +msgstr "All language and database related entries have been deleted and the plugin has been set inactive. Now you can remove the plugin's directory and source code in the ‘Customizing’ directory to uninstall the plugin definitely." + +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +msgid "cmps_plugins" +msgstr "Plugins" + +msgid "cmps_refresh" +msgstr "Refresh Languages" + +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +msgid "cmps_rep_object" +msgstr "Repository Object Type" + +msgid "cmps_repository_object_types" +msgstr "Repository Object Types" + +msgid "cmps_responsible" +msgstr "Responsible" + +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "Save" + +msgid "cmps_service" +msgstr "Service" + +msgid "cmps_show_details" +msgstr "Show Details" + +msgid "cmps_slots" +msgstr "Slots" + +msgid "cmps_status" +msgstr "Status" + +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +msgid "cmps_supports_export" +msgstr "Supports export" + +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +msgid "cmps_uninstall" +msgstr "Uninstall" + +msgid "cmps_uninstall_confirm" +msgstr "Are you sure you want to uninstall the plugin \"%s\" and remove all related database entries?" + +msgid "cmps_uninstall_inactive_confirm" +msgstr "The plugin \"%1$s\" can currently not be activated (\"%2$s\"). In this state plugins cannot be uninstalled completely. As only the core integration is reverted, plugin custom data may remain. Would you like to continue with the partial uninstall?" + +msgid "cmps_update" +msgstr "Update" + +msgid "cmps_version" +msgstr "Version" + +msgid "database_is_uptodate" +msgstr "The database is up to date." + +msgid "no_changes" +msgstr "No changes" diff --git a/components/ILIAS/Component/lang/cmps_es.po b/components/ILIAS/Component/lang/cmps_es.po new file mode 100644 index 000000000000..58d439e1e9c7 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_es.po @@ -0,0 +1,232 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Activar" + +msgid "cmps_active" +msgstr "Activo" + +msgid "cmps_add_new_rank" +msgstr "Posición en la lista de Añadir-Nuevo-Objeto" + +msgid "cmps_available" +msgstr "Disponible" + +msgid "cmps_available_version" +msgstr "Versión disponible" + +msgid "cmps_basic_files" +msgstr "Archivos básicos" + +msgid "cmps_class_file" +msgstr "Archivo de clase" + +msgid "cmps_component" +msgstr "Componente" + +msgid "cmps_configure" +msgstr "Configurar" + +msgid "cmps_current_db_version" +msgstr "Versión actual de BD" + +msgid "cmps_current_version" +msgstr "Versión actual" + +msgid "cmps_database" +msgstr "Base de datos" + +msgid "cmps_db_update" +msgstr "Script de actualización de BD" + +msgid "cmps_deactivate" +msgstr "Desactivar" + +msgid "cmps_detailed_information" +msgstr "Información detallada" + +msgid "cmps_dir" +msgstr "Directorio" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +msgid "cmps_enable_creation" +msgstr "Habilitar creación" + +msgid "cmps_file_version" +msgstr "Actualizar versión de archivo" + +msgid "cmps_group" +msgstr "Grupo" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Versión máx. de ILIAS" + +msgid "cmps_ilias_min_version" +msgstr "Versión mín. de ILIAS" + +msgid "cmps_inactive" +msgstr "Inactivo" + +msgid "cmps_install" +msgstr "Instalar" + +msgid "cmps_is_active" +msgstr "Activado" + +msgid "cmps_is_installed" +msgstr "Instalado" + +msgid "cmps_lang_files" +msgstr "Archivos de idioma" + +msgid "cmps_lang_prefix" +msgstr "Prefijo de variables de idioma" + +msgid "cmps_languages" +msgstr "Idiomas" + +msgid "cmps_main_dir" +msgstr "Directorio principal" + +msgid "cmps_missing" +msgstr "Faltante" + +msgid "cmps_module" +msgstr "Módulo" + +msgid "cmps_must_installed" +msgstr "El componente debe estar instalado." + +msgid "cmps_name" +msgstr "Nombre" + +msgid "cmps_needs_matching_ilias_version" +msgstr "Este complemento no funciona con su versión actual de ILIAS." + +msgid "cmps_needs_newer_ilias_version" +msgstr "Esta versión del complemento solo funciona en versiones más recientes de ILIAS. Por favor, actualice ILIAS." + +msgid "cmps_needs_newer_plugin_version" +msgstr "Esta versión de ILIAS necesita una versión más reciente del complemento. Por favor, actualice el complemento." + +msgid "cmps_needs_update" +msgstr "Necesita actualización." + +msgid "cmps_needs_upgrade" +msgstr "La versión del complemento instalada actualmente es más antigua que una versión instalada previamente. Por favor, actualice el complemento." + +msgid "cmps_no_db_update_file_available" +msgstr "No hay ningún script de actualización de base de datos disponible." + +msgid "cmps_no_language_file_available" +msgstr "No hay ningún archivo de idioma disponible." + +msgid "cmps_plugin" +msgstr "Complemento (Plugin)" + +msgid "cmps_plugin_activated" +msgstr "El complemento ha sido activado." + +msgid "cmps_plugin_db_prefixes" +msgstr "Prefijos de tablas de BD" + +msgid "cmps_plugin_deactivated" +msgstr "El complemento ha sido desactivado." + +msgid "cmps_plugin_deinstalled" +msgstr "El complemento ha sido desinstalado" + +msgid "cmps_plugin_file" +msgstr "Archivo del complemento" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Prefijos de idioma del complemento" + +msgid "cmps_plugin_slot" +msgstr "Ubicación (Slot) del complemento" + +msgid "cmps_plugin_uninstalled" +msgstr "Todas las entradas relacionadas con el idioma y la base de datos han sido eliminadas y el complemento se ha configurado como inactivo. Ahora puede eliminar el directorio y el código fuente del complemento en el directorio 'Customizing' para desinstalar el complemento definitivamente." + +msgid "cmps_plugin_updated" +msgstr "El complemento ha sido actualizado" + +msgid "cmps_plugins" +msgstr "Complementos (Plugins)" + +msgid "cmps_refresh" +msgstr "Actualizar idiomas" + +msgid "cmps_refresh_lng" +msgstr "Actualizar idioma" + +msgid "cmps_rep_object" +msgstr "Tipo de objeto de repositorio" + +msgid "cmps_repository_object_types" +msgstr "Tipos de objetos de repositorio" + +msgid "cmps_responsible" +msgstr "Responsable" + +msgid "cmps_responsible_mail" +msgstr "Correo electrónico (Responsable)" + +msgid "cmps_save_options" +msgstr "Guardar" + +msgid "cmps_service" +msgstr "Servicio" + +msgid "cmps_show_details" +msgstr "Mostrar detalles" + +msgid "cmps_slots" +msgstr "Ubicaciones (Slots)" + +msgid "cmps_status" +msgstr "Estado" + +msgid "cmps_supports_cli_setup" +msgstr "Soporta configuración por CLI" + +msgid "cmps_supports_export" +msgstr "Soporta exportación" + +msgid "cmps_supports_learning_progress" +msgstr "Soporta progreso de aprendizaje" + +msgid "cmps_uninstall" +msgstr "Desinstalar" + +msgid "cmps_uninstall_confirm" +msgstr "¿Está seguro de que desea desinstalar el complemento \"%s\" y eliminar todas las entradas de la base de datos relacionadas?" + +msgid "cmps_uninstall_inactive_confirm" +msgstr "El complemento \"%1$s\" actualmente no puede activarse (\"%2$s\"). En este estado, los complementos no pueden desinstalarse completamente. Dado que solo se revierte la integración del núcleo, los datos personalizados del complemento pueden permanecer. ¿Desea continuar con la desinstalación parcial?" + +msgid "cmps_update" +msgstr "Actualizar" + +msgid "cmps_version" +msgstr "Versión" + +msgid "database_is_uptodate" +msgstr "La base de datos está actualizada." + +msgid "no_changes" +msgstr "Sin cambios" diff --git a/components/ILIAS/Component/lang/cmps_et.po b/components/ILIAS/Component/lang/cmps_et.po new file mode 100644 index 000000000000..f59bcf6b4695 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_et.po @@ -0,0 +1,251 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Aktiveeri" + +msgid "cmps_active" +msgstr "Aktiivne" + +msgid "cmps_add_new_rank" +msgstr "Position in Add-New-Object List" + +msgid "cmps_available" +msgstr "Kättesaadav" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +msgid "cmps_basic_files" +msgstr "Põhifailid" + +msgid "cmps_class_file" +msgstr "Class File" + +msgid "cmps_component" +msgstr "Component" + +msgid "cmps_configure" +msgstr "Konfigureeri" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +msgid "cmps_current_version" +msgstr "Hetkeversioon" + +msgid "cmps_database" +msgstr "Andmebaas" + +msgid "cmps_db_update" +msgstr "DB Update Script" + +msgid "cmps_deactivate" +msgstr "Deaktiveeri" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +msgid "cmps_dir" +msgstr "Kataloog" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +msgid "cmps_enable_creation" +msgstr "Enable Creation" + +msgid "cmps_file_version" +msgstr "Uuenda faili versiooni" + +msgid "cmps_group" +msgstr "Grupp" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Max. ILIAS Version" + +msgid "cmps_ilias_min_version" +msgstr "Min. ILIAS Version" + +msgid "cmps_inactive" +msgstr "Passiivne" + +#, fuzzy +msgid "cmps_install" +msgstr "Install" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +msgid "cmps_lang_files" +msgstr "Keelefailid" + +msgid "cmps_lang_prefix" +msgstr "Language Variables Prefix" + +msgid "cmps_languages" +msgstr "Keeled" + +msgid "cmps_main_dir" +msgstr "Juurkataloog" + +msgid "cmps_missing" +msgstr "Puudub" + +msgid "cmps_module" +msgstr "Moodul" + +#, fuzzy +msgid "cmps_must_installed" +msgstr "The component must be installed." + +msgid "cmps_name" +msgstr "Nimi" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +msgid "cmps_needs_newer_ilias_version" +msgstr "Antud lisamoodul töötab ainult ILIASe uuema versiooniga. Uuenda ILIASe versiooni." + +msgid "cmps_needs_newer_plugin_version" +msgstr "ILIASe antud versioon vajab lisamooduli uuemat versiooni. Uuenda lisamoodulit." + +msgid "cmps_needs_update" +msgstr "Vajab uuendamist." + +msgid "cmps_needs_upgrade" +msgstr "The plugin version currently installed is older than a previously installed version. Please upgrade the plugin." + +msgid "cmps_no_db_update_file_available" +msgstr "No DB update script available." + +msgid "cmps_no_language_file_available" +msgstr "Keelefaili pole." + +msgid "cmps_plugin" +msgstr "Lisamoodul" + +msgid "cmps_plugin_activated" +msgstr "Lisamoodul on aktiveeritud." + +msgid "cmps_plugin_db_prefixes" +msgstr "DB Table Prefixes" + +msgid "cmps_plugin_deactivated" +msgstr "Lisamoodul on deaktiveeritud." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +msgid "cmps_plugin_file" +msgstr "Lisamooduli fail" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Plugin Language Prefixes" + +msgid "cmps_plugin_slot" +msgstr "Plugin Slot" + +#, fuzzy +msgid "cmps_plugin_uninstalled" +msgstr "The plugin has been uninstalled." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +msgid "cmps_plugins" +msgstr "Lisamoodulid" + +msgid "cmps_refresh" +msgstr "Värskenda" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +msgid "cmps_rep_object" +msgstr "Varamu objekti tüüp" + +msgid "cmps_repository_object_types" +msgstr "Repository Object Types" + +msgid "cmps_responsible" +msgstr "Responsible" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "Salvestamise valikud" + +msgid "cmps_service" +msgstr "Service" + +msgid "cmps_show_details" +msgstr "Näita detaile" + +msgid "cmps_slots" +msgstr "Slots" + +msgid "cmps_status" +msgstr "Staatus" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +#, fuzzy +msgid "cmps_uninstall" +msgstr "Uninstall" + +#, fuzzy +msgid "cmps_uninstall_confirm" +msgstr "Are you sure you want to uninstall the plugin \"%s\"?" + +#, fuzzy +msgid "cmps_uninstall_inactive_confirm" +msgstr "The plugin \"%1$s\" can currently not be activated (\"%2$s\"). In this state plugins cannot be uninstalled completely. As only the core integration is reverted, plugin custom data may remain. Would you like to continue with the partial uninstall?" + +msgid "cmps_update" +msgstr "Uuenda" + +msgid "cmps_version" +msgstr "Versioon" + +msgid "database_is_uptodate" +msgstr "The database is up to date." + +msgid "no_changes" +msgstr "Muudatused puuduvad" diff --git a/components/ILIAS/Component/lang/cmps_fa.po b/components/ILIAS/Component/lang/cmps_fa.po new file mode 100644 index 000000000000..8f5c9a0c6794 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_fa.po @@ -0,0 +1,254 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Activate" + +msgid "cmps_active" +msgstr "Active" + +msgid "cmps_add_new_rank" +msgstr "Position in Add-New-Object List" + +msgid "cmps_available" +msgstr "Available" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +msgid "cmps_basic_files" +msgstr "Basic Files" + +msgid "cmps_class_file" +msgstr "Class File" + +msgid "cmps_component" +msgstr "Component" + +msgid "cmps_configure" +msgstr "Configure" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +msgid "cmps_current_version" +msgstr "Current Version" + +msgid "cmps_database" +msgstr "Database" + +msgid "cmps_db_update" +msgstr "DB Update Script" + +msgid "cmps_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +msgid "cmps_dir" +msgstr "Directory" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +#, fuzzy +msgid "cmps_enable_creation" +msgstr "Enable Creation" + +msgid "cmps_file_version" +msgstr "بروز رسانی نسخه فایل" + +msgid "cmps_group" +msgstr "Group" + +msgid "cmps_id" +msgstr "شناسه" + +msgid "cmps_ilias_max_version" +msgstr "Max. ILIAS Version" + +msgid "cmps_ilias_min_version" +msgstr "Min. ILIAS Version" + +msgid "cmps_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cmps_install" +msgstr "Install" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +msgid "cmps_lang_files" +msgstr "Language Files" + +msgid "cmps_lang_prefix" +msgstr "Language Variables Prefix" + +msgid "cmps_languages" +msgstr "زبانها" + +msgid "cmps_main_dir" +msgstr "Main Directory" + +msgid "cmps_missing" +msgstr "Missing" + +msgid "cmps_module" +msgstr "Module" + +#, fuzzy +msgid "cmps_must_installed" +msgstr "The component must be installed." + +msgid "cmps_name" +msgstr "Name" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +msgid "cmps_needs_newer_ilias_version" +msgstr "This plugin version only runs on newer ILIAS versions. Please upgrade ILIAS." + +msgid "cmps_needs_newer_plugin_version" +msgstr "This ILIAS version needs a newer plugin version. Please upgrade the plugin." + +msgid "cmps_needs_update" +msgstr "Needs update." + +msgid "cmps_needs_upgrade" +msgstr "The plugin version currently installed is older than a previously installed version. Please upgrade the plugin." + +msgid "cmps_no_db_update_file_available" +msgstr "No DB update script available." + +msgid "cmps_no_language_file_available" +msgstr "No language file available." + +msgid "cmps_plugin" +msgstr "Plugin" + +msgid "cmps_plugin_activated" +msgstr "The plugin has been activated." + +msgid "cmps_plugin_db_prefixes" +msgstr "DB Table Prefixes" + +msgid "cmps_plugin_deactivated" +msgstr "The plugin has been deactivated." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +msgid "cmps_plugin_file" +msgstr "Plugin File" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Plugin Language Prefixes" + +msgid "cmps_plugin_slot" +msgstr "Plugin Slot" + +#, fuzzy +msgid "cmps_plugin_uninstalled" +msgstr "The plugin has been uninstalled." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +msgid "cmps_plugins" +msgstr "Plugins" + +msgid "cmps_refresh" +msgstr "Refresh" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +msgid "cmps_rep_object" +msgstr "Repository Object Type" + +#, fuzzy +msgid "cmps_repository_object_types" +msgstr "Repository Object Types" + +msgid "cmps_responsible" +msgstr "Responsible" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "Save Options" + +msgid "cmps_service" +msgstr "Service" + +msgid "cmps_show_details" +msgstr "Show Details" + +#, fuzzy +msgid "cmps_slots" +msgstr "Slots" + +msgid "cmps_status" +msgstr "Status" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +#, fuzzy +msgid "cmps_uninstall" +msgstr "Uninstall" + +#, fuzzy +msgid "cmps_uninstall_confirm" +msgstr "Are you sure you want to uninstall the plugin \"%s\"?" + +#, fuzzy +msgid "cmps_uninstall_inactive_confirm" +msgstr "The plugin \"%1$s\" can currently not be activated (\"%2$s\"). In this state plugins cannot be uninstalled completely. As only the core integration is reverted, plugin custom data may remain. Would you like to continue with the partial uninstall?" + +msgid "cmps_update" +msgstr "بروز رسانی" + +msgid "cmps_version" +msgstr "Version" + +msgid "database_is_uptodate" +msgstr "The database is up to date." + +msgid "no_changes" +msgstr "No changes" diff --git a/components/ILIAS/Component/lang/cmps_fr.po b/components/ILIAS/Component/lang/cmps_fr.po new file mode 100644 index 000000000000..44a9c3ed8512 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_fr.po @@ -0,0 +1,245 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Activer" + +msgid "cmps_active" +msgstr "Actif" + +msgid "cmps_add_new_rank" +msgstr "Position dans la liste Ajouter-un-nouvel-objet" + +msgid "cmps_available" +msgstr "Disponible" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +msgid "cmps_basic_files" +msgstr "Fichiers basiques" + +msgid "cmps_class_file" +msgstr "Fichier de Classe" + +msgid "cmps_component" +msgstr "Composant" + +msgid "cmps_configure" +msgstr "Configurer" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +msgid "cmps_current_version" +msgstr "Version actuelle" + +msgid "cmps_database" +msgstr "Base de données" + +msgid "cmps_db_update" +msgstr "Script de mise à jour de la BbD" + +msgid "cmps_deactivate" +msgstr "Désactiver" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +msgid "cmps_dir" +msgstr "Dossier" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +msgid "cmps_enable_creation" +msgstr "Autoriser Création" + +msgid "cmps_file_version" +msgstr "Mettre à jour la version du fichier" + +msgid "cmps_group" +msgstr "Groupe" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Version Max. ILIAS" + +msgid "cmps_ilias_min_version" +msgstr "Version Min. ILIAS" + +msgid "cmps_inactive" +msgstr "Inactif" + +msgid "cmps_install" +msgstr "Installer" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +msgid "cmps_lang_files" +msgstr "Fichier de langues" + +msgid "cmps_lang_prefix" +msgstr "Préfixe des variables de langue" + +msgid "cmps_languages" +msgstr "Langues" + +msgid "cmps_main_dir" +msgstr "Dossier Principal" + +msgid "cmps_missing" +msgstr "Manquant" + +msgid "cmps_module" +msgstr "Module" + +msgid "cmps_must_installed" +msgstr "Le composant doit être installé." + +msgid "cmps_name" +msgstr "Nom" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +msgid "cmps_needs_newer_ilias_version" +msgstr "Cette version de plugin fonctionne uniquement sur les nouvelles versions d'ILIAS. Veuillez mettre à jour ILIAS." + +msgid "cmps_needs_newer_plugin_version" +msgstr "Cette version d'ILIAS nécessite une nouvelle version de plugin. Veuillez mettre à jour le plugin." + +msgid "cmps_needs_update" +msgstr "Nécessite un update." + +msgid "cmps_needs_upgrade" +msgstr "La version de plugin actuellement installée est plus ancienne que la précédente installée. Veuillez mettre à jour le plugin." + +msgid "cmps_no_db_update_file_available" +msgstr "Pas de script de mise à jour de la BdD disponible." + +msgid "cmps_no_language_file_available" +msgstr "Pas de fichier de langue disponible." + +msgid "cmps_plugin" +msgstr "Plug-in" + +msgid "cmps_plugin_activated" +msgstr "Le plugin a été activé." + +msgid "cmps_plugin_db_prefixes" +msgstr "Préfixes de tables de BdD" + +msgid "cmps_plugin_deactivated" +msgstr "Le plugin a été désactivé." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +msgid "cmps_plugin_file" +msgstr "Fichier Plugin" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Préfixes de langage de plugin" + +msgid "cmps_plugin_slot" +msgstr "Slot du Plugin" + +msgid "cmps_plugin_uninstalled" +msgstr "Le plugin a été désinstallé." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +msgid "cmps_plugins" +msgstr "Plug-ins" + +msgid "cmps_refresh" +msgstr "Rafraà®chir" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +msgid "cmps_rep_object" +msgstr "Type d'Objet" + +msgid "cmps_repository_object_types" +msgstr "Types d'Objets" + +msgid "cmps_responsible" +msgstr "Responsable" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "Enregistrer Options" + +msgid "cmps_service" +msgstr "Service" + +msgid "cmps_show_details" +msgstr "Afficher détails" + +msgid "cmps_slots" +msgstr "Emplacements" + +msgid "cmps_status" +msgstr "Statut" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +msgid "cmps_uninstall" +msgstr "Désinstaller" + +msgid "cmps_uninstall_confirm" +msgstr "Etes-vous sûr de vouloir désinstaller le plugin \"%s\"?" + +msgid "cmps_uninstall_inactive_confirm" +msgstr "Le plug-in «%1$s» ne peut pas être activé pour le moment («%2$s»). Dans cet état, les plug-ins ne peuvent pas être installés complètement. Puisque seule l’intégration principale est inversée, les données personnalisées des plug-ins peuvent rester. Voulez-vous continuer la désinstallation partielle?" + +msgid "cmps_update" +msgstr "Mettre à jour" + +msgid "cmps_version" +msgstr "Version" + +msgid "database_is_uptodate" +msgstr "La base de donnée est à jour." + +msgid "no_changes" +msgstr "Aucun changement" diff --git a/components/ILIAS/Component/lang/cmps_hr.po b/components/ILIAS/Component/lang/cmps_hr.po new file mode 100644 index 000000000000..643c41b9b6a1 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_hr.po @@ -0,0 +1,245 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Aktiviraj" + +msgid "cmps_active" +msgstr "Aktivan" + +msgid "cmps_add_new_rank" +msgstr "Pozicija na popisu dodavanja novih objekata" + +msgid "cmps_available" +msgstr "Dostupno" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +msgid "cmps_basic_files" +msgstr "Osnovne datoteke" + +msgid "cmps_class_file" +msgstr "Datoteka razreda" + +msgid "cmps_component" +msgstr "Komponenta" + +msgid "cmps_configure" +msgstr "Konfiguriraj" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +msgid "cmps_current_version" +msgstr "Trenutačna verzija" + +msgid "cmps_database" +msgstr "Baza podataka" + +msgid "cmps_db_update" +msgstr "DB Skripta za ažuriranje" + +msgid "cmps_deactivate" +msgstr "Deaktiviraj" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +msgid "cmps_dir" +msgstr "Direktorij" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +msgid "cmps_enable_creation" +msgstr "Omogući kreiranje" + +msgid "cmps_file_version" +msgstr "Ažuriranje verzije datoteke" + +msgid "cmps_group" +msgstr "Skupina" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Maks. verzija ILIAS-a" + +msgid "cmps_ilias_min_version" +msgstr "Min. verzija ILIAS-a" + +msgid "cmps_inactive" +msgstr "Neaktivan" + +msgid "cmps_install" +msgstr "Instaliraj" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +msgid "cmps_lang_files" +msgstr "Jezične datoteke" + +msgid "cmps_lang_prefix" +msgstr "Prefiks jezičnih varijabli" + +msgid "cmps_languages" +msgstr "Jezici" + +msgid "cmps_main_dir" +msgstr "Glavni direktorij" + +msgid "cmps_missing" +msgstr "Nedostaje" + +msgid "cmps_module" +msgstr "Modul" + +msgid "cmps_must_installed" +msgstr "Komponenta se mora instalirati." + +msgid "cmps_name" +msgstr "Ime" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +msgid "cmps_needs_newer_ilias_version" +msgstr "Ova verzija dodatka radi samo na novijim verzijama ILIAS-a. Molimo nadogradite ILIAS." + +msgid "cmps_needs_newer_plugin_version" +msgstr "This ILIAS version needs a newer plugin version. Please upgrade the plugin." + +msgid "cmps_needs_update" +msgstr "Potrebno je ažuriranje." + +msgid "cmps_needs_upgrade" +msgstr "Trenutno instalirana verzija dodatka starija je od prethodno instalirane verzije. Molimo nadogradite dodatak." + +msgid "cmps_no_db_update_file_available" +msgstr "Nije dostupna skripta za ažuriranje baze podataka" + +msgid "cmps_no_language_file_available" +msgstr "Nije dostupna jezična datoteka." + +msgid "cmps_plugin" +msgstr "Dodatak" + +msgid "cmps_plugin_activated" +msgstr "Dodatak je aktiviran." + +msgid "cmps_plugin_db_prefixes" +msgstr "Prefiksi tablice baze podataka" + +msgid "cmps_plugin_deactivated" +msgstr "Dodatak je deaktiviran." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +msgid "cmps_plugin_file" +msgstr "Datoteka dodatka" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Dodatak jezičnih prefiksa" + +msgid "cmps_plugin_slot" +msgstr "Slot dodatka" + +msgid "cmps_plugin_uninstalled" +msgstr "Svi unosi povezani s jezikom i bazom podataka izbrisani su, a dodatak je neaktivan. Sada možete ukloniti direktorij i izvorni kod dodatka u direktoriju ‘Prilagođavanje’ kako biste dodatak definitivno deinstalirali." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +msgid "cmps_plugins" +msgstr "Dodaci" + +msgid "cmps_refresh" +msgstr "Osvježi jezike" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +msgid "cmps_rep_object" +msgstr "Tip objekta u repozitoriju" + +msgid "cmps_repository_object_types" +msgstr "Tipovi objekata u repozitoriju" + +msgid "cmps_responsible" +msgstr "Odgovoran" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "Spremi" + +msgid "cmps_service" +msgstr "Servis" + +msgid "cmps_show_details" +msgstr "Pokaži detalje" + +msgid "cmps_slots" +msgstr "Slotovi" + +msgid "cmps_status" +msgstr "Status" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +msgid "cmps_uninstall" +msgstr "Deinstaliraj" + +msgid "cmps_uninstall_confirm" +msgstr "Jeste li sigurni da želite deinstalirati dodatak \"%s\" i ukloniti sve povezane unose u bazu podataka?" + +msgid "cmps_uninstall_inactive_confirm" +msgstr "Dodatak \"%1$s\" trenutačno se ne može aktivirati (\"%2$s\"). U ovom stanju dodaci se ne mogu potpuno deinstalirati. Kako se briše samo integracija u sustav, vlastite datoteke dodataka mogu ostati. Želite li nastaviti s djelomičnom deinstalacijom?" + +msgid "cmps_update" +msgstr "Ažuriraj" + +msgid "cmps_version" +msgstr "Verzija" + +msgid "database_is_uptodate" +msgstr "Baza podataka je ažurirana." + +msgid "no_changes" +msgstr "Nema promjena" diff --git a/components/ILIAS/Component/lang/cmps_hu.po b/components/ILIAS/Component/lang/cmps_hu.po new file mode 100644 index 000000000000..1d69b181880c --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_hu.po @@ -0,0 +1,232 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Aktiválás" + +msgid "cmps_active" +msgstr "Aktív" + +msgid "cmps_add_new_rank" +msgstr "Pozíció az Új objektum létrehozása listában" + +msgid "cmps_available" +msgstr "Elérhető" + +msgid "cmps_available_version" +msgstr "Elérhető verzió" + +msgid "cmps_basic_files" +msgstr "Alapfájlok" + +msgid "cmps_class_file" +msgstr "Osztályfájl" + +msgid "cmps_component" +msgstr "Komponens" + +msgid "cmps_configure" +msgstr "Konfigurálás" + +msgid "cmps_current_db_version" +msgstr "Jelenlegi adatbázis-verzió" + +msgid "cmps_current_version" +msgstr "Jelenlegi verzió" + +msgid "cmps_database" +msgstr "Adatbázis" + +msgid "cmps_db_update" +msgstr "Adatbázis-frissítési szkript" + +msgid "cmps_deactivate" +msgstr "Deaktiválás" + +msgid "cmps_detailed_information" +msgstr "Részletes információ" + +msgid "cmps_dir" +msgstr "Mappa" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +msgid "cmps_enable_creation" +msgstr "Létrehozás engedélyezése" + +msgid "cmps_file_version" +msgstr "Frissítési fájlverzió" + +msgid "cmps_group" +msgstr "Csoport" + +msgid "cmps_id" +msgstr "Azonosító" + +msgid "cmps_ilias_max_version" +msgstr "Maximum ILIAS-verzió" + +msgid "cmps_ilias_min_version" +msgstr "Minimum ILIAS-verzió" + +msgid "cmps_inactive" +msgstr "Inaktív" + +msgid "cmps_install" +msgstr "Telepítés" + +msgid "cmps_is_active" +msgstr "Aktivált" + +msgid "cmps_is_installed" +msgstr "Telepített" + +msgid "cmps_lang_files" +msgstr "Nyelvi fájlok" + +msgid "cmps_lang_prefix" +msgstr "Nyelvi változó előtag" + +msgid "cmps_languages" +msgstr "Nyelvek" + +msgid "cmps_main_dir" +msgstr "Főmappa" + +msgid "cmps_missing" +msgstr "Hiányzik" + +msgid "cmps_module" +msgstr "Modul" + +msgid "cmps_must_installed" +msgstr "A komponenst telepíteni kell." + +msgid "cmps_name" +msgstr "Név" + +msgid "cmps_needs_matching_ilias_version" +msgstr "Ez a bővítmény nem működik ezen az ILIAS verzión." + +msgid "cmps_needs_newer_ilias_version" +msgstr "Ez a bővítményverzió csak újabb ILIAS-verziókon fut. Frissítse az ILIAS-t!" + +msgid "cmps_needs_newer_plugin_version" +msgstr "Ehhez az ILIAS-verzióhoz újabb bővítményverzió szükséges. Frissítse a bővítményt!" + +msgid "cmps_needs_update" +msgstr "Frissítés szükséges." + +msgid "cmps_needs_upgrade" +msgstr "A jelenleg telepített bővítmény verziója régebbi, mint egy korábban telepítetté. Frissítse a bővítményt!" + +msgid "cmps_no_db_update_file_available" +msgstr "Nem érhető el az adatbázis-frissítő szkript." + +msgid "cmps_no_language_file_available" +msgstr "Nem érhető el a nyelvi fájl." + +msgid "cmps_plugin" +msgstr "Bővítmény" + +msgid "cmps_plugin_activated" +msgstr "A bővítményt bekapcsolta." + +msgid "cmps_plugin_db_prefixes" +msgstr "Adatbázistábla előtag" + +msgid "cmps_plugin_deactivated" +msgstr "A bővítményt kikapcsolta." + +msgid "cmps_plugin_deinstalled" +msgstr "A bővítményt eltávolította." + +msgid "cmps_plugin_file" +msgstr "Bővítmény fájl" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Bővítmény nyelvi előtagok" + +msgid "cmps_plugin_slot" +msgstr "Bővítmény csatlakozás" + +msgid "cmps_plugin_uninstalled" +msgstr "Az összes nyelvi- és adatbázis-bejegyzést sikeresen eltávolította, és a bővítményt inaktiválta. Most már biztonságosan letávolíthatja a bővítmény - ‘Customizing’ mappa alatt található - fájljait/mappáit." + +msgid "cmps_plugin_updated" +msgstr "A bővítményt frissítette" + +msgid "cmps_plugins" +msgstr "Bővítmények" + +msgid "cmps_refresh" +msgstr "Frissítés" + +msgid "cmps_refresh_lng" +msgstr "Nyelv frissítés" + +msgid "cmps_rep_object" +msgstr "Tartalomtárban lévő objektumtípus" + +msgid "cmps_repository_object_types" +msgstr "ILIAS-objektum típusok" + +msgid "cmps_responsible" +msgstr "Felelős" + +msgid "cmps_responsible_mail" +msgstr "E-mail cím (Felelős)" + +msgid "cmps_save_options" +msgstr "Mentés" + +msgid "cmps_service" +msgstr "Szolgáltatás" + +msgid "cmps_show_details" +msgstr "Részletek megjelenítése" + +msgid "cmps_slots" +msgstr "Foglalatok" + +msgid "cmps_status" +msgstr "Állapot" + +msgid "cmps_supports_cli_setup" +msgstr "Parancssori telepítés támogatása" + +msgid "cmps_supports_export" +msgstr "Exportálás támogatása" + +msgid "cmps_supports_learning_progress" +msgstr "Tanulási haladás támogatása" + +msgid "cmps_uninstall" +msgstr "Eltávolítás" + +msgid "cmps_uninstall_confirm" +msgstr "Biztos, hogy eltávolítja a következő ‘%s’ bővítményt annak összes adatbázis-bejegyzésével együtt?" + +msgid "cmps_uninstall_inactive_confirm" +msgstr "‘%1$s’ bővítmény jelenleg nem aktiválható (‘%2$s’), így nem távolítható el teljesen, néhány adata a rendszerben marad. Biztos, hogy folytatja a részleges eltávolítást?" + +msgid "cmps_update" +msgstr "Frissítés" + +msgid "cmps_version" +msgstr "Verzió" + +msgid "database_is_uptodate" +msgstr "Az adatbázis naprakész." + +msgid "no_changes" +msgstr "Nincsenek változások" diff --git a/components/ILIAS/Component/lang/cmps_it.po b/components/ILIAS/Component/lang/cmps_it.po new file mode 100644 index 000000000000..575d6137c231 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_it.po @@ -0,0 +1,245 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Attivare" + +msgid "cmps_active" +msgstr "Attivo" + +msgid "cmps_add_new_rank" +msgstr "Posizione nel menù per Aggiungi-Nuovo-Oggetto" + +msgid "cmps_available" +msgstr "Disponibile" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +msgid "cmps_basic_files" +msgstr "File di base" + +msgid "cmps_class_file" +msgstr "File classe" + +msgid "cmps_component" +msgstr "Componenti" + +msgid "cmps_configure" +msgstr "Configura" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +msgid "cmps_current_version" +msgstr "Versione attuale" + +msgid "cmps_database" +msgstr "Database" + +msgid "cmps_db_update" +msgstr "Script per l'attualizzazione della banca dati" + +msgid "cmps_deactivate" +msgstr "Disattivato" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +msgid "cmps_dir" +msgstr "Directory" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +msgid "cmps_enable_creation" +msgstr "Consenti creazione" + +msgid "cmps_file_version" +msgstr "Aggiornamento del file" + +msgid "cmps_group" +msgstr "Gruppo" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Versione max. di ILIAS" + +msgid "cmps_ilias_min_version" +msgstr "Versione min. di ILIAS" + +msgid "cmps_inactive" +msgstr "Inattivo" + +msgid "cmps_install" +msgstr "Installa" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +msgid "cmps_lang_files" +msgstr "File di lingua" + +msgid "cmps_lang_prefix" +msgstr "Prefisso della variabile di testo" + +msgid "cmps_languages" +msgstr "Lingue" + +msgid "cmps_main_dir" +msgstr "Directory principale" + +msgid "cmps_missing" +msgstr "Mancante" + +msgid "cmps_module" +msgstr "Modulo" + +msgid "cmps_must_installed" +msgstr "Il componente deve essere installato." + +msgid "cmps_name" +msgstr "Nome" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +msgid "cmps_needs_newer_ilias_version" +msgstr "Questa versione del plugin funziona solo su una versione recente di ILIAS. Aggiornalo per favore." + +msgid "cmps_needs_newer_plugin_version" +msgstr "Questa versione di ILIAS necessita di un'aggiornamento del plugin. Procedi per favore." + +msgid "cmps_needs_update" +msgstr "Aggiornamento necessario" + +msgid "cmps_needs_upgrade" +msgstr "Il plugin che hai installato è di una versione precedente. Scarica la versione recente." + +msgid "cmps_no_db_update_file_available" +msgstr "Non è disponibile nessuno script per il DB" + +msgid "cmps_no_language_file_available" +msgstr "Nessun file di lingua disponibile" + +msgid "cmps_plugin" +msgstr "Plug-in" + +msgid "cmps_plugin_activated" +msgstr "Il plugin è stato attivato." + +msgid "cmps_plugin_db_prefixes" +msgstr "Prefissi delle tabelle del DB" + +msgid "cmps_plugin_deactivated" +msgstr "Il plugin è stato disattivato." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +msgid "cmps_plugin_file" +msgstr "File Plugin" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Plugin dei prefissi di lingua" + +msgid "cmps_plugin_slot" +msgstr "Plug-in fascia oraria" + +msgid "cmps_plugin_uninstalled" +msgstr "Il plugin è stato disinstallato." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +msgid "cmps_plugins" +msgstr "Plug-in" + +msgid "cmps_refresh" +msgstr "Aggiorna" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +msgid "cmps_rep_object" +msgstr "Oggetto del repository" + +msgid "cmps_repository_object_types" +msgstr "Tipi di oggetto repository" + +msgid "cmps_responsible" +msgstr "Responsabile" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "Salva le opzioni" + +msgid "cmps_service" +msgstr "Servizio" + +msgid "cmps_show_details" +msgstr "Mostra i dettagli" + +msgid "cmps_slots" +msgstr "Fasce orarie" + +msgid "cmps_status" +msgstr "Stato" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +msgid "cmps_uninstall" +msgstr "Disinstalla" + +msgid "cmps_uninstall_confirm" +msgstr "Sei sicuro di voler disinstallare il plugin \"%s\"?" + +msgid "cmps_uninstall_inactive_confirm" +msgstr "Il plug-in \"%1$s\" attualmente non può essere attivato (\"%2$s\"). In questo stato i plug-in non possono essere disinstallati completamente. Poiché solo l'integrazione di base viene ripristinata, i dati personalizzati del plug-in possono rimanere. Vuoi continuare con la disinstallazione parziale?" + +msgid "cmps_update" +msgstr "Aggiornamento" + +msgid "cmps_version" +msgstr "Versione" + +msgid "database_is_uptodate" +msgstr "Il database è aggiornato." + +msgid "no_changes" +msgstr "Nessuna modifica" diff --git a/components/ILIAS/Component/lang/cmps_ja.po b/components/ILIAS/Component/lang/cmps_ja.po new file mode 100644 index 000000000000..677a60918580 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_ja.po @@ -0,0 +1,232 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "有効にする" + +msgid "cmps_active" +msgstr "アクティブ" + +msgid "cmps_add_new_rank" +msgstr "新規追加オブジェクトラインの位置" + +msgid "cmps_available" +msgstr "利用可能" + +msgid "cmps_available_version" +msgstr "利用可能なバージョン" + +msgid "cmps_basic_files" +msgstr "基本ファイル" + +msgid "cmps_class_file" +msgstr "クラスファイル" + +msgid "cmps_component" +msgstr "構成要素" + +msgid "cmps_configure" +msgstr "構成" + +msgid "cmps_current_db_version" +msgstr "現在のDB-Version" + +msgid "cmps_current_version" +msgstr "現在のバージョン" + +msgid "cmps_database" +msgstr "データベース" + +msgid "cmps_db_update" +msgstr "DB更新スクリプト" + +msgid "cmps_deactivate" +msgstr "アクティブ解除" + +msgid "cmps_detailed_information" +msgstr "詳細を表示情報" + +msgid "cmps_dir" +msgstr "ディレクトリ" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +msgid "cmps_enable_creation" +msgstr "作成を有効にする" + +msgid "cmps_file_version" +msgstr "更新ファイルバージョン" + +msgid "cmps_group" +msgstr "グループ" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Max. ILIAS Version" + +msgid "cmps_ilias_min_version" +msgstr "Min. ILIAS Version" + +msgid "cmps_inactive" +msgstr "非アクティブ" + +msgid "cmps_install" +msgstr "インストール" + +msgid "cmps_is_active" +msgstr "アクティブ化" + +msgid "cmps_is_installed" +msgstr "インストール済" + +msgid "cmps_lang_files" +msgstr "言語ファイル" + +msgid "cmps_lang_prefix" +msgstr "言語変数プレフィックス" + +msgid "cmps_languages" +msgstr "言語" + +msgid "cmps_main_dir" +msgstr "メインディレクトリ" + +msgid "cmps_missing" +msgstr "不明" + +msgid "cmps_module" +msgstr "モジュール" + +msgid "cmps_must_installed" +msgstr "コンポーネントをインストールする必要があります。" + +msgid "cmps_name" +msgstr "名前" + +msgid "cmps_needs_matching_ilias_version" +msgstr "このプラグインは現在のILIASバージョンでは動作しません。" + +msgid "cmps_needs_newer_ilias_version" +msgstr "このプラグインバージョンは新しいILIASバージョンでのみ動作します。 ILIASをバージョンアップしてください。" + +msgid "cmps_needs_newer_plugin_version" +msgstr "このILIASのバージョンには新しいプラグインバージョンが必要です。プラグインを更新してください。" + +msgid "cmps_needs_update" +msgstr "アップグレードが必要" + +msgid "cmps_needs_upgrade" +msgstr "現在インストールされているプラグインバージョンは以前インストールしていたバージョンよりも古いものです。プラグインをアップグレードしてください。" + +msgid "cmps_no_db_update_file_available" +msgstr "DB更新スクリプトがありません。" + +msgid "cmps_no_language_file_available" +msgstr "言語ファイルがありません。" + +msgid "cmps_plugin" +msgstr "プラグイン" + +msgid "cmps_plugin_activated" +msgstr "プラグインがアクティグになりました。" + +msgid "cmps_plugin_db_prefixes" +msgstr "DBテーブルプレフィックス" + +msgid "cmps_plugin_deactivated" +msgstr "プラグインは解除されました。" + +msgid "cmps_plugin_deinstalled" +msgstr "このプラグインは削除されました。" + +msgid "cmps_plugin_file" +msgstr "プラグインファイル" + +msgid "cmps_plugin_lang_prefixes" +msgstr "プラグイン言語プレフィックス" + +msgid "cmps_plugin_slot" +msgstr "プラグインスロット" + +msgid "cmps_plugin_uninstalled" +msgstr "全ての言語とデータベース関連エントリーは削除されてプラグインは設定解除されました。完全にプラグインをアンインストールするために'Customizing'ディレクトリ内のプラグインのディレクトリとソースコードを削除できます。" + +msgid "cmps_plugin_updated" +msgstr "プラグインはupdateされました。" + +msgid "cmps_plugins" +msgstr "プラグイン" + +msgid "cmps_refresh" +msgstr "言語をリフレッシュ" + +msgid "cmps_refresh_lng" +msgstr "言語をリフレッシュ" + +msgid "cmps_rep_object" +msgstr "オブジェクトタイプのリポジトリ" + +msgid "cmps_repository_object_types" +msgstr "リポジトリオブジェクトタイプ" + +msgid "cmps_responsible" +msgstr "責任者" + +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "オプションを保存" + +msgid "cmps_service" +msgstr "サービス" + +msgid "cmps_show_details" +msgstr "詳細を表示" + +msgid "cmps_slots" +msgstr "スロット" + +msgid "cmps_status" +msgstr "ステータス" + +msgid "cmps_supports_cli_setup" +msgstr "CLI-Setupをサポート" + +msgid "cmps_supports_export" +msgstr "exportをサポート" + +msgid "cmps_supports_learning_progress" +msgstr "学習進捗をサポート" + +msgid "cmps_uninstall" +msgstr "アンインストール" + +msgid "cmps_uninstall_confirm" +msgstr "本当にプラグイン\"%s\"をアンインストールして関連の全てのデータベースエントリーを削除しますか?" + +msgid "cmps_uninstall_inactive_confirm" +msgstr "プラグイン\"%1$s\"は現在アクティブ (\"%2$s\")にできません。この状態ではプラグインを完全にアンインストールできません。コアのみの統合に戻りプラグインカスタムデータは残る可能性があります。部分アンインストールを続行しますか?" + +msgid "cmps_update" +msgstr "更新" + +msgid "cmps_version" +msgstr "バージョン" + +msgid "database_is_uptodate" +msgstr "データベースは最新です。" + +msgid "no_changes" +msgstr "変更なし" diff --git a/components/ILIAS/Component/lang/cmps_ka.po b/components/ILIAS/Component/lang/cmps_ka.po new file mode 100644 index 000000000000..73086c3ef1ef --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_ka.po @@ -0,0 +1,254 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "გააქტიურება" + +msgid "cmps_active" +msgstr "აქტიური" + +msgid "cmps_add_new_rank" +msgstr "ადგილი ახალი ობოექტის დამატების სიაში" + +msgid "cmps_available" +msgstr "შესაძლებელია" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +msgid "cmps_basic_files" +msgstr "ძირითადი ფაილები" + +msgid "cmps_class_file" +msgstr "კლასის ფაილი" + +msgid "cmps_component" +msgstr "კომპონენტი" + +msgid "cmps_configure" +msgstr "კონფიგურაცია" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +msgid "cmps_current_version" +msgstr "მიმდინარე ვერსია" + +msgid "cmps_database" +msgstr "მონაცემთა ბაზა" + +msgid "cmps_db_update" +msgstr "დი ბი განახლების ხელნაწერი" + +msgid "cmps_deactivate" +msgstr "დეაქტივაცია" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +msgid "cmps_dir" +msgstr "მიმართულება" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +#, fuzzy +msgid "cmps_enable_creation" +msgstr "Enable Creation" + +msgid "cmps_file_version" +msgstr "ფაილის ვერსიის განახლება" + +msgid "cmps_group" +msgstr "ჯგუფი" + +msgid "cmps_id" +msgstr "აი დი" + +msgid "cmps_ilias_max_version" +msgstr "მაქსიმალური . ილიასის ვერსია" + +msgid "cmps_ilias_min_version" +msgstr "მინ. ილიასის ვერსია" + +msgid "cmps_inactive" +msgstr "არააქტიური" + +#, fuzzy +msgid "cmps_install" +msgstr "Install" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +msgid "cmps_lang_files" +msgstr "ენის ფაილები" + +msgid "cmps_lang_prefix" +msgstr "ენის ცვლადების თავსართი" + +msgid "cmps_languages" +msgstr "ენები" + +msgid "cmps_main_dir" +msgstr "მთავარი მიმართულება" + +msgid "cmps_missing" +msgstr "დაკარგულია" + +msgid "cmps_module" +msgstr "მოდული" + +#, fuzzy +msgid "cmps_must_installed" +msgstr "The component must be installed." + +msgid "cmps_name" +msgstr "სახელი" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +msgid "cmps_needs_newer_ilias_version" +msgstr "ეს პროგრამული გაფართოვების ვერსია მოქმედებს მხოლოდ უახლეს ილიასის ვერსიაზე. გთხოვთ განაახლოთ ილიასი" + +msgid "cmps_needs_newer_plugin_version" +msgstr "ილიასის ამ ვერსიას სჭირდება უფრო ახალი პროგრამული გაფართოვების ვერსია. გთხოვთ განაახლოთ პროგრამული გაფართოების" + +msgid "cmps_needs_update" +msgstr "საჭიროა განახლება" + +msgid "cmps_needs_upgrade" +msgstr "პროგრამული გაფართოების ვერსია რომელიც ახლა დააინსტალირეთ უფრო ძველია ვიდრე წინა პროგრამული გაფართოვებისს ვერსია. გთხოვთ განაახლოთ პროგრამული გაფართოების" + +msgid "cmps_no_db_update_file_available" +msgstr "დი ბის განახლება შეუძლებელია" + +msgid "cmps_no_language_file_available" +msgstr "ენის ფაილები არ არის ხელმისსაწვდომი" + +msgid "cmps_plugin" +msgstr "პროგრამული გაფართოვება" + +msgid "cmps_plugin_activated" +msgstr "პროგრამული გაფართოვება გააქტიურებულია" + +msgid "cmps_plugin_db_prefixes" +msgstr "დი ბის მაგიდის თავსართები" + +msgid "cmps_plugin_deactivated" +msgstr "პროგრამული გაფართოვება არააქტიურია" + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +msgid "cmps_plugin_file" +msgstr "პროგრამული გაფართოვების ფაილი" + +msgid "cmps_plugin_lang_prefixes" +msgstr "ენის თავსართების პროგრამული გაფართოვება" + +msgid "cmps_plugin_slot" +msgstr "პროგრამული გაფართოვების კვალი" + +#, fuzzy +msgid "cmps_plugin_uninstalled" +msgstr "The plugin has been uninstalled." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +msgid "cmps_plugins" +msgstr "ჩანართები" + +msgid "cmps_refresh" +msgstr "განახლება" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +msgid "cmps_rep_object" +msgstr "სასაწყობე ობიექტების სახეობა" + +#, fuzzy +msgid "cmps_repository_object_types" +msgstr "Repository Object Types" + +msgid "cmps_responsible" +msgstr "პასუხისმგებელი" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "პარამეტრების შენახვა" + +msgid "cmps_service" +msgstr "სერვისი" + +msgid "cmps_show_details" +msgstr "დეტალების ჩვენება" + +#, fuzzy +msgid "cmps_slots" +msgstr "Slots" + +msgid "cmps_status" +msgstr "სტატუსი" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +#, fuzzy +msgid "cmps_uninstall" +msgstr "Uninstall" + +#, fuzzy +msgid "cmps_uninstall_confirm" +msgstr "Are you sure you want to uninstall the plugin \"%s\"?" + +#, fuzzy +msgid "cmps_uninstall_inactive_confirm" +msgstr "The plugin \"%1$s\" can currently not be activated (\"%2$s\"). In this state plugins cannot be uninstalled completely. As only the core integration is reverted, plugin custom data may remain. Would you like to continue with the partial uninstall?" + +msgid "cmps_update" +msgstr "განახლება" + +msgid "cmps_version" +msgstr "ვერსია" + +msgid "database_is_uptodate" +msgstr "მონაცემთა ბაზა განახლებულია" + +msgid "no_changes" +msgstr "ცვლილებები არ არის" diff --git a/components/ILIAS/Component/lang/cmps_lt.po b/components/ILIAS/Component/lang/cmps_lt.po new file mode 100644 index 000000000000..6078f001d543 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_lt.po @@ -0,0 +1,261 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Aktyvuoti" + +msgid "cmps_active" +msgstr "Aktyvu" + +#, fuzzy +msgid "cmps_add_new_rank" +msgstr "Position in Add-New-Object List" + +msgid "cmps_available" +msgstr "Pasiekiama" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +msgid "cmps_basic_files" +msgstr "Pagrindiniai Failai" + +msgid "cmps_class_file" +msgstr "Klasės Failas" + +msgid "cmps_component" +msgstr "Komponentas" + +#, fuzzy +msgid "cmps_configure" +msgstr "Configure" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +msgid "cmps_current_version" +msgstr "Versija" + +msgid "cmps_database" +msgstr "Duombazė" + +msgid "cmps_db_update" +msgstr "DB Atnaujinimo Skriptas" + +msgid "cmps_deactivate" +msgstr "Išjungti" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +msgid "cmps_dir" +msgstr "Katalogas" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +#, fuzzy +msgid "cmps_enable_creation" +msgstr "Enable Creation" + +msgid "cmps_file_version" +msgstr "Atnaujinti Failo Versiją" + +msgid "cmps_group" +msgstr "Grupė" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Maks. ILIAS Versija" + +msgid "cmps_ilias_min_version" +msgstr "Min. ILIAS Versija" + +msgid "cmps_inactive" +msgstr "Neaktyvu" + +#, fuzzy +msgid "cmps_install" +msgstr "Install" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +msgid "cmps_lang_files" +msgstr "Kalbos Failai" + +msgid "cmps_lang_prefix" +msgstr "Kalbos Kintamųjų Priešdėliai" + +msgid "cmps_languages" +msgstr "Kalbos" + +msgid "cmps_main_dir" +msgstr "Pagrindinis Katalogas" + +msgid "cmps_missing" +msgstr "Trūksta" + +msgid "cmps_module" +msgstr "Modulis" + +#, fuzzy +msgid "cmps_must_installed" +msgstr "The component must be installed." + +msgid "cmps_name" +msgstr "Pavadinimas" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +msgid "cmps_needs_newer_ilias_version" +msgstr "Šis įskiepis veikia tik naujesnėje ILIAS versijoje. Atnaujinkite ILIAS." + +msgid "cmps_needs_newer_plugin_version" +msgstr "Šiai ILIAS versijai reikia naujesnio įskiepio. Atnaujinkite įskiepį." + +msgid "cmps_needs_update" +msgstr "Reikia atnaujinti" + +msgid "cmps_needs_upgrade" +msgstr "Dabar diegiamas įskiepis yra senesnis už jau įdiegtą. Atnaujinkite įskiepį." + +msgid "cmps_no_db_update_file_available" +msgstr "Nėra DB atnaujinimo skripto" + +msgid "cmps_no_language_file_available" +msgstr "Nėra kalbos failo" + +msgid "cmps_plugin" +msgstr "Įskiepis" + +#, fuzzy +msgid "cmps_plugin_activated" +msgstr "The plugin has been activated." + +msgid "cmps_plugin_db_prefixes" +msgstr "DB Lentelės Priešdėliai" + +#, fuzzy +msgid "cmps_plugin_deactivated" +msgstr "The plugin has been deactivated." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +msgid "cmps_plugin_file" +msgstr "Įskiepio Failas" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Įskiepių Kalbos Priešdėliai" + +msgid "cmps_plugin_slot" +msgstr "Įskiepio Vieta" + +#, fuzzy +msgid "cmps_plugin_uninstalled" +msgstr "The plugin has been uninstalled." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +msgid "cmps_plugins" +msgstr "Įskiepiai" + +msgid "cmps_refresh" +msgstr "Atnaujinti" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +msgid "cmps_rep_object" +msgstr "Saugyklos Objekto Tipas" + +#, fuzzy +msgid "cmps_repository_object_types" +msgstr "Repository Object Types" + +#, fuzzy +msgid "cmps_responsible" +msgstr "Responsible" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "Išsaugoti Nustatymus" + +msgid "cmps_service" +msgstr "Tarnyba" + +msgid "cmps_show_details" +msgstr "Rodyti Detales" + +#, fuzzy +msgid "cmps_slots" +msgstr "Slots" + +msgid "cmps_status" +msgstr "Statusas" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +#, fuzzy +msgid "cmps_uninstall" +msgstr "Uninstall" + +#, fuzzy +msgid "cmps_uninstall_confirm" +msgstr "Are you sure you want to uninstall the plugin \"%s\"?" + +#, fuzzy +msgid "cmps_uninstall_inactive_confirm" +msgstr "The plugin \"%1$s\" can currently not be activated (\"%2$s\"). In this state plugins cannot be uninstalled completely. As only the core integration is reverted, plugin custom data may remain. Would you like to continue with the partial uninstall?" + +msgid "cmps_update" +msgstr "Naujinti" + +msgid "cmps_version" +msgstr "Versija" + +#, fuzzy +msgid "database_is_uptodate" +msgstr "Die Datenbank ist aktuell." + +#, fuzzy +msgid "no_changes" +msgstr "Keine Änderungen" diff --git a/components/ILIAS/Component/lang/cmps_nl.po b/components/ILIAS/Component/lang/cmps_nl.po new file mode 100644 index 000000000000..c4ed07f8c72a --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_nl.po @@ -0,0 +1,251 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Inschakelen" + +msgid "cmps_active" +msgstr "Actief" + +msgid "cmps_add_new_rank" +msgstr "Position in Add-New-Object List" + +msgid "cmps_available" +msgstr "Beschikbaar" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +msgid "cmps_basic_files" +msgstr "Standaard bestanden" + +msgid "cmps_class_file" +msgstr "Class File" + +msgid "cmps_component" +msgstr "Component" + +msgid "cmps_configure" +msgstr "Configureren" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +msgid "cmps_current_version" +msgstr "Huidige versie" + +msgid "cmps_database" +msgstr "Database" + +msgid "cmps_db_update" +msgstr "DB Update Script" + +msgid "cmps_deactivate" +msgstr "Uitschakelen" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +msgid "cmps_dir" +msgstr "Folder" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +msgid "cmps_enable_creation" +msgstr "Aanmaken toestaan" + +msgid "cmps_file_version" +msgstr "Update File Version" + +msgid "cmps_group" +msgstr "Groep" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Max. ILIAS Versie" + +msgid "cmps_ilias_min_version" +msgstr "Min. ILIAS Versie" + +msgid "cmps_inactive" +msgstr "Inactief" + +#, fuzzy +msgid "cmps_install" +msgstr "Install" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +msgid "cmps_lang_files" +msgstr "Taalbestanden" + +msgid "cmps_lang_prefix" +msgstr "Prefix taalvariabelen" + +msgid "cmps_languages" +msgstr "Talen" + +msgid "cmps_main_dir" +msgstr "Hoofdfolder" + +msgid "cmps_missing" +msgstr "Niet aanwezig" + +msgid "cmps_module" +msgstr "Module" + +#, fuzzy +msgid "cmps_must_installed" +msgstr "The component must be installed." + +msgid "cmps_name" +msgstr "Naam" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +msgid "cmps_needs_newer_ilias_version" +msgstr "This plugin version only runs on newer ILIAS versions. Please upgrade ILIAS." + +msgid "cmps_needs_newer_plugin_version" +msgstr "This ILIAS version needs a newer plugin version. Please upgrade the plugin." + +msgid "cmps_needs_update" +msgstr "Wijziging nodig." + +msgid "cmps_needs_upgrade" +msgstr "The plugin version currently installed is older than a previously installed version. Please upgrade the plugin." + +msgid "cmps_no_db_update_file_available" +msgstr "No DB update script available." + +msgid "cmps_no_language_file_available" +msgstr "No language file available." + +msgid "cmps_plugin" +msgstr "Plugin" + +msgid "cmps_plugin_activated" +msgstr "The plugin has been activated." + +msgid "cmps_plugin_db_prefixes" +msgstr "DB Table Prefixes" + +msgid "cmps_plugin_deactivated" +msgstr "The plugin has been deactivated." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +msgid "cmps_plugin_file" +msgstr "Plugin File" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Plugin Language Prefixes" + +msgid "cmps_plugin_slot" +msgstr "Plugin Slot" + +#, fuzzy +msgid "cmps_plugin_uninstalled" +msgstr "The plugin has been uninstalled." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +msgid "cmps_plugins" +msgstr "Plugins" + +msgid "cmps_refresh" +msgstr "Verversen" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +msgid "cmps_rep_object" +msgstr "Studiecentrum Object Type" + +msgid "cmps_repository_object_types" +msgstr "Studiecentrum objecttypes" + +msgid "cmps_responsible" +msgstr "Verantwoordelijk" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "Opties opslaan" + +msgid "cmps_service" +msgstr "Service" + +msgid "cmps_show_details" +msgstr "Tonen Details" + +msgid "cmps_slots" +msgstr "Openingen" + +msgid "cmps_status" +msgstr "Status" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +#, fuzzy +msgid "cmps_uninstall" +msgstr "Uninstall" + +#, fuzzy +msgid "cmps_uninstall_confirm" +msgstr "Are you sure you want to uninstall the plugin \"%s\"?" + +#, fuzzy +msgid "cmps_uninstall_inactive_confirm" +msgstr "The plugin \"%1$s\" can currently not be activated (\"%2$s\"). In this state plugins cannot be uninstalled completely. As only the core integration is reverted, plugin custom data may remain. Would you like to continue with the partial uninstall?" + +msgid "cmps_update" +msgstr "Update" + +msgid "cmps_version" +msgstr "Version" + +msgid "database_is_uptodate" +msgstr "De database is bijgewerkt" + +msgid "no_changes" +msgstr "Geen veranderingen" diff --git a/components/ILIAS/Component/lang/cmps_pl.po b/components/ILIAS/Component/lang/cmps_pl.po new file mode 100644 index 000000000000..9001042e3898 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_pl.po @@ -0,0 +1,245 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Aktywuj" + +msgid "cmps_active" +msgstr "Aktywny" + +msgid "cmps_add_new_rank" +msgstr "Jesteś w liście wyboru dla obiektów, które należy dodać" + +msgid "cmps_available" +msgstr "Dostępne" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +msgid "cmps_basic_files" +msgstr "Pliki podstawowe" + +msgid "cmps_class_file" +msgstr "Pliki klas" + +msgid "cmps_component" +msgstr "Elementy" + +msgid "cmps_configure" +msgstr "Konfiguruj" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +msgid "cmps_current_version" +msgstr "Aktualna wersja" + +msgid "cmps_database" +msgstr "Baza danych" + +msgid "cmps_db_update" +msgstr "Skrypt do aktualizacji bazy danych" + +msgid "cmps_deactivate" +msgstr "Deaktywuj" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +msgid "cmps_dir" +msgstr "Indeks" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +msgid "cmps_enable_creation" +msgstr "Włącz tworzenie" + +msgid "cmps_file_version" +msgstr "Zaktualizuj wersję pliku" + +msgid "cmps_group" +msgstr "Grupa" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Maksymalna wersja ILIAS" + +msgid "cmps_ilias_min_version" +msgstr "Minimalna wersja ILIAS" + +msgid "cmps_inactive" +msgstr "Nieaktywny" + +msgid "cmps_install" +msgstr "Instaluj" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +msgid "cmps_lang_files" +msgstr "Plik językowy" + +msgid "cmps_lang_prefix" +msgstr "Prefiks dla zmiennej języków" + +msgid "cmps_languages" +msgstr "Języki" + +msgid "cmps_main_dir" +msgstr "Indeks główny" + +msgid "cmps_missing" +msgstr "Brak" + +msgid "cmps_module" +msgstr "Moduł" + +msgid "cmps_must_installed" +msgstr "Należy zainstalować element." + +msgid "cmps_name" +msgstr "Nazwa" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +msgid "cmps_needs_newer_ilias_version" +msgstr "Tej wtyczki można używać wyłącznie z nowszą wersją ILIAS. Zaktualizuj swoją wersję ILIAS." + +msgid "cmps_needs_newer_plugin_version" +msgstr "Ta wersja ILIAS potrzebują nowszą wersję wtyczki. Zaktualizuj wtyczkę." + +msgid "cmps_needs_update" +msgstr "Konieczna jest aktualizacja" + +msgid "cmps_needs_upgrade" +msgstr "Aktualnie zainstalowana wtyczka jest starsza niż poprzednia wersja. Zainstaluj aktualną wersję wtyczki." + +msgid "cmps_no_db_update_file_available" +msgstr "Skrypt dla aktualizacji bazy danych nie jest dostępny" + +msgid "cmps_no_language_file_available" +msgstr "Brak dostępnego pliku językowego" + +msgid "cmps_plugin" +msgstr "Wtyczka" + +msgid "cmps_plugin_activated" +msgstr "Włączono wtyczkę." + +msgid "cmps_plugin_db_prefixes" +msgstr "Prefiksy dla tabeli bazy danych" + +msgid "cmps_plugin_deactivated" +msgstr "Wyłączono wtyczkę." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +msgid "cmps_plugin_file" +msgstr "Plik wtyczki" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Prefiksy językowe wtyczki" + +msgid "cmps_plugin_slot" +msgstr "Interfejs wtyczki" + +msgid "cmps_plugin_uninstalled" +msgstr "Wszystkie wpisy językowe i w bazie danych, które odnoszą się do wtyczki, zostały usunięte, a wtyczka odinstalowana. Teraz możesz usunąć indeks i kod źródłowy wtyczki z indeksu ‘Customizing’, aby ostatecznie odinstalować wtyczkę." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +msgid "cmps_plugins" +msgstr "Wtyczki" + +msgid "cmps_refresh" +msgstr "Ponownie załaduj język" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +msgid "cmps_rep_object" +msgstr "Typ obiektu w dostępnych zasobach" + +msgid "cmps_repository_object_types" +msgstr "Typy obiektów w dostępnych zasobach" + +msgid "cmps_responsible" +msgstr "Odpowiedzialny" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "Zapisz" + +msgid "cmps_service" +msgstr "Serwis" + +msgid "cmps_show_details" +msgstr "Pokaż szczegóły" + +msgid "cmps_slots" +msgstr "Sloty" + +msgid "cmps_status" +msgstr "Status" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +msgid "cmps_uninstall" +msgstr "Odinstaluj" + +msgid "cmps_uninstall_confirm" +msgstr "Czy naprawdę chcesz odinstalować wtyczkę \"%s\" i usunąć wszystkie przydzielone wpisy w bazie danych?" + +msgid "cmps_uninstall_inactive_confirm" +msgstr "Aktualnie nie można aktywować wtyczki \"%1$s\" (\"%2$s\"). Ten status nie pozwala na całkowite odinstalowanie wtyczek. Ponieważ usuwana jest wyłącznie integracja systemowa, istnieje możliwość, że zostaną zachowane niektóre dane wtyczek. Czy chcesz kontynuować częściowe odinstalowanie?" + +msgid "cmps_update" +msgstr "Zaktualizuj" + +msgid "cmps_version" +msgstr "Wersja" + +msgid "database_is_uptodate" +msgstr "Baza danych jest aktualna." + +msgid "no_changes" +msgstr "Brak zmian" diff --git a/components/ILIAS/Component/lang/cmps_pt.po b/components/ILIAS/Component/lang/cmps_pt.po new file mode 100644 index 000000000000..a70605414bca --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_pt.po @@ -0,0 +1,245 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Verifique o seu ficheiro de idioma" + +msgid "cmps_active" +msgstr "Verificar todos os idiomas" + +msgid "cmps_add_new_rank" +msgstr "Posição em lista Adicionar novos objetos" + +msgid "cmps_available" +msgstr "Verificação do weblink" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +msgid "cmps_basic_files" +msgstr "Se estiver ativado, todos os links externos nos módulos de aprendizagem ILIAS serão verificados quanto á sua ativação." + +msgid "cmps_class_file" +msgstr "Verificar as contas de utilizador" + +msgid "cmps_component" +msgstr "Se estiver ativado, todos os utilizadores cujas contas expiram serão informados por e-mail duas semanas antes. Além disso, todos os utilizadores que não confirmaram a sua conta depois de um registo com confirmação de e-mail serão apagados." + +msgid "cmps_configure" +msgstr "Configurar" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +msgid "cmps_current_version" +msgstr "Verificar links de web" + +msgid "cmps_database" +msgstr "Se estiver ativado, todos os weblinks serão verificados quanto à sua ativação." + +msgid "cmps_db_update" +msgstr "Mudar palavra-passe da pasta web" + +msgid "cmps_deactivate" +msgstr "Mudar palavra-passe ILIAS" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +msgid "cmps_dir" +msgstr "Mudar palavra-passe" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +msgid "cmps_enable_creation" +msgstr "Ativar criação" + +msgid "cmps_file_version" +msgstr "Atualizar versão de ficheiro" + +msgid "cmps_group" +msgstr "Selecione seu idioma" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Selecione apenas um idioma" + +msgid "cmps_ilias_min_version" +msgstr "Acesso de leitura à administração da sala de chat" + +msgid "cmps_inactive" +msgstr "A administração da sala de chat está visível" + +msgid "cmps_install" +msgstr "Instalar" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +msgid "cmps_lang_files" +msgstr "Copiar sala de chat" + +msgid "cmps_lang_prefix" +msgstr "Cidade, estado" + +msgid "cmps_languages" +msgstr "Editar administração da sala de chat" + +msgid "cmps_main_dir" +msgstr "Limpar" + +msgid "cmps_missing" +msgstr "Limpar área de transferência" + +msgid "cmps_module" +msgstr "Cliente" + +msgid "cmps_must_installed" +msgstr "O componente tem de estar instalado." + +msgid "cmps_name" +msgstr "ID do cliente" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +msgid "cmps_needs_newer_ilias_version" +msgstr "Esta versão de plugin apenas funciona em versões mais recentes de ILIAS. Atualize o ILIAS." + +msgid "cmps_needs_newer_plugin_version" +msgstr "Esta versão de ILIAS requer uma versão de plugin mais recente. Atualize o plugin." + +msgid "cmps_needs_update" +msgstr "IP do cliente" + +msgid "cmps_needs_upgrade" +msgstr "A versão de plugin atualmente instalada é mais antiga do que a versão anteriormente instalada. Atualize o plugin." + +msgid "cmps_no_db_update_file_available" +msgstr "Nenhum script de atualização DB disponível." + +msgid "cmps_no_language_file_available" +msgstr "Nenhum ficheiro de idioma disponível." + +msgid "cmps_plugin" +msgstr "Plugin" + +msgid "cmps_plugin_activated" +msgstr "O plugin foi ativado." + +msgid "cmps_plugin_db_prefixes" +msgstr "Fechar" + +msgid "cmps_plugin_deactivated" +msgstr "O plugin foi desativado." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +msgid "cmps_plugin_file" +msgstr "(%s Novo)" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Colapsado" + +msgid "cmps_plugin_slot" +msgstr "Colunas" + +msgid "cmps_plugin_uninstalled" +msgstr "Separado por vírgulas" + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +msgid "cmps_plugins" +msgstr "Plugins" + +msgid "cmps_refresh" +msgstr "Comentário" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +msgid "cmps_rep_object" +msgstr "Compor" + +msgid "cmps_repository_object_types" +msgstr "Tipos de objeto do repositório" + +msgid "cmps_responsible" +msgstr "Confirmar" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "Contacto" + +msgid "cmps_service" +msgstr "Informação de contacto" + +msgid "cmps_show_details" +msgstr "Contactar a Assistência Técnica" + +msgid "cmps_slots" +msgstr "Slots" + +msgid "cmps_status" +msgstr "Estado" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +msgid "cmps_uninstall" +msgstr "Desinstalar" + +msgid "cmps_uninstall_confirm" +msgstr "Conteúdo" + +msgid "cmps_uninstall_inactive_confirm" +msgstr "O plugin \"%1$s\" atualmente não pode ser ativado (\"%2$s\"). Neste estado, os plugins não podem ser desinstalados completamente. Como apenas a integração nuclear é revertida, os dados personalizados do plugin podem permanecer. Quer continuar com a desinstalação parcial?" + +msgid "cmps_update" +msgstr "Atualizar" + +msgid "cmps_version" +msgstr "Versão" + +msgid "database_is_uptodate" +msgstr "Estilos de conteúdo" + +msgid "no_changes" +msgstr "Contexto" diff --git a/components/ILIAS/Component/lang/cmps_ro.po b/components/ILIAS/Component/lang/cmps_ro.po new file mode 100644 index 000000000000..573e4a21fe88 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_ro.po @@ -0,0 +1,305 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: cmps\n" + +#, fuzzy +msgid "cmps_activate" +msgstr "Activate" + +#, fuzzy +msgid "cmps_active" +msgstr "Active" + +#, fuzzy +msgid "cmps_add_new_rank" +msgstr "Position in Add-New-Object List" + +#, fuzzy +msgid "cmps_available" +msgstr "Available" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +#, fuzzy +msgid "cmps_basic_files" +msgstr "Basic Files" + +#, fuzzy +msgid "cmps_class_file" +msgstr "Class File" + +#, fuzzy +msgid "cmps_component" +msgstr "Component" + +#, fuzzy +msgid "cmps_configure" +msgstr "Configure" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +#, fuzzy +msgid "cmps_current_version" +msgstr "Current Version" + +#, fuzzy +msgid "cmps_database" +msgstr "Database" + +#, fuzzy +msgid "cmps_db_update" +msgstr "DB Update Script" + +#, fuzzy +msgid "cmps_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +#, fuzzy +msgid "cmps_dir" +msgstr "Directory" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +#, fuzzy +msgid "cmps_enable_creation" +msgstr "Enable Creation" + +#, fuzzy +msgid "cmps_file_version" +msgstr "Update File Version" + +#, fuzzy +msgid "cmps_group" +msgstr "Group" + +#, fuzzy +msgid "cmps_id" +msgstr "ID" + +#, fuzzy +msgid "cmps_ilias_max_version" +msgstr "Max. ILIAS Version" + +#, fuzzy +msgid "cmps_ilias_min_version" +msgstr "Min. ILIAS Version" + +#, fuzzy +msgid "cmps_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cmps_install" +msgstr "Install" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +#, fuzzy +msgid "cmps_lang_files" +msgstr "Language Files" + +#, fuzzy +msgid "cmps_lang_prefix" +msgstr "Language Variables Prefix" + +#, fuzzy +msgid "cmps_languages" +msgstr "Languages" + +#, fuzzy +msgid "cmps_main_dir" +msgstr "Main Directory" + +#, fuzzy +msgid "cmps_missing" +msgstr "Missing" + +#, fuzzy +msgid "cmps_module" +msgstr "Module" + +#, fuzzy +msgid "cmps_must_installed" +msgstr "The component must be installed." + +#, fuzzy +msgid "cmps_name" +msgstr "Name" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +#, fuzzy +msgid "cmps_needs_newer_ilias_version" +msgstr "This plugin version only runs on newer ILIAS versions. Please upgrade ILIAS." + +#, fuzzy +msgid "cmps_needs_newer_plugin_version" +msgstr "This ILIAS version needs a newer plugin version. Please upgrade the plugin." + +#, fuzzy +msgid "cmps_needs_update" +msgstr "Needs update." + +#, fuzzy +msgid "cmps_needs_upgrade" +msgstr "The plugin version currently installed is older than a previously installed version. Please upgrade the plugin." + +#, fuzzy +msgid "cmps_no_db_update_file_available" +msgstr "No DB update script available." + +#, fuzzy +msgid "cmps_no_language_file_available" +msgstr "No language file available." + +#, fuzzy +msgid "cmps_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "cmps_plugin_activated" +msgstr "The plugin has been activated." + +#, fuzzy +msgid "cmps_plugin_db_prefixes" +msgstr "DB Table Prefixes" + +#, fuzzy +msgid "cmps_plugin_deactivated" +msgstr "The plugin has been deactivated." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +#, fuzzy +msgid "cmps_plugin_file" +msgstr "Plugin File" + +#, fuzzy +msgid "cmps_plugin_lang_prefixes" +msgstr "Plugin Language Prefixes" + +#, fuzzy +msgid "cmps_plugin_slot" +msgstr "Plugin Slot" + +#, fuzzy +msgid "cmps_plugin_uninstalled" +msgstr "The plugin has been uninstalled." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +#, fuzzy +msgid "cmps_plugins" +msgstr "Plugins" + +#, fuzzy +msgid "cmps_refresh" +msgstr "Refresh" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +#, fuzzy +msgid "cmps_rep_object" +msgstr "Repository Object Type" + +#, fuzzy +msgid "cmps_repository_object_types" +msgstr "Repository Object Types" + +#, fuzzy +msgid "cmps_responsible" +msgstr "Responsible" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +#, fuzzy +msgid "cmps_save_options" +msgstr "Save Options" + +#, fuzzy +msgid "cmps_service" +msgstr "Service" + +#, fuzzy +msgid "cmps_show_details" +msgstr "Show Details" + +#, fuzzy +msgid "cmps_slots" +msgstr "Slots" + +#, fuzzy +msgid "cmps_status" +msgstr "Status" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +#, fuzzy +msgid "cmps_uninstall" +msgstr "Uninstall" + +#, fuzzy +msgid "cmps_uninstall_confirm" +msgstr "Are you sure you want to uninstall the plugin \"%s\"?" + +#, fuzzy +msgid "cmps_uninstall_inactive_confirm" +msgstr "The plugin \"%1$s\" can currently not be activated (\"%2$s\"). In this state plugins cannot be uninstalled completely. As only the core integration is reverted, plugin custom data may remain. Would you like to continue with the partial uninstall?" + +#, fuzzy +msgid "cmps_update" +msgstr "Update" + +#, fuzzy +msgid "cmps_version" +msgstr "Version" + +#, fuzzy +msgid "database_is_uptodate" +msgstr "Die Datenbank ist aktuell." + +#, fuzzy +msgid "no_changes" +msgstr "Keine Änderungen" diff --git a/components/ILIAS/Component/lang/cmps_ru.po b/components/ILIAS/Component/lang/cmps_ru.po new file mode 100644 index 000000000000..66795fa51992 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_ru.po @@ -0,0 +1,251 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Activate" + +msgid "cmps_active" +msgstr "Active" + +msgid "cmps_add_new_rank" +msgstr "Position in Add-New-Object List" + +msgid "cmps_available" +msgstr "Available" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +msgid "cmps_basic_files" +msgstr "Basic Files" + +msgid "cmps_class_file" +msgstr "Class File" + +msgid "cmps_component" +msgstr "Component" + +msgid "cmps_configure" +msgstr "Configure" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +msgid "cmps_current_version" +msgstr "Current Version" + +msgid "cmps_database" +msgstr "Database" + +msgid "cmps_db_update" +msgstr "DB Update Script" + +msgid "cmps_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +msgid "cmps_dir" +msgstr "Директория" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +msgid "cmps_enable_creation" +msgstr "Enable Creation" + +msgid "cmps_file_version" +msgstr "Update File Version" + +msgid "cmps_group" +msgstr "Group" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Max. ILIAS Version" + +msgid "cmps_ilias_min_version" +msgstr "Min. ILIAS Version" + +msgid "cmps_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cmps_install" +msgstr "Install" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +msgid "cmps_lang_files" +msgstr "Language Files" + +msgid "cmps_lang_prefix" +msgstr "Language Variables Prefix" + +msgid "cmps_languages" +msgstr "Languages" + +msgid "cmps_main_dir" +msgstr "Главная директория" + +msgid "cmps_missing" +msgstr "Missing" + +msgid "cmps_module" +msgstr "Module" + +#, fuzzy +msgid "cmps_must_installed" +msgstr "The component must be installed." + +msgid "cmps_name" +msgstr "Name" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +msgid "cmps_needs_newer_ilias_version" +msgstr "This plugin version only runs on newer ILIAS versions. Please upgrade ILIAS." + +msgid "cmps_needs_newer_plugin_version" +msgstr "This ILIAS version needs a newer plugin version. Please upgrade the plugin." + +msgid "cmps_needs_update" +msgstr "Needs update." + +msgid "cmps_needs_upgrade" +msgstr "The plugin version currently installed is older than a previously installed version. Please upgrade the plugin." + +msgid "cmps_no_db_update_file_available" +msgstr "No DB update script available." + +msgid "cmps_no_language_file_available" +msgstr "No language file available." + +msgid "cmps_plugin" +msgstr "Plugin" + +msgid "cmps_plugin_activated" +msgstr "The plugin has been activated." + +msgid "cmps_plugin_db_prefixes" +msgstr "DB Table Prefixes" + +msgid "cmps_plugin_deactivated" +msgstr "The plugin has been deactivated." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +msgid "cmps_plugin_file" +msgstr "Plugin File" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Plugin Language Prefixes" + +msgid "cmps_plugin_slot" +msgstr "Слот плагина" + +#, fuzzy +msgid "cmps_plugin_uninstalled" +msgstr "The plugin has been uninstalled." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +msgid "cmps_plugins" +msgstr "Плагины" + +msgid "cmps_refresh" +msgstr "Refresh" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +msgid "cmps_rep_object" +msgstr "Repository Object Type" + +msgid "cmps_repository_object_types" +msgstr "Repository Object Types" + +msgid "cmps_responsible" +msgstr "Responsible" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "Save Options" + +msgid "cmps_service" +msgstr "Service" + +msgid "cmps_show_details" +msgstr "Show Details" + +msgid "cmps_slots" +msgstr "Slots" + +msgid "cmps_status" +msgstr "Status" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +#, fuzzy +msgid "cmps_uninstall" +msgstr "Uninstall" + +#, fuzzy +msgid "cmps_uninstall_confirm" +msgstr "Are you sure you want to uninstall the plugin \"%s\"?" + +#, fuzzy +msgid "cmps_uninstall_inactive_confirm" +msgstr "The plugin \"%1$s\" can currently not be activated (\"%2$s\"). In this state plugins cannot be uninstalled completely. As only the core integration is reverted, plugin custom data may remain. Would you like to continue with the partial uninstall?" + +msgid "cmps_update" +msgstr "Update" + +msgid "cmps_version" +msgstr "Version" + +msgid "database_is_uptodate" +msgstr "Die Datenbank ist aktuell." + +msgid "no_changes" +msgstr "Keine Änderungen" diff --git a/components/ILIAS/Component/lang/cmps_sk.po b/components/ILIAS/Component/lang/cmps_sk.po new file mode 100644 index 000000000000..cfe193783c77 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_sk.po @@ -0,0 +1,254 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Aktivovat" + +msgid "cmps_active" +msgstr "Aktivní" + +msgid "cmps_add_new_rank" +msgstr "Pozice v seznamu \"Přidat nový objekt\"" + +msgid "cmps_available" +msgstr "Dostupné" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +msgid "cmps_basic_files" +msgstr "Základní soubory" + +msgid "cmps_class_file" +msgstr "Soubor třídy" + +msgid "cmps_component" +msgstr "Komponenta" + +msgid "cmps_configure" +msgstr "Konfigurovat" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +msgid "cmps_current_version" +msgstr "Aktuální verze" + +msgid "cmps_database" +msgstr "Databáze" + +msgid "cmps_db_update" +msgstr "Skript aktualizace DB" + +msgid "cmps_deactivate" +msgstr "Deaktivovat" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +msgid "cmps_dir" +msgstr "Adresář" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +#, fuzzy +msgid "cmps_enable_creation" +msgstr "Enable Creation" + +msgid "cmps_file_version" +msgstr "Verze akualizačního souboru" + +msgid "cmps_group" +msgstr "Skupina" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Max. verze ILIAS" + +msgid "cmps_ilias_min_version" +msgstr "Min. verze ILIAS" + +msgid "cmps_inactive" +msgstr "Neaktivní" + +#, fuzzy +msgid "cmps_install" +msgstr "Install" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +msgid "cmps_lang_files" +msgstr "Soubory jazyků" + +msgid "cmps_lang_prefix" +msgstr "Označení jazykových proměnných" + +msgid "cmps_languages" +msgstr "Jazyky" + +msgid "cmps_main_dir" +msgstr "Hlavní adresář" + +msgid "cmps_missing" +msgstr "Chybí" + +msgid "cmps_module" +msgstr "Modul" + +#, fuzzy +msgid "cmps_must_installed" +msgstr "The component must be installed." + +msgid "cmps_name" +msgstr "Název" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +msgid "cmps_needs_newer_ilias_version" +msgstr "Tato verze pluginu běží jen na novější verzi ILIAS. Aktualizujte prosím ILIAS." + +msgid "cmps_needs_newer_plugin_version" +msgstr "Tato verze ILIAS vyžaduje novější verzi zásuvného souboru. Aktualizujte prosím plugin." + +msgid "cmps_needs_update" +msgstr "Vyžaduje aktualizaci." + +msgid "cmps_needs_upgrade" +msgstr "Verze pluginu kterou instalujete je starší než nainstalovaná verze. Aktualizujte prosím plugin." + +msgid "cmps_no_db_update_file_available" +msgstr "Není dostupný žádný skript aktualizace DB." + +msgid "cmps_no_language_file_available" +msgstr "Žádný jazykový soubor není dostupný." + +msgid "cmps_plugin" +msgstr "Plugin" + +msgid "cmps_plugin_activated" +msgstr "Plugin byl aktivován." + +msgid "cmps_plugin_db_prefixes" +msgstr "Označení tabulek DB" + +msgid "cmps_plugin_deactivated" +msgstr "Plugin byl deaktivován." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +msgid "cmps_plugin_file" +msgstr "Soubor pluginu" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Označení jazykových pluginů" + +msgid "cmps_plugin_slot" +msgstr "Slot pluginu" + +#, fuzzy +msgid "cmps_plugin_uninstalled" +msgstr "The plugin has been uninstalled." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +msgid "cmps_plugins" +msgstr "Pluginy" + +msgid "cmps_refresh" +msgstr "Obnovení" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +msgid "cmps_rep_object" +msgstr "Typ objektu úložiště" + +#, fuzzy +msgid "cmps_repository_object_types" +msgstr "Repository Object Types" + +msgid "cmps_responsible" +msgstr "Zodpovědný" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "Uložit nastavení" + +msgid "cmps_service" +msgstr "Služba" + +msgid "cmps_show_details" +msgstr "Zobrazit detaily" + +#, fuzzy +msgid "cmps_slots" +msgstr "Slots" + +msgid "cmps_status" +msgstr "Status" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +#, fuzzy +msgid "cmps_uninstall" +msgstr "Uninstall" + +#, fuzzy +msgid "cmps_uninstall_confirm" +msgstr "Are you sure you want to uninstall the plugin \"%s\"?" + +#, fuzzy +msgid "cmps_uninstall_inactive_confirm" +msgstr "The plugin \"%1$s\" can currently not be activated (\"%2$s\"). In this state plugins cannot be uninstalled completely. As only the core integration is reverted, plugin custom data may remain. Would you like to continue with the partial uninstall?" + +msgid "cmps_update" +msgstr "Akualizovat" + +msgid "cmps_version" +msgstr "Verze" + +msgid "database_is_uptodate" +msgstr "Tato databáze je aktuální." + +msgid "no_changes" +msgstr "Žádné změny" diff --git a/components/ILIAS/Component/lang/cmps_sl.po b/components/ILIAS/Component/lang/cmps_sl.po new file mode 100644 index 000000000000..8643d8aff74d --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_sl.po @@ -0,0 +1,245 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Aktiviraj" + +msgid "cmps_active" +msgstr "Aktivno" + +msgid "cmps_add_new_rank" +msgstr "Položaj na izbirnem seznamu objektov za dodajanje" + +msgid "cmps_available" +msgstr "Razpoložljivo" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +msgid "cmps_basic_files" +msgstr "Osnovne datoteke" + +msgid "cmps_class_file" +msgstr "Razredna datoteka" + +msgid "cmps_component" +msgstr "Komponenta" + +msgid "cmps_configure" +msgstr "Konfiguriraj" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +msgid "cmps_current_version" +msgstr "Aktualna različica" + +msgid "cmps_database" +msgstr "Baza podatkov" + +msgid "cmps_db_update" +msgstr "Skripta za posodobitev baze podatkov" + +msgid "cmps_deactivate" +msgstr "Onemogoči" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +msgid "cmps_dir" +msgstr "Seznam" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +msgid "cmps_enable_creation" +msgstr "Vključi ustvarjanje" + +msgid "cmps_file_version" +msgstr "Posodobi različico datoteke" + +msgid "cmps_group" +msgstr "Skupina" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Maksimalna različica ILIAS" + +msgid "cmps_ilias_min_version" +msgstr "Minimalna različica ILIAS" + +msgid "cmps_inactive" +msgstr "Neaktiven" + +msgid "cmps_install" +msgstr "Namesti" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +msgid "cmps_lang_files" +msgstr "Jezikovna datoteka" + +msgid "cmps_lang_prefix" +msgstr "Predpona jezikovnih spremenljivk" + +msgid "cmps_languages" +msgstr "Jeziki" + +msgid "cmps_main_dir" +msgstr "Glavni seznam" + +msgid "cmps_missing" +msgstr "Manjka" + +msgid "cmps_module" +msgstr "Module" + +msgid "cmps_must_installed" +msgstr "Komponenta mora biti nameščena." + +msgid "cmps_name" +msgstr "Ime" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +msgid "cmps_needs_newer_ilias_version" +msgstr "Ta vtičnik se lahko uporablja samo z novejšo različico ILIAS. Posodobite različico ILIAS." + +msgid "cmps_needs_newer_plugin_version" +msgstr "Ta različica ILIAS potrebuje novejšo različico vtičnika. Posodobite vtičnik." + +msgid "cmps_needs_update" +msgstr "Potrebna je posodobitev" + +msgid "cmps_needs_upgrade" +msgstr "Trenutno nameščena različica vtičnika je starejša od predhodno nameščene. Namestite aktualen vtičnik." + +msgid "cmps_no_db_update_file_available" +msgstr "Skripte za posodobitev baze podatkov ni na voljo" + +msgid "cmps_no_language_file_available" +msgstr "Nobena jezikovna datoteka ni na voljo" + +msgid "cmps_plugin" +msgstr "Vtičnik" + +msgid "cmps_plugin_activated" +msgstr "Vtičnik je bil aktiviran." + +msgid "cmps_plugin_db_prefixes" +msgstr "Predpone tabele baze podatkov" + +msgid "cmps_plugin_deactivated" +msgstr "Vtičnik je bil onemogočen." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +msgid "cmps_plugin_file" +msgstr "Datoteka vtičnika" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Jezikovne predpone vtičnika" + +msgid "cmps_plugin_slot" +msgstr "Reža vtičnika" + +msgid "cmps_plugin_uninstalled" +msgstr "Vsi jezikovni vnosi in vnosi v bazo podatkov, ki se nanašajo na vtičnik, so bili izbrisani in vtičnik je onemogočen. Zdaj lahko s seznama ’Prilagajanje’ odstranite seznam in izvorno kodo vtičnika, da vtičnik dokončno odstranite." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +msgid "cmps_plugins" +msgstr "Vtičniki" + +msgid "cmps_refresh" +msgstr "Na novo naloži jezike" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +msgid "cmps_rep_object" +msgstr "Tip objekta v magazinu" + +msgid "cmps_repository_object_types" +msgstr "Tipi objektov v magazinu" + +msgid "cmps_responsible" +msgstr "Odgovoren" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "Shrani" + +msgid "cmps_service" +msgstr "Storitev" + +msgid "cmps_show_details" +msgstr "Prikaži podrobnosti" + +msgid "cmps_slots" +msgstr "Dodeljeni čas" + +msgid "cmps_status" +msgstr "Status" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +msgid "cmps_uninstall" +msgstr "Odstrani" + +msgid "cmps_uninstall_confirm" +msgstr "Ali res želite odstraniti vtičnik \"%s\" in izbrisati vse povezane vnose v bazi podatkov?" + +msgid "cmps_uninstall_inactive_confirm" +msgstr "Vtičnika \"%1$s\" se trenutno ne da aktivirati (\"%2$s\"). V tem statusu ni mogoče v celoti odstraniti vtičnikov. Ker je izbrisana samo sistemska integracija, lahko lastne datoteke vtičnika ostanejo. Ali želite nadaljevati z delno odstranitvijo?" + +msgid "cmps_update" +msgstr "Posodobi" + +msgid "cmps_version" +msgstr "Različica" + +msgid "database_is_uptodate" +msgstr "Baza podatkov je posodobljena." + +msgid "no_changes" +msgstr "Brez sprememb" diff --git a/components/ILIAS/Component/lang/cmps_sq.po b/components/ILIAS/Component/lang/cmps_sq.po new file mode 100644 index 000000000000..4672cb547d76 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_sq.po @@ -0,0 +1,305 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmps\n" + +#, fuzzy +msgid "cmps_activate" +msgstr "Activate" + +#, fuzzy +msgid "cmps_active" +msgstr "Active" + +#, fuzzy +msgid "cmps_add_new_rank" +msgstr "Position in Add-New-Object List" + +#, fuzzy +msgid "cmps_available" +msgstr "Available" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +#, fuzzy +msgid "cmps_basic_files" +msgstr "Basic Files" + +#, fuzzy +msgid "cmps_class_file" +msgstr "Class File" + +#, fuzzy +msgid "cmps_component" +msgstr "Component" + +#, fuzzy +msgid "cmps_configure" +msgstr "Configure" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +#, fuzzy +msgid "cmps_current_version" +msgstr "Current Version" + +#, fuzzy +msgid "cmps_database" +msgstr "Database" + +#, fuzzy +msgid "cmps_db_update" +msgstr "DB Update Script" + +#, fuzzy +msgid "cmps_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +#, fuzzy +msgid "cmps_dir" +msgstr "Directory" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +#, fuzzy +msgid "cmps_enable_creation" +msgstr "Enable Creation" + +#, fuzzy +msgid "cmps_file_version" +msgstr "Update File Version" + +#, fuzzy +msgid "cmps_group" +msgstr "Group" + +#, fuzzy +msgid "cmps_id" +msgstr "ID" + +#, fuzzy +msgid "cmps_ilias_max_version" +msgstr "Max. ILIAS Version" + +#, fuzzy +msgid "cmps_ilias_min_version" +msgstr "Min. ILIAS Version" + +#, fuzzy +msgid "cmps_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cmps_install" +msgstr "Install" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +#, fuzzy +msgid "cmps_lang_files" +msgstr "Language Files" + +#, fuzzy +msgid "cmps_lang_prefix" +msgstr "Language Variables Prefix" + +#, fuzzy +msgid "cmps_languages" +msgstr "Languages" + +#, fuzzy +msgid "cmps_main_dir" +msgstr "Main Directory" + +#, fuzzy +msgid "cmps_missing" +msgstr "Missing" + +#, fuzzy +msgid "cmps_module" +msgstr "Module" + +#, fuzzy +msgid "cmps_must_installed" +msgstr "The component must be installed." + +#, fuzzy +msgid "cmps_name" +msgstr "Name" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +#, fuzzy +msgid "cmps_needs_newer_ilias_version" +msgstr "This plugin version only runs on newer ILIAS versions. Please upgrade ILIAS." + +#, fuzzy +msgid "cmps_needs_newer_plugin_version" +msgstr "This ILIAS version needs a newer plugin version. Please upgrade the plugin." + +#, fuzzy +msgid "cmps_needs_update" +msgstr "Needs update." + +#, fuzzy +msgid "cmps_needs_upgrade" +msgstr "The plugin version currently installed is older than a previously installed version. Please upgrade the plugin." + +#, fuzzy +msgid "cmps_no_db_update_file_available" +msgstr "No DB update script available." + +#, fuzzy +msgid "cmps_no_language_file_available" +msgstr "No language file available." + +#, fuzzy +msgid "cmps_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "cmps_plugin_activated" +msgstr "The plugin has been activated." + +#, fuzzy +msgid "cmps_plugin_db_prefixes" +msgstr "DB Table Prefixes" + +#, fuzzy +msgid "cmps_plugin_deactivated" +msgstr "The plugin has been deactivated." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +#, fuzzy +msgid "cmps_plugin_file" +msgstr "Plugin File" + +#, fuzzy +msgid "cmps_plugin_lang_prefixes" +msgstr "Plugin Language Prefixes" + +#, fuzzy +msgid "cmps_plugin_slot" +msgstr "Plugin Slot" + +#, fuzzy +msgid "cmps_plugin_uninstalled" +msgstr "The plugin has been uninstalled." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +#, fuzzy +msgid "cmps_plugins" +msgstr "Plugins" + +#, fuzzy +msgid "cmps_refresh" +msgstr "Refresh" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +#, fuzzy +msgid "cmps_rep_object" +msgstr "Repository Object Type" + +#, fuzzy +msgid "cmps_repository_object_types" +msgstr "Repository Object Types" + +#, fuzzy +msgid "cmps_responsible" +msgstr "Responsible" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +#, fuzzy +msgid "cmps_save_options" +msgstr "Save Options" + +#, fuzzy +msgid "cmps_service" +msgstr "Service" + +#, fuzzy +msgid "cmps_show_details" +msgstr "Show Details" + +#, fuzzy +msgid "cmps_slots" +msgstr "Slots" + +#, fuzzy +msgid "cmps_status" +msgstr "Status" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +#, fuzzy +msgid "cmps_uninstall" +msgstr "Uninstall" + +#, fuzzy +msgid "cmps_uninstall_confirm" +msgstr "Are you sure you want to uninstall the plugin \"%s\"?" + +#, fuzzy +msgid "cmps_uninstall_inactive_confirm" +msgstr "The plugin \"%1$s\" can currently not be activated (\"%2$s\"). In this state plugins cannot be uninstalled completely. As only the core integration is reverted, plugin custom data may remain. Would you like to continue with the partial uninstall?" + +#, fuzzy +msgid "cmps_update" +msgstr "Update" + +#, fuzzy +msgid "cmps_version" +msgstr "Version" + +#, fuzzy +msgid "database_is_uptodate" +msgstr "Die Datenbank ist aktuell." + +#, fuzzy +msgid "no_changes" +msgstr "Keine Änderungen" diff --git a/components/ILIAS/Component/lang/cmps_sr.po b/components/ILIAS/Component/lang/cmps_sr.po new file mode 100644 index 000000000000..588e9d1f9a56 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_sr.po @@ -0,0 +1,305 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cmps\n" + +#, fuzzy +msgid "cmps_activate" +msgstr "Activate" + +#, fuzzy +msgid "cmps_active" +msgstr "Active" + +#, fuzzy +msgid "cmps_add_new_rank" +msgstr "Position in Add-New-Object List" + +#, fuzzy +msgid "cmps_available" +msgstr "Available" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +#, fuzzy +msgid "cmps_basic_files" +msgstr "Basic Files" + +#, fuzzy +msgid "cmps_class_file" +msgstr "Class File" + +#, fuzzy +msgid "cmps_component" +msgstr "Component" + +#, fuzzy +msgid "cmps_configure" +msgstr "Configure" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +#, fuzzy +msgid "cmps_current_version" +msgstr "Current Version" + +#, fuzzy +msgid "cmps_database" +msgstr "Database" + +#, fuzzy +msgid "cmps_db_update" +msgstr "DB Update Script" + +#, fuzzy +msgid "cmps_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +#, fuzzy +msgid "cmps_dir" +msgstr "Directory" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +#, fuzzy +msgid "cmps_enable_creation" +msgstr "Enable Creation" + +#, fuzzy +msgid "cmps_file_version" +msgstr "Update File Version" + +#, fuzzy +msgid "cmps_group" +msgstr "Group" + +#, fuzzy +msgid "cmps_id" +msgstr "ID" + +#, fuzzy +msgid "cmps_ilias_max_version" +msgstr "Max. ILIAS Version" + +#, fuzzy +msgid "cmps_ilias_min_version" +msgstr "Min. ILIAS Version" + +#, fuzzy +msgid "cmps_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cmps_install" +msgstr "Install" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +#, fuzzy +msgid "cmps_lang_files" +msgstr "Language Files" + +#, fuzzy +msgid "cmps_lang_prefix" +msgstr "Language Variables Prefix" + +#, fuzzy +msgid "cmps_languages" +msgstr "Languages" + +#, fuzzy +msgid "cmps_main_dir" +msgstr "Main Directory" + +#, fuzzy +msgid "cmps_missing" +msgstr "Missing" + +#, fuzzy +msgid "cmps_module" +msgstr "Module" + +#, fuzzy +msgid "cmps_must_installed" +msgstr "The component must be installed." + +#, fuzzy +msgid "cmps_name" +msgstr "Name" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +#, fuzzy +msgid "cmps_needs_newer_ilias_version" +msgstr "This plugin version only runs on newer ILIAS versions. Please upgrade ILIAS." + +#, fuzzy +msgid "cmps_needs_newer_plugin_version" +msgstr "This ILIAS version needs a newer plugin version. Please upgrade the plugin." + +#, fuzzy +msgid "cmps_needs_update" +msgstr "Needs update." + +#, fuzzy +msgid "cmps_needs_upgrade" +msgstr "The plugin version currently installed is older than a previously installed version. Please upgrade the plugin." + +#, fuzzy +msgid "cmps_no_db_update_file_available" +msgstr "No DB update script available." + +#, fuzzy +msgid "cmps_no_language_file_available" +msgstr "No language file available." + +#, fuzzy +msgid "cmps_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "cmps_plugin_activated" +msgstr "The plugin has been activated." + +#, fuzzy +msgid "cmps_plugin_db_prefixes" +msgstr "DB Table Prefixes" + +#, fuzzy +msgid "cmps_plugin_deactivated" +msgstr "The plugin has been deactivated." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +#, fuzzy +msgid "cmps_plugin_file" +msgstr "Plugin File" + +#, fuzzy +msgid "cmps_plugin_lang_prefixes" +msgstr "Plugin Language Prefixes" + +#, fuzzy +msgid "cmps_plugin_slot" +msgstr "Plugin Slot" + +#, fuzzy +msgid "cmps_plugin_uninstalled" +msgstr "The plugin has been uninstalled." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +#, fuzzy +msgid "cmps_plugins" +msgstr "Plugins" + +#, fuzzy +msgid "cmps_refresh" +msgstr "Refresh" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +#, fuzzy +msgid "cmps_rep_object" +msgstr "Repository Object Type" + +#, fuzzy +msgid "cmps_repository_object_types" +msgstr "Repository Object Types" + +#, fuzzy +msgid "cmps_responsible" +msgstr "Responsible" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +#, fuzzy +msgid "cmps_save_options" +msgstr "Save Options" + +#, fuzzy +msgid "cmps_service" +msgstr "Service" + +#, fuzzy +msgid "cmps_show_details" +msgstr "Show Details" + +#, fuzzy +msgid "cmps_slots" +msgstr "Slots" + +#, fuzzy +msgid "cmps_status" +msgstr "Status" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +#, fuzzy +msgid "cmps_uninstall" +msgstr "Uninstall" + +#, fuzzy +msgid "cmps_uninstall_confirm" +msgstr "Are you sure you want to uninstall the plugin \"%s\"?" + +#, fuzzy +msgid "cmps_uninstall_inactive_confirm" +msgstr "The plugin \"%1$s\" can currently not be activated (\"%2$s\"). In this state plugins cannot be uninstalled completely. As only the core integration is reverted, plugin custom data may remain. Would you like to continue with the partial uninstall?" + +#, fuzzy +msgid "cmps_update" +msgstr "Update" + +#, fuzzy +msgid "cmps_version" +msgstr "Version" + +#, fuzzy +msgid "database_is_uptodate" +msgstr "Die Datenbank ist aktuell." + +#, fuzzy +msgid "no_changes" +msgstr "Keine Änderungen" diff --git a/components/ILIAS/Component/lang/cmps_sv.po b/components/ILIAS/Component/lang/cmps_sv.po new file mode 100644 index 000000000000..3d5e00d729c1 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_sv.po @@ -0,0 +1,232 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Aktivera" + +msgid "cmps_active" +msgstr "Aktiv" + +msgid "cmps_add_new_rank" +msgstr "Position i urvalslistan för objekt som ska läggas till" + +msgid "cmps_available" +msgstr "Tillgänglig" + +msgid "cmps_available_version" +msgstr "Tillgänglig version" + +msgid "cmps_basic_files" +msgstr "Basisfiler" + +msgid "cmps_class_file" +msgstr " Klassfil" + +msgid "cmps_component" +msgstr "Komponent" + +msgid "cmps_configure" +msgstr "Konfigurera" + +msgid "cmps_current_db_version" +msgstr "Aktuell DB-version" + +msgid "cmps_current_version" +msgstr "Aktuell version" + +msgid "cmps_database" +msgstr "Databas" + +msgid "cmps_db_update" +msgstr "Script för uppdatering av databas" + +msgid "cmps_deactivate" +msgstr "Avaktivera" + +msgid "cmps_detailed_information" +msgstr "Detaljerad information" + +msgid "cmps_dir" +msgstr "Directory" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +msgid "cmps_enable_creation" +msgstr "Starta skapandet" + +msgid "cmps_file_version" +msgstr "Uppdatera filversion" + +msgid "cmps_group" +msgstr "Grupp" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Maximal ILIAS-version" + +msgid "cmps_ilias_min_version" +msgstr "Minsta ILIAS-version" + +msgid "cmps_inactive" +msgstr "Inaktiv" + +msgid "cmps_install" +msgstr "Installera" + +msgid "cmps_is_active" +msgstr "Aktiverad" + +msgid "cmps_is_installed" +msgstr "Installerad" + +msgid "cmps_lang_files" +msgstr "Språkfil" + +msgid "cmps_lang_prefix" +msgstr "Prefix språkvariabel" + +msgid "cmps_languages" +msgstr "Språk" + +msgid "cmps_main_dir" +msgstr "Huvudkatalog" + +msgid "cmps_missing" +msgstr "Saknad" + +msgid "cmps_module" +msgstr "Modul" + +msgid "cmps_must_installed" +msgstr "Komponenten måste vara installerad." + +msgid "cmps_name" +msgstr "Namn" + +msgid "cmps_needs_matching_ilias_version" +msgstr "Detta plugin kan inte användas med den aktuella versionen av denna ILIAS-installation." + +msgid "cmps_needs_newer_ilias_version" +msgstr "Detta plugin kan endast användas med en nyare ILIAS-version. Vänligen uppdatera din ILIAS-version." + +msgid "cmps_needs_newer_plugin_version" +msgstr "Den här ILIAS-versionen kräver en nyare plugin-version. Vänligen uppdatera pluginet." + +msgid "cmps_needs_update" +msgstr "Uppdatering nödvändig" + +msgid "cmps_needs_upgrade" +msgstr "Den nuvarande installerade plugin-versionen är äldre än den tidigare installerade. Vänligen installera det senaste pluginet." + +msgid "cmps_no_db_update_file_available" +msgstr "Inget skript för uppdatering av databas tillgängligt" + +msgid "cmps_no_language_file_available" +msgstr "Ingen språkfil tillgänglig" + +msgid "cmps_plugin" +msgstr "Plugin" + +msgid "cmps_plugin_activated" +msgstr "Insticksprogrammet har aktiverats." + +msgid "cmps_plugin_db_prefixes" +msgstr "Prefixar databastabell" + +msgid "cmps_plugin_deactivated" +msgstr "Insticksprogrammet har avaktiverats." + +msgid "cmps_plugin_deinstalled" +msgstr "Insticksprogrammet har avinstallerats" + +msgid "cmps_plugin_file" +msgstr "Plugin-fil" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Plugin språk prefix" + +msgid "cmps_plugin_slot" +msgstr "Plugin-plats" + +msgid "cmps_plugin_uninstalled" +msgstr "Alla språk och databasposter relaterade till pluginet har tagits bort och pluginet har avaktiverats. Du kan nu ta bort katalogen och källkoden för insticksprogrammet från katalogen \"Customizing\" för att slutligen avinstallera insticksprogrammet." + +msgid "cmps_plugin_updated" +msgstr "Insticksprogrammet har uppdaterats" + +msgid "cmps_plugins" +msgstr "Plugins" + +msgid "cmps_refresh" +msgstr "Reload språk" + +msgid "cmps_refresh_lng" +msgstr "Språk uppdaterat" + +msgid "cmps_rep_object" +msgstr "Objekttyp i tidningen" + +msgid "cmps_repository_object_types" +msgstr "Objekttyper i tidningen" + +msgid "cmps_responsible" +msgstr "Ansvarsfull" + +msgid "cmps_responsible_mail" +msgstr "Mail (ansvarig person)" + +msgid "cmps_save_options" +msgstr "Spara" + +msgid "cmps_service" +msgstr "Tjänst" + +msgid "cmps_show_details" +msgstr "Visa detaljer" + +msgid "cmps_slots" +msgstr "Slots" + +msgid "cmps_status" +msgstr "Status" + +msgid "cmps_supports_cli_setup" +msgstr "Stödjer CLI-installation" + +msgid "cmps_supports_export" +msgstr "Stödd export" + +msgid "cmps_supports_learning_progress" +msgstr "Stödjer framsteg i inlärningen" + +msgid "cmps_uninstall" +msgstr "Avinstallera" + +msgid "cmps_uninstall_confirm" +msgstr "Vill du verkligen avinstallera insticksprogrammet \"%s\" och ta bort alla tillhörande databasposter?" + +msgid "cmps_uninstall_inactive_confirm" +msgstr "Insticksprogrammet \"%1$s\" kan för närvarande inte aktiveras (\"%2$s\"). I denna status kan plugins inte avinstalleras helt. Eftersom endast systemintegrationen tas bort kan data som ägs av plugin finnas kvar. Vill du fortsätta med den partiella avinstallat" + +msgid "cmps_update" +msgstr "Uppdatera" + +msgid "cmps_version" +msgstr "Version" + +msgid "database_is_uptodate" +msgstr "Databasen är uppdaterad." + +msgid "no_changes" +msgstr "Inga förändringar" diff --git a/components/ILIAS/Component/lang/cmps_tr.po b/components/ILIAS/Component/lang/cmps_tr.po new file mode 100644 index 000000000000..ce3b24a356b2 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_tr.po @@ -0,0 +1,254 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "Etkinleştir" + +msgid "cmps_active" +msgstr "Aktif" + +msgid "cmps_add_new_rank" +msgstr "Yeni Nesne Listesi Pozisyonu" + +msgid "cmps_available" +msgstr "Mevcut" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +msgid "cmps_basic_files" +msgstr "Temel Dosyalar" + +msgid "cmps_class_file" +msgstr "Sınıf Dosyası" + +msgid "cmps_component" +msgstr "Bileşen" + +msgid "cmps_configure" +msgstr "Yapılandırma" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +msgid "cmps_current_version" +msgstr "Güncel Sürüm" + +msgid "cmps_database" +msgstr "Veritabanı" + +msgid "cmps_db_update" +msgstr "DB Güncelleme Senaryo" + +msgid "cmps_deactivate" +msgstr "Devre dışı bırak" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +msgid "cmps_dir" +msgstr "Dizin" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +#, fuzzy +msgid "cmps_enable_creation" +msgstr "Enable Creation" + +msgid "cmps_file_version" +msgstr "Güncelleme Dosya Sürümü" + +msgid "cmps_group" +msgstr "Grubu" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Maks. ILIAS Sürüm" + +msgid "cmps_ilias_min_version" +msgstr "Min. ILIAS Sürüm" + +msgid "cmps_inactive" +msgstr "İnaktif" + +#, fuzzy +msgid "cmps_install" +msgstr "Install" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +msgid "cmps_lang_files" +msgstr "Lisan Dosyalar" + +msgid "cmps_lang_prefix" +msgstr "Dil Değişkenleri Önek" + +msgid "cmps_languages" +msgstr "Diller" + +msgid "cmps_main_dir" +msgstr "Ana Dizin" + +msgid "cmps_missing" +msgstr "Eksik" + +msgid "cmps_module" +msgstr "Modülü" + +#, fuzzy +msgid "cmps_must_installed" +msgstr "The component must be installed." + +msgid "cmps_name" +msgstr "Adı" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +msgid "cmps_needs_newer_ilias_version" +msgstr "Bu eklenti sürümü sadece yeni ILIAS sürümlerinde çalışır. ILIAS yükseltin." + +msgid "cmps_needs_newer_plugin_version" +msgstr "Bu ILIAS sürümü daha yeni bir eklenti sürümü gerekiyor. Eklenti yükseltin." + +msgid "cmps_needs_update" +msgstr "İhtiyaçları güncelleme." + +msgid "cmps_needs_upgrade" +msgstr "Yüklü eklenti sürümü önceden yüklenmiş sürümü daha eski. Eklenti yükseltin." + +msgid "cmps_no_db_update_file_available" +msgstr "Mevcut Resim DB güncelleştirme komut dosyası." + +msgid "cmps_no_language_file_available" +msgstr "Mevcut dil dosyası yok." + +msgid "cmps_plugin" +msgstr "Eklentisi" + +msgid "cmps_plugin_activated" +msgstr "eklentisi devreye alınmıştır." + +msgid "cmps_plugin_db_prefixes" +msgstr "DB tablo Önekler" + +msgid "cmps_plugin_deactivated" +msgstr "eklentisi devrede değil." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +msgid "cmps_plugin_file" +msgstr "Plugin Dosyası" + +msgid "cmps_plugin_lang_prefixes" +msgstr "Plugin Dil Önekler" + +msgid "cmps_plugin_slot" +msgstr "Plugin Yuvası" + +#, fuzzy +msgid "cmps_plugin_uninstalled" +msgstr "The plugin has been uninstalled." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +msgid "cmps_plugins" +msgstr "Eklentiler" + +msgid "cmps_refresh" +msgstr "Yenile" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +msgid "cmps_rep_object" +msgstr "Depo Nesne Türü" + +#, fuzzy +msgid "cmps_repository_object_types" +msgstr "Repository Object Types" + +msgid "cmps_responsible" +msgstr "Sorumlu" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "Seçenekleri Kaydet" + +msgid "cmps_service" +msgstr "Hizmet" + +msgid "cmps_show_details" +msgstr "Detayları göster" + +#, fuzzy +msgid "cmps_slots" +msgstr "Slots" + +msgid "cmps_status" +msgstr "Durumu" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +#, fuzzy +msgid "cmps_uninstall" +msgstr "Uninstall" + +#, fuzzy +msgid "cmps_uninstall_confirm" +msgstr "Are you sure you want to uninstall the plugin \"%s\"?" + +#, fuzzy +msgid "cmps_uninstall_inactive_confirm" +msgstr "The plugin \"%1$s\" can currently not be activated (\"%2$s\"). In this state plugins cannot be uninstalled completely. As only the core integration is reverted, plugin custom data may remain. Would you like to continue with the partial uninstall?" + +msgid "cmps_update" +msgstr "Güncelleme" + +msgid "cmps_version" +msgstr "Sürüm" + +msgid "database_is_uptodate" +msgstr "veritabanı güncel olduğunu." + +msgid "no_changes" +msgstr "Hayır değişiklikler" diff --git a/components/ILIAS/Component/lang/cmps_uk.po b/components/ILIAS/Component/lang/cmps_uk.po new file mode 100644 index 000000000000..19e0610fdf16 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_uk.po @@ -0,0 +1,305 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cmps\n" + +#, fuzzy +msgid "cmps_activate" +msgstr "Activate" + +#, fuzzy +msgid "cmps_active" +msgstr "Active" + +#, fuzzy +msgid "cmps_add_new_rank" +msgstr "Position in Add-New-Object List" + +#, fuzzy +msgid "cmps_available" +msgstr "Available" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +#, fuzzy +msgid "cmps_basic_files" +msgstr "Basic Files" + +#, fuzzy +msgid "cmps_class_file" +msgstr "Class File" + +#, fuzzy +msgid "cmps_component" +msgstr "Component" + +#, fuzzy +msgid "cmps_configure" +msgstr "Configure" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +#, fuzzy +msgid "cmps_current_version" +msgstr "Current Version" + +#, fuzzy +msgid "cmps_database" +msgstr "Database" + +#, fuzzy +msgid "cmps_db_update" +msgstr "DB Update Script" + +#, fuzzy +msgid "cmps_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +#, fuzzy +msgid "cmps_dir" +msgstr "Directory" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +#, fuzzy +msgid "cmps_enable_creation" +msgstr "Enable Creation" + +#, fuzzy +msgid "cmps_file_version" +msgstr "Update File Version" + +#, fuzzy +msgid "cmps_group" +msgstr "Group" + +#, fuzzy +msgid "cmps_id" +msgstr "ID" + +#, fuzzy +msgid "cmps_ilias_max_version" +msgstr "Max. ILIAS Version" + +#, fuzzy +msgid "cmps_ilias_min_version" +msgstr "Min. ILIAS Version" + +#, fuzzy +msgid "cmps_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cmps_install" +msgstr "Install" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +#, fuzzy +msgid "cmps_lang_files" +msgstr "Language Files" + +#, fuzzy +msgid "cmps_lang_prefix" +msgstr "Language Variables Prefix" + +#, fuzzy +msgid "cmps_languages" +msgstr "Languages" + +#, fuzzy +msgid "cmps_main_dir" +msgstr "Main Directory" + +#, fuzzy +msgid "cmps_missing" +msgstr "Missing" + +#, fuzzy +msgid "cmps_module" +msgstr "Module" + +#, fuzzy +msgid "cmps_must_installed" +msgstr "The component must be installed." + +#, fuzzy +msgid "cmps_name" +msgstr "Name" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +#, fuzzy +msgid "cmps_needs_newer_ilias_version" +msgstr "This plugin version only runs on newer ILIAS versions. Please upgrade ILIAS." + +#, fuzzy +msgid "cmps_needs_newer_plugin_version" +msgstr "This ILIAS version needs a newer plugin version. Please upgrade the plugin." + +#, fuzzy +msgid "cmps_needs_update" +msgstr "Needs update." + +#, fuzzy +msgid "cmps_needs_upgrade" +msgstr "The plugin version currently installed is older than a previously installed version. Please upgrade the plugin." + +#, fuzzy +msgid "cmps_no_db_update_file_available" +msgstr "No DB update script available." + +#, fuzzy +msgid "cmps_no_language_file_available" +msgstr "No language file available." + +#, fuzzy +msgid "cmps_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "cmps_plugin_activated" +msgstr "The plugin has been activated." + +#, fuzzy +msgid "cmps_plugin_db_prefixes" +msgstr "DB Table Prefixes" + +#, fuzzy +msgid "cmps_plugin_deactivated" +msgstr "The plugin has been deactivated." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +#, fuzzy +msgid "cmps_plugin_file" +msgstr "Plugin File" + +#, fuzzy +msgid "cmps_plugin_lang_prefixes" +msgstr "Plugin Language Prefixes" + +#, fuzzy +msgid "cmps_plugin_slot" +msgstr "Plugin Slot" + +#, fuzzy +msgid "cmps_plugin_uninstalled" +msgstr "The plugin has been uninstalled." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +#, fuzzy +msgid "cmps_plugins" +msgstr "Plugins" + +#, fuzzy +msgid "cmps_refresh" +msgstr "Refresh" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +#, fuzzy +msgid "cmps_rep_object" +msgstr "Repository Object Type" + +#, fuzzy +msgid "cmps_repository_object_types" +msgstr "Repository Object Types" + +#, fuzzy +msgid "cmps_responsible" +msgstr "Responsible" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +#, fuzzy +msgid "cmps_save_options" +msgstr "Save Options" + +#, fuzzy +msgid "cmps_service" +msgstr "Service" + +#, fuzzy +msgid "cmps_show_details" +msgstr "Show Details" + +#, fuzzy +msgid "cmps_slots" +msgstr "Slots" + +#, fuzzy +msgid "cmps_status" +msgstr "Status" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +#, fuzzy +msgid "cmps_uninstall" +msgstr "Uninstall" + +#, fuzzy +msgid "cmps_uninstall_confirm" +msgstr "Are you sure you want to uninstall the plugin \"%s\"?" + +#, fuzzy +msgid "cmps_uninstall_inactive_confirm" +msgstr "The plugin \"%1$s\" can currently not be activated (\"%2$s\"). In this state plugins cannot be uninstalled completely. As only the core integration is reverted, plugin custom data may remain. Would you like to continue with the partial uninstall?" + +#, fuzzy +msgid "cmps_update" +msgstr "Update" + +#, fuzzy +msgid "cmps_version" +msgstr "Version" + +#, fuzzy +msgid "database_is_uptodate" +msgstr "Die Datenbank ist aktuell." + +#, fuzzy +msgid "no_changes" +msgstr "Keine Änderungen" diff --git a/components/ILIAS/Component/lang/cmps_vi.po b/components/ILIAS/Component/lang/cmps_vi.po new file mode 100644 index 000000000000..fa8d4e1eacf2 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_vi.po @@ -0,0 +1,305 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: cmps\n" + +#, fuzzy +msgid "cmps_activate" +msgstr "Activate" + +#, fuzzy +msgid "cmps_active" +msgstr "Active" + +#, fuzzy +msgid "cmps_add_new_rank" +msgstr "Position in Add-New-Object List" + +#, fuzzy +msgid "cmps_available" +msgstr "Available" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +#, fuzzy +msgid "cmps_basic_files" +msgstr "Basic Files" + +#, fuzzy +msgid "cmps_class_file" +msgstr "Class File" + +#, fuzzy +msgid "cmps_component" +msgstr "Component" + +#, fuzzy +msgid "cmps_configure" +msgstr "Configure" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +#, fuzzy +msgid "cmps_current_version" +msgstr "Current Version" + +#, fuzzy +msgid "cmps_database" +msgstr "Database" + +#, fuzzy +msgid "cmps_db_update" +msgstr "DB Update Script" + +#, fuzzy +msgid "cmps_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +#, fuzzy +msgid "cmps_dir" +msgstr "Directory" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +#, fuzzy +msgid "cmps_enable_creation" +msgstr "Enable Creation" + +#, fuzzy +msgid "cmps_file_version" +msgstr "Update File Version" + +#, fuzzy +msgid "cmps_group" +msgstr "Group" + +#, fuzzy +msgid "cmps_id" +msgstr "ID" + +#, fuzzy +msgid "cmps_ilias_max_version" +msgstr "Max. ILIAS Version" + +#, fuzzy +msgid "cmps_ilias_min_version" +msgstr "Min. ILIAS Version" + +#, fuzzy +msgid "cmps_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cmps_install" +msgstr "Install" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +#, fuzzy +msgid "cmps_lang_files" +msgstr "Language Files" + +#, fuzzy +msgid "cmps_lang_prefix" +msgstr "Language Variables Prefix" + +#, fuzzy +msgid "cmps_languages" +msgstr "Languages" + +#, fuzzy +msgid "cmps_main_dir" +msgstr "Main Directory" + +#, fuzzy +msgid "cmps_missing" +msgstr "Missing" + +#, fuzzy +msgid "cmps_module" +msgstr "Module" + +#, fuzzy +msgid "cmps_must_installed" +msgstr "The component must be installed." + +#, fuzzy +msgid "cmps_name" +msgstr "Name" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +#, fuzzy +msgid "cmps_needs_newer_ilias_version" +msgstr "This plugin version only runs on newer ILIAS versions. Please upgrade ILIAS." + +#, fuzzy +msgid "cmps_needs_newer_plugin_version" +msgstr "This ILIAS version needs a newer plugin version. Please upgrade the plugin." + +#, fuzzy +msgid "cmps_needs_update" +msgstr "Needs update." + +#, fuzzy +msgid "cmps_needs_upgrade" +msgstr "The plugin version currently installed is older than a previously installed version. Please upgrade the plugin." + +#, fuzzy +msgid "cmps_no_db_update_file_available" +msgstr "No DB update script available." + +#, fuzzy +msgid "cmps_no_language_file_available" +msgstr "No language file available." + +#, fuzzy +msgid "cmps_plugin" +msgstr "Plugin" + +#, fuzzy +msgid "cmps_plugin_activated" +msgstr "The plugin has been activated." + +#, fuzzy +msgid "cmps_plugin_db_prefixes" +msgstr "DB Table Prefixes" + +#, fuzzy +msgid "cmps_plugin_deactivated" +msgstr "The plugin has been deactivated." + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +#, fuzzy +msgid "cmps_plugin_file" +msgstr "Plugin File" + +#, fuzzy +msgid "cmps_plugin_lang_prefixes" +msgstr "Plugin Language Prefixes" + +#, fuzzy +msgid "cmps_plugin_slot" +msgstr "Plugin Slot" + +#, fuzzy +msgid "cmps_plugin_uninstalled" +msgstr "The plugin has been uninstalled." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +#, fuzzy +msgid "cmps_plugins" +msgstr "Plugins" + +#, fuzzy +msgid "cmps_refresh" +msgstr "Refresh" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +#, fuzzy +msgid "cmps_rep_object" +msgstr "Repository Object Type" + +#, fuzzy +msgid "cmps_repository_object_types" +msgstr "Repository Object Types" + +#, fuzzy +msgid "cmps_responsible" +msgstr "Responsible" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +#, fuzzy +msgid "cmps_save_options" +msgstr "Save Options" + +#, fuzzy +msgid "cmps_service" +msgstr "Service" + +#, fuzzy +msgid "cmps_show_details" +msgstr "Show Details" + +#, fuzzy +msgid "cmps_slots" +msgstr "Slots" + +#, fuzzy +msgid "cmps_status" +msgstr "Status" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +#, fuzzy +msgid "cmps_uninstall" +msgstr "Uninstall" + +#, fuzzy +msgid "cmps_uninstall_confirm" +msgstr "Are you sure you want to uninstall the plugin \"%s\"?" + +#, fuzzy +msgid "cmps_uninstall_inactive_confirm" +msgstr "The plugin \"%1$s\" can currently not be activated (\"%2$s\"). In this state plugins cannot be uninstalled completely. As only the core integration is reverted, plugin custom data may remain. Would you like to continue with the partial uninstall?" + +#, fuzzy +msgid "cmps_update" +msgstr "Update" + +#, fuzzy +msgid "cmps_version" +msgstr "Version" + +#, fuzzy +msgid "database_is_uptodate" +msgstr "Die Datenbank ist aktuell." + +#, fuzzy +msgid "no_changes" +msgstr "Keine Änderungen" diff --git a/components/ILIAS/Component/lang/cmps_zh.po b/components/ILIAS/Component/lang/cmps_zh.po new file mode 100644 index 000000000000..6858f22f1964 --- /dev/null +++ b/components/ILIAS/Component/lang/cmps_zh.po @@ -0,0 +1,254 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: cmps\n" + +msgid "cmps_activate" +msgstr "激活" + +msgid "cmps_active" +msgstr "激活" + +msgid "cmps_add_new_rank" +msgstr "在“添加新对象”列表中的位置" + +msgid "cmps_available" +msgstr "有效的" + +#, fuzzy +msgid "cmps_available_version" +msgstr "Available Version" + +msgid "cmps_basic_files" +msgstr "基本文件" + +msgid "cmps_class_file" +msgstr "类文件" + +msgid "cmps_component" +msgstr "组件" + +msgid "cmps_configure" +msgstr "配置" + +#, fuzzy +msgid "cmps_current_db_version" +msgstr "Current DB-Version" + +msgid "cmps_current_version" +msgstr "当前版本" + +msgid "cmps_database" +msgstr "数据库" + +msgid "cmps_db_update" +msgstr "数据库更新脚本" + +msgid "cmps_deactivate" +msgstr "停用" + +#, fuzzy +msgid "cmps_detailed_information" +msgstr "Detailed Informationen" + +msgid "cmps_dir" +msgstr "目录" + +#, fuzzy +msgid "cmps_disable_creation" +msgstr "Disable Creation" + +#, fuzzy +msgid "cmps_enable_creation" +msgstr "Enable Creation" + +msgid "cmps_file_version" +msgstr "更新文件版本" + +msgid "cmps_group" +msgstr "用户组" + +msgid "cmps_id" +msgstr "ID" + +msgid "cmps_ilias_max_version" +msgstr "Max. ILIAS 版本" + +msgid "cmps_ilias_min_version" +msgstr "Min. ILIAS 版本" + +msgid "cmps_inactive" +msgstr "不活跃的" + +#, fuzzy +msgid "cmps_install" +msgstr "Install" + +#, fuzzy +msgid "cmps_is_active" +msgstr "Activated" + +#, fuzzy +msgid "cmps_is_installed" +msgstr "Installed" + +msgid "cmps_lang_files" +msgstr "语言文件" + +msgid "cmps_lang_prefix" +msgstr "语言变量前缀" + +msgid "cmps_languages" +msgstr "语言" + +msgid "cmps_main_dir" +msgstr "主目录" + +msgid "cmps_missing" +msgstr "缺失" + +msgid "cmps_module" +msgstr "模块" + +#, fuzzy +msgid "cmps_must_installed" +msgstr "The component must be installed." + +msgid "cmps_name" +msgstr "名字" + +#, fuzzy +msgid "cmps_needs_matching_ilias_version" +msgstr "This plugin does not work with your current ILIAS version." + +msgid "cmps_needs_newer_ilias_version" +msgstr "这个插件版本仅运行在更新的ILIAS版本上。请升级ILIAS。" + +msgid "cmps_needs_newer_plugin_version" +msgstr "这个ILIAS版本需要一个更新的插件版本。请升级插件。" + +msgid "cmps_needs_update" +msgstr "需要更新。" + +msgid "cmps_needs_upgrade" +msgstr "当前已安装的插件版本比先前安装的版本更老,请升级插件。" + +msgid "cmps_no_db_update_file_available" +msgstr "没有可用的数据库升级脚本。" + +msgid "cmps_no_language_file_available" +msgstr "没有可用的语言文件。" + +msgid "cmps_plugin" +msgstr "插件" + +msgid "cmps_plugin_activated" +msgstr "插件已激活" + +msgid "cmps_plugin_db_prefixes" +msgstr "数据库表前缀" + +msgid "cmps_plugin_deactivated" +msgstr "插件已停用" + +#, fuzzy +msgid "cmps_plugin_deinstalled" +msgstr "The plugin has been uninstalled" + +msgid "cmps_plugin_file" +msgstr "插件文件" + +msgid "cmps_plugin_lang_prefixes" +msgstr "插件语言前缀" + +msgid "cmps_plugin_slot" +msgstr "插件插槽(Slot)" + +#, fuzzy +msgid "cmps_plugin_uninstalled" +msgstr "The plugin has been uninstalled." + +#, fuzzy +msgid "cmps_plugin_updated" +msgstr "The plugin has been updated" + +msgid "cmps_plugins" +msgstr "插件" + +msgid "cmps_refresh" +msgstr "刷新" + +#, fuzzy +msgid "cmps_refresh_lng" +msgstr "Refresh language" + +msgid "cmps_rep_object" +msgstr "库对象类型" + +#, fuzzy +msgid "cmps_repository_object_types" +msgstr "Repository Object Types" + +msgid "cmps_responsible" +msgstr "Responsible" + +#, fuzzy +msgid "cmps_responsible_mail" +msgstr "Mail (Responsible)" + +msgid "cmps_save_options" +msgstr "保存选项" + +msgid "cmps_service" +msgstr "服务" + +msgid "cmps_show_details" +msgstr "细节展示" + +#, fuzzy +msgid "cmps_slots" +msgstr "Slots" + +msgid "cmps_status" +msgstr "状态" + +#, fuzzy +msgid "cmps_supports_cli_setup" +msgstr "Supports CLI-Setup" + +#, fuzzy +msgid "cmps_supports_export" +msgstr "Supports export" + +#, fuzzy +msgid "cmps_supports_learning_progress" +msgstr "Supports learning progress" + +#, fuzzy +msgid "cmps_uninstall" +msgstr "Uninstall" + +#, fuzzy +msgid "cmps_uninstall_confirm" +msgstr "Are you sure you want to uninstall the plugin \"%s\"?" + +#, fuzzy +msgid "cmps_uninstall_inactive_confirm" +msgstr "The plugin \"%1$s\" can currently not be activated (\"%2$s\"). In this state plugins cannot be uninstalled completely. As only the core integration is reverted, plugin custom data may remain. Would you like to continue with the partial uninstall?" + +msgid "cmps_update" +msgstr "更新" + +msgid "cmps_version" +msgstr "版本" + +msgid "database_is_uptodate" +msgstr "该数据库是当前数据库" + +msgid "no_changes" +msgstr "没有变化" diff --git a/components/ILIAS/Component/tests/Setup/ilComponentBuildPluginInfoObjectiveTest.php b/components/ILIAS/Component/tests/Setup/ilComponentBuildPluginInfoObjectiveTest.php index 1c82a206fa90..3b84f027b675 100755 --- a/components/ILIAS/Component/tests/Setup/ilComponentBuildPluginInfoObjectiveTest.php +++ b/components/ILIAS/Component/tests/Setup/ilComponentBuildPluginInfoObjectiveTest.php @@ -139,7 +139,7 @@ public function testPluginsAdded(): void public function testScanDir(): void { // Use the component directory without artifacts, because this should be mostly stable. - $expected = ["Component.php", "PRIVACY.md", "README.md", "ROADMAP.md", "classes", "exceptions", "service.xml", "src", "tests", "docs"]; + $expected = ["Component.php", "PRIVACY.md", "README.md", "ROADMAP.md", "classes", "exceptions", "lang", "service.xml", "src", "tests", "docs"]; $actual = array_values( array_diff( $this->builder->_scanDir(__DIR__ . "/../.."), diff --git a/components/ILIAS/Contact/Contact.php b/components/ILIAS/Contact/Contact.php index e30ba2267308..ed8dad4bf815 100644 --- a/components/ILIAS/Contact/Contact.php +++ b/components/ILIAS/Contact/Contact.php @@ -20,6 +20,9 @@ namespace ILIAS; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; + class Contact implements Component\Component { public function init( @@ -38,5 +41,13 @@ public function init( new Contact\UserSettings\Settings(); $contribute[\ILIAS\StaticURL\Handler\Handler::class] = static fn() => new \ILIAS\Contact\URL\StaticUrlHandler(); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'contact' + ); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'buddysystem' + ); } } diff --git a/components/ILIAS/Contact/lang/buddysystem.pot b/components/ILIAS/Contact/lang/buddysystem.pot new file mode 100644 index 000000000000..d67a3aed9383 --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem.pot @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: buddysystem\n" + +msgid "buddy_allow_to_contact_me" +msgstr "" + +msgid "buddy_allow_to_contact_me_default_info" +msgstr "" + +msgid "buddy_allow_to_contact_me_info" +msgstr "" + +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "" + +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "" + +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "" + +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "" + +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "" + +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "" + +msgid "buddy_bs_action_already_ignored" +msgstr "" + +msgid "buddy_bs_action_already_linked" +msgstr "" + +msgid "buddy_bs_action_already_requested" +msgstr "" + +msgid "buddy_bs_action_already_unlinked" +msgstr "" + +msgid "buddy_bs_action_not_possible" +msgstr "" + +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "" + +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "" + +msgid "buddy_bs_btn_txt_linked_a" +msgstr "" + +msgid "buddy_bs_btn_txt_linked_p" +msgstr "" + +msgid "buddy_bs_btn_txt_requested_a" +msgstr "" + +msgid "buddy_bs_btn_txt_requested_p" +msgstr "" + +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "" + +msgid "buddy_bs_state_ignored_request_a" +msgstr "" + +msgid "buddy_bs_state_ignored_request_p" +msgstr "" + +msgid "buddy_bs_state_ignoredrequest" +msgstr "" + +msgid "buddy_bs_state_linked" +msgstr "" + +msgid "buddy_bs_state_linked_a" +msgstr "" + +msgid "buddy_bs_state_linked_p" +msgstr "" + +msgid "buddy_bs_state_requested" +msgstr "" + +msgid "buddy_bs_state_requested_a" +msgstr "" + +msgid "buddy_bs_state_requested_filter_a" +msgstr "" + +msgid "buddy_bs_state_requested_filter_p" +msgstr "" + +msgid "buddy_bs_state_requested_p" +msgstr "" + +msgid "buddy_bs_state_unlinked" +msgstr "" + +msgid "buddy_bs_state_unlinked_a" +msgstr "" + +msgid "buddy_bs_state_unlinked_p" +msgstr "" + +msgid "buddy_confirm_unlink" +msgstr "" + +msgid "buddy_enable" +msgstr "" + +msgid "buddy_enable_info" +msgstr "" + +msgid "buddy_handle_contact_request" +msgstr "" + +msgid "buddy_noti_cr_profile_not_published" +msgstr "" + +msgid "buddy_notification_contact_request" +msgstr "" + +msgid "buddy_notification_contact_request_ignore" +msgstr "" + +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "" + +msgid "buddy_notification_contact_request_link" +msgstr "" + +msgid "buddy_notification_contact_request_link_osd" +msgstr "" + +msgid "buddy_notification_contact_request_long" +msgstr "" + +msgid "buddy_notification_contact_request_short" +msgstr "" + +msgid "buddy_relation_requested" +msgstr "" + +msgid "buddy_request_approved" +msgstr "" + +msgid "buddy_request_ignored" +msgstr "" + +msgid "buddy_tbl_filter_state" +msgstr "" + +msgid "buddy_tbl_state_actions_col_label" +msgstr "" + +msgid "buddy_tbl_title_relations" +msgstr "" + +msgid "buddy_use_osd" +msgstr "" + +msgid "buddy_use_osd_info" +msgstr "" + +msgid "buddy_view_gallery" +msgstr "" + +msgid "buddy_view_table" +msgstr "" diff --git a/components/ILIAS/Contact/lang/buddysystem_ar.po b/components/ILIAS/Contact/lang/buddysystem_ar.po new file mode 100644 index 000000000000..407930c1e758 --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_ar.po @@ -0,0 +1,237 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: buddysystem\n" + +#, fuzzy +msgid "buddy_allow_to_contact_me" +msgstr "Allow to contact me" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +#, fuzzy +msgid "buddy_allow_to_contact_me_info" +msgstr "If enabled, other users are able to send me request for getting into contact." + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Confirm Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Unlink" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignore" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Confirm" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_action_already_ignored" +msgstr "Already ignored user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_linked" +msgstr "Already accepted the contact request from user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_requested" +msgstr "Already requested user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_unlinked" +msgstr "The contact state for user '%s' is already unlinked." + +#, fuzzy +msgid "buddy_bs_action_not_possible" +msgstr "Action not possible" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Request Ignored" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Request" + +#, fuzzy +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Request Contact" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_linked" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_requested" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +#, fuzzy +msgid "buddy_bs_state_requested_p" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_a" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +#, fuzzy +msgid "buddy_enable" +msgstr "Activate ‘Contacts’" + +#, fuzzy +msgid "buddy_enable_info" +msgstr "If enabled, users are allowed to contact each other by initiating contact requests. Additionally, there is a personal user setting to allow or prevent being contacted." + +#, fuzzy +msgid "buddy_handle_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +#, fuzzy +msgid "buddy_notification_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link_osd" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]the user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_notification_contact_request_short" +msgstr "The user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_relation_requested" +msgstr "A request has been sent to the user." + +#, fuzzy +msgid "buddy_request_approved" +msgstr "You successfully approved the contact." + +#, fuzzy +msgid "buddy_request_ignored" +msgstr "You ignored the user." + +#, fuzzy +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +#, fuzzy +msgid "buddy_tbl_title_relations" +msgstr "Relations to Other Users" + +#, fuzzy +msgid "buddy_use_osd" +msgstr "Popup Contact Requests" + +#, fuzzy +msgid "buddy_use_osd_info" +msgstr "Display a popup to indicate a user wants to add you to his friends lists." + +#, fuzzy +msgid "buddy_view_gallery" +msgstr "Gallery" + +#, fuzzy +msgid "buddy_view_table" +msgstr "List" diff --git a/components/ILIAS/Contact/lang/buddysystem_bg.po b/components/ILIAS/Contact/lang/buddysystem_bg.po new file mode 100644 index 000000000000..c0f095cd073d --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_bg.po @@ -0,0 +1,188 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: buddysystem\n" + +msgid "buddy_allow_to_contact_me" +msgstr "Да се свържете с мен" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +msgid "buddy_allow_to_contact_me_info" +msgstr "Ако е разрешено, другите потребители могат да ми изпращат заявки за контакт." + +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Потвърждаване на заявката" + +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Отмяна на заявката" + +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Unlink" + +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignore" + +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Потвърждаване" + +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Отмяна на заявката" + +msgid "buddy_bs_action_already_ignored" +msgstr "Вие вече игнорирахте потребител '%s'." + +msgid "buddy_bs_action_already_linked" +msgstr "Вие вече приехте заявката за контакт от потребител '%s'." + +msgid "buddy_bs_action_already_requested" +msgstr "Вие вече поискахте потребител '%s'." + +msgid "buddy_bs_action_already_unlinked" +msgstr "Състоянието на контакта за потребител '%s' вече е развързано." + +msgid "buddy_bs_action_not_possible" +msgstr "Действието не е възможно" + +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Запитан контакт" + +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Игнориране на заявка" + +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Linked" + +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Linked" + +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Запитване за контакт" + +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Запитване" + +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Запитване за контакт" + +msgid "buddy_bs_state_ignored_request_a" +msgstr "Requested" + +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignored" + +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignored" + +msgid "buddy_bs_state_linked" +msgstr "Linked" + +msgid "buddy_bs_state_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Свързан" + +msgid "buddy_bs_state_requested" +msgstr "Запитване" + +msgid "buddy_bs_state_requested_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "В очакване на реакция" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Изисква се действие" + +msgid "buddy_bs_state_requested_p" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Без връзки" + +msgid "buddy_bs_state_unlinked_a" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Без връзки" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +msgid "buddy_enable" +msgstr "Активиране на 'Контакти'" + +msgid "buddy_enable_info" +msgstr "Ако е разрешено, на потребителите е позволено да се свързват помежду си, като инициират заявки за контакт. Освен това има лична потребителска настройка, с която да разрешите или забраните да се свързвате с тях." + +msgid "buddy_handle_contact_request" +msgstr "Заявка за контакт" + +msgid "buddy_noti_cr_profile_not_published" +msgstr "Профилът не е публикуван" + +msgid "buddy_notification_contact_request" +msgstr "Заявка за контакт" + +msgid "buddy_notification_contact_request_ignore" +msgstr "Игнориране на заявката:" + +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Игнориране на заявка" + +msgid "buddy_notification_contact_request_link" +msgstr "Одобряване на заявката:" + +msgid "buddy_notification_contact_request_link_osd" +msgstr "Одобряване на заявката" + +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]потребителят \"[REQUESTING_USER]\" иска да ви добави в списъка си с приятели.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +msgid "buddy_notification_contact_request_short" +msgstr "Потребителят \"[REQUESTING_USER]\" иска да ви добави в списъка си с приятели.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +msgid "buddy_relation_requested" +msgstr "Заявка е изпратена до потребителя." + +msgid "buddy_request_approved" +msgstr "Успешно одобрихте контакта." + +msgid "buddy_request_ignored" +msgstr "Игнорирахте потребителя." + +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +msgid "buddy_tbl_title_relations" +msgstr "Връзки с други потребители" + +msgid "buddy_use_osd" +msgstr "Заявки за контакт в прозореца" + +msgid "buddy_use_osd_info" +msgstr "Показване на изскачащ прозорец, който показва, че потребителят иска да ви добави в списъците си с приятели." + +msgid "buddy_view_gallery" +msgstr "Галерия" + +msgid "buddy_view_table" +msgstr "Списък" diff --git a/components/ILIAS/Contact/lang/buddysystem_cs.po b/components/ILIAS/Contact/lang/buddysystem_cs.po new file mode 100644 index 000000000000..2109babd4f4d --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_cs.po @@ -0,0 +1,191 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: buddysystem\n" + +msgid "buddy_allow_to_contact_me" +msgstr "Umožnit kontakt" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +msgid "buddy_allow_to_contact_me_info" +msgstr "Je-li aktivováno, ostatní uživatelé mi mohou poslat žádost o navázání kontaktu." + +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Potvrdit požadavek" + +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Zrušit požadavek" + +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Odpojit" + +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignorovat" + +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Potvrdit" + +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Zrušit požadavek" + +msgid "buddy_bs_action_already_ignored" +msgstr "Již ignorovaný uživatel „%s“." + +msgid "buddy_bs_action_already_linked" +msgstr "Již přijata žádost o kontakt od uživatele „%s“." + +msgid "buddy_bs_action_already_requested" +msgstr "Již požadovaný uživatel „%s“." + +msgid "buddy_bs_action_already_unlinked" +msgstr "Stav kontaktu pro uživatele „%s“ je již odpojen." + +msgid "buddy_bs_action_not_possible" +msgstr "Akce není možná" + +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Požadovaný kontakt" + +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Požadavek ignorován" + +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Spojeno" + +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Spojeno" + +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Požadovaný kontakt" + +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Požadavek" + +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Požádat o kontakt" + +msgid "buddy_bs_state_ignored_request_a" +msgstr "Požadováno" + +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignorováno" + +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignorováno" + +msgid "buddy_bs_state_linked" +msgstr "Spojeno" + +msgid "buddy_bs_state_linked_a" +msgstr "Spojeno" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +msgid "buddy_bs_state_requested" +msgstr "Požadováno" + +msgid "buddy_bs_state_requested_a" +msgstr "Požadováno" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +msgid "buddy_bs_state_requested_p" +msgstr "Požadováno" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +msgid "buddy_bs_state_unlinked_a" +msgstr "Odpojeno" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +msgid "buddy_enable" +msgstr "Aktivovat „Kontakty“" + +msgid "buddy_enable_info" +msgstr "Pokud je tato možnost povolena, uživatelé se mohou vzájemně kontaktovat tím, že zahájí žádosti o kontakt. Kromě toho osobní nastavení uživatele umožňuje povolit nebo zabránit kontaktu." + +msgid "buddy_handle_contact_request" +msgstr "Žádost o kontakt" + +#, fuzzy +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +msgid "buddy_notification_contact_request" +msgstr "Žádost o kontakt" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignorovat požadavek" + +#, fuzzy +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +msgid "buddy_notification_contact_request_link_osd" +msgstr "Schválit požadavek" + +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]uživatel „[REQUESTING_USER]“ vás chce přidat do seznamu přátel.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +msgid "buddy_notification_contact_request_short" +msgstr "Uživatel „[REQUESTING_USER]“ vás chce přidat do seznamu přátel.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +msgid "buddy_relation_requested" +msgstr "Uživateli byl odeslán požadavek." + +msgid "buddy_request_approved" +msgstr "Úspěšně jste schválili kontakt." + +msgid "buddy_request_ignored" +msgstr "Ignorovali jste uživatele." + +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +msgid "buddy_tbl_title_relations" +msgstr "Vztahy s ostatními uživateli" + +msgid "buddy_use_osd" +msgstr "Vyskakovací okno Žádosti o kontakt" + +msgid "buddy_use_osd_info" +msgstr "Zobrazí se vyskakovací okno, které vás upozorní, že vás chce uživatel přidat do seznamů přátel." + +msgid "buddy_view_gallery" +msgstr "Galerie" + +msgid "buddy_view_table" +msgstr "List" diff --git a/components/ILIAS/Contact/lang/buddysystem_da.po b/components/ILIAS/Contact/lang/buddysystem_da.po new file mode 100644 index 000000000000..81d02380b750 --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_da.po @@ -0,0 +1,237 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: buddysystem\n" + +#, fuzzy +msgid "buddy_allow_to_contact_me" +msgstr "Allow to contact me" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +#, fuzzy +msgid "buddy_allow_to_contact_me_info" +msgstr "If enabled, other users are able to send me request for getting into contact." + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Confirm Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Unlink" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignore" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Confirm" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_action_already_ignored" +msgstr "Already ignored user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_linked" +msgstr "Already accepted the contact request from user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_requested" +msgstr "Already requested user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_unlinked" +msgstr "The contact state for user '%s' is already unlinked." + +#, fuzzy +msgid "buddy_bs_action_not_possible" +msgstr "Action not possible" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Request Ignored" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Request" + +#, fuzzy +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Request Contact" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_linked" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_requested" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +#, fuzzy +msgid "buddy_bs_state_requested_p" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_a" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +#, fuzzy +msgid "buddy_enable" +msgstr "Activate ‘Contacts’" + +#, fuzzy +msgid "buddy_enable_info" +msgstr "If enabled, users are allowed to contact each other by initiating contact requests. Additionally, there is a personal user setting to allow or prevent being contacted." + +#, fuzzy +msgid "buddy_handle_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +#, fuzzy +msgid "buddy_notification_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link_osd" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]the user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_notification_contact_request_short" +msgstr "The user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_relation_requested" +msgstr "A request has been sent to the user." + +#, fuzzy +msgid "buddy_request_approved" +msgstr "You successfully approved the contact." + +#, fuzzy +msgid "buddy_request_ignored" +msgstr "You ignored the user." + +#, fuzzy +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +#, fuzzy +msgid "buddy_tbl_title_relations" +msgstr "Relations to Other Users" + +#, fuzzy +msgid "buddy_use_osd" +msgstr "Popup Contact Requests" + +#, fuzzy +msgid "buddy_use_osd_info" +msgstr "Display a popup to indicate a user wants to add you to his friends lists." + +#, fuzzy +msgid "buddy_view_gallery" +msgstr "Gallery" + +#, fuzzy +msgid "buddy_view_table" +msgstr "List" diff --git a/components/ILIAS/Contact/lang/buddysystem_de.po b/components/ILIAS/Contact/lang/buddysystem_de.po new file mode 100644 index 000000000000..2bfa42310bcd --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_de.po @@ -0,0 +1,180 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: buddysystem\n" + +msgid "buddy_allow_to_contact_me" +msgstr "Kontaktanfragen erlauben" + +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Bestimmt ob standardmässig Kontaktanfragen verschickt werden können." + +msgid "buddy_allow_to_contact_me_info" +msgstr "Wenn aktiviert, können andere Benutzer mir Kontaktanfragen senden." + +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Anfrage bestätigen" + +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Anfrage zurückziehen" + +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Kontakt aufheben" + +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Kontakt ignorieren" + +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Kontakt bestätigen" + +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Anfrage zurückziehen" + +msgid "buddy_bs_action_already_ignored" +msgstr "Die Aktion ist nicht möglich, da die Kontaktanfrage von Benutzer „%s“ bereits ignoriert wurde." + +msgid "buddy_bs_action_already_linked" +msgstr "Die Aktion ist nicht möglich, da die Kontaktanfrage für Benutzer „%s“ bereits bestätigt wurde." + +msgid "buddy_bs_action_already_requested" +msgstr "Die Aktion ist nicht möglich, da Benutzer „%s“ bereits angefragt wurde." + +msgid "buddy_bs_action_already_unlinked" +msgstr "Die Aktion ist nicht möglich. Jeglicher Kontakt zu Benutzer „%s“ wurde bereits gelöst." + +msgid "buddy_bs_action_not_possible" +msgstr "Aktion nicht möglich" + +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Kontakt angefragt" + +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Anfrage ignoriert" + +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Vernetzt" + +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Vernetzt" + +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Kontakt angefragt" + +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Kontaktanfrage" + +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Kontakt anfragen" + +msgid "buddy_bs_state_ignored_request_a" +msgstr "Angefragt" + +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignoriert" + +msgid "buddy_bs_state_ignoredrequest" +msgstr "Von mir Ignoriert" + +msgid "buddy_bs_state_linked" +msgstr "Vernetzt" + +msgid "buddy_bs_state_linked_a" +msgstr "Vernetzt" + +msgid "buddy_bs_state_linked_p" +msgstr "Vernetzt" + +msgid "buddy_bs_state_requested" +msgstr "Angefragt" + +msgid "buddy_bs_state_requested_a" +msgstr "Angefragt" + +msgid "buddy_bs_state_requested_filter_a" +msgstr "Auf Reaktion wartend" + +msgid "buddy_bs_state_requested_filter_p" +msgstr "Aktion erforderlich" + +msgid "buddy_bs_state_requested_p" +msgstr "Angefragt" + +msgid "buddy_bs_state_unlinked" +msgstr "Nicht vernetzt" + +msgid "buddy_bs_state_unlinked_a" +msgstr "Nicht vernetzt" + +msgid "buddy_bs_state_unlinked_p" +msgstr "Nicht vernetzt" + +msgid "buddy_confirm_unlink" +msgstr "Möchten Sie die Verbindung zu diesem Kontakt wirklich aufheben?" + +msgid "buddy_enable" +msgstr "Aktiviere „Benutzerkontakte“" + +msgid "buddy_enable_info" +msgstr "Falls aktiviert, können Benutzer im System über Kontaktanfragen miteinander in Verbindung treten. Eine zusätzliche persönliche Einstellung ermöglicht jedem Benutzer, Kontaktaufnahmen zuzulassen oder zu verhindern." + +msgid "buddy_handle_contact_request" +msgstr "Kontaktanfrage" + +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profil nicht veröffentlicht" + +msgid "buddy_notification_contact_request" +msgstr "Kontaktanfrage" + +msgid "buddy_notification_contact_request_ignore" +msgstr "Anfrage ignorieren" + +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Anfrage ignorieren" + +msgid "buddy_notification_contact_request_link" +msgstr "Anfrage bestätigen" + +msgid "buddy_notification_contact_request_link_osd" +msgstr "Anfrage bestätigen" + +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]\"[REQUESTING_USER]\" möchte mit Ihnen in Kontakt treten.[BR][BR]Link zum Persönlichen Profil: [PERSONAL_PROFILE_LINK][BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +msgid "buddy_notification_contact_request_short" +msgstr "Der Benutzer \"[REQUESTING_USER]\" möchte mit Ihnen in Kontakt treten." + +msgid "buddy_relation_requested" +msgstr "Dem Benutzer wurde eine Kontaktanfrage gesendet." + +msgid "buddy_request_approved" +msgstr "Der Kontakt wurde erfolgreich hergestellt." + +msgid "buddy_request_ignored" +msgstr "Sie haben den Benutzer ignoriert." + +msgid "buddy_tbl_filter_state" +msgstr "Status" + +msgid "buddy_tbl_state_actions_col_label" +msgstr "Status" + +msgid "buddy_tbl_title_relations" +msgstr "Beziehungen zu anderen Benutzern" + +msgid "buddy_use_osd" +msgstr "Pop-up Kontaktanfragen" + +msgid "buddy_use_osd_info" +msgstr "Zeigt ein Pop-up an, wenn ein Benutzer mit mir in Kontakt treten möchte." + +msgid "buddy_view_gallery" +msgstr "Galerie" + +msgid "buddy_view_table" +msgstr "Liste" diff --git a/components/ILIAS/Contact/lang/buddysystem_el.po b/components/ILIAS/Contact/lang/buddysystem_el.po new file mode 100644 index 000000000000..d19a96157b74 --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_el.po @@ -0,0 +1,237 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: buddysystem\n" + +#, fuzzy +msgid "buddy_allow_to_contact_me" +msgstr "Allow to contact me" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +#, fuzzy +msgid "buddy_allow_to_contact_me_info" +msgstr "If enabled, other users are able to send me request for getting into contact." + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Confirm Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Unlink" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignore" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Confirm" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_action_already_ignored" +msgstr "Already ignored user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_linked" +msgstr "Already accepted the contact request from user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_requested" +msgstr "Already requested user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_unlinked" +msgstr "The contact state for user '%s' is already unlinked." + +#, fuzzy +msgid "buddy_bs_action_not_possible" +msgstr "Action not possible" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Request Ignored" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Request" + +#, fuzzy +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Request Contact" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_linked" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_requested" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +#, fuzzy +msgid "buddy_bs_state_requested_p" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_a" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +#, fuzzy +msgid "buddy_enable" +msgstr "Activate ‘Contacts’" + +#, fuzzy +msgid "buddy_enable_info" +msgstr "If enabled, users are allowed to contact each other by initiating contact requests. Additionally, there is a personal user setting to allow or prevent being contacted." + +#, fuzzy +msgid "buddy_handle_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +#, fuzzy +msgid "buddy_notification_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link_osd" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]the user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_notification_contact_request_short" +msgstr "The user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_relation_requested" +msgstr "A request has been sent to the user." + +#, fuzzy +msgid "buddy_request_approved" +msgstr "You successfully approved the contact." + +#, fuzzy +msgid "buddy_request_ignored" +msgstr "You ignored the user." + +#, fuzzy +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +#, fuzzy +msgid "buddy_tbl_title_relations" +msgstr "Relations to Other Users" + +#, fuzzy +msgid "buddy_use_osd" +msgstr "Popup Contact Requests" + +#, fuzzy +msgid "buddy_use_osd_info" +msgstr "Display a popup to indicate a user wants to add you to his friends lists." + +#, fuzzy +msgid "buddy_view_gallery" +msgstr "Gallery" + +#, fuzzy +msgid "buddy_view_table" +msgstr "List" diff --git a/components/ILIAS/Contact/lang/buddysystem_en.po b/components/ILIAS/Contact/lang/buddysystem_en.po new file mode 100644 index 000000000000..0d9c57405a7b --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_en.po @@ -0,0 +1,180 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: buddysystem\n" + +msgid "buddy_allow_to_contact_me" +msgstr "Allow Contact Requests" + +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +msgid "buddy_allow_to_contact_me_info" +msgstr "Allow other users to send you contact requests." + +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Confirm Request" + +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Cancel Request" + +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Unlink" + +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignore Contact" + +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Confirm Contact" + +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Cancel Request" + +msgid "buddy_bs_action_already_ignored" +msgstr "Action not possible. Already ignored user '%s'." + +msgid "buddy_bs_action_already_linked" +msgstr "Action not possible. Already accepted the contact request from user '%s'." + +msgid "buddy_bs_action_already_requested" +msgstr "Action not possible. Already requested user '%s'." + +msgid "buddy_bs_action_already_unlinked" +msgstr "Action not possible. The contact state for user '%s' is already unlinked." + +msgid "buddy_bs_action_not_possible" +msgstr "Action not possible" + +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Requested Contact" + +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Request Ignored" + +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Linked" + +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Linked" + +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Requested Contact" + +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Request" + +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Request Contact" + +msgid "buddy_bs_state_ignored_request_a" +msgstr "Requested" + +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignored" + +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignored by me" + +msgid "buddy_bs_state_linked" +msgstr "Linked" + +msgid "buddy_bs_state_linked_a" +msgstr "Linked" + +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +msgid "buddy_bs_state_requested" +msgstr "Requested" + +msgid "buddy_bs_state_requested_a" +msgstr "Requested" + +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +msgid "buddy_bs_state_requested_p" +msgstr "Requested" + +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +msgid "buddy_bs_state_unlinked_a" +msgstr "Unlinked" + +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +msgid "buddy_enable" +msgstr "Activate ‘Contacts’" + +msgid "buddy_enable_info" +msgstr "If enabled, users are allowed to contact each other by initiating contact requests. Additionally, there is a personal user setting to allow or prevent being contacted." + +msgid "buddy_handle_contact_request" +msgstr "Contact Request" + +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +msgid "buddy_notification_contact_request" +msgstr "Contact Request" + +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignore Request" + +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +msgid "buddy_notification_contact_request_link_osd" +msgstr "Approve Request" + +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]\"[REQUESTING_USER]\" wants to add you to their friends list.[BR][BR]Personal Profile Link: [PERSONAL_PROFILE_LINK][BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +msgid "buddy_notification_contact_request_short" +msgstr "The user \"[REQUESTING_USER]\" wants to add you to their friends list." + +msgid "buddy_relation_requested" +msgstr "A request has been sent to the user." + +msgid "buddy_request_approved" +msgstr "You successfully approved the contact." + +msgid "buddy_request_ignored" +msgstr "You ignored the user." + +msgid "buddy_tbl_filter_state" +msgstr "Status" + +msgid "buddy_tbl_state_actions_col_label" +msgstr "State" + +msgid "buddy_tbl_title_relations" +msgstr "Relations to Other Users" + +msgid "buddy_use_osd" +msgstr "Popup Contact Requests" + +msgid "buddy_use_osd_info" +msgstr "Display a popup to indicate a user wants to add you to his friends lists." + +msgid "buddy_view_gallery" +msgstr "Gallery" + +msgid "buddy_view_table" +msgstr "List" diff --git a/components/ILIAS/Contact/lang/buddysystem_es.po b/components/ILIAS/Contact/lang/buddysystem_es.po new file mode 100644 index 000000000000..87c75747379e --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_es.po @@ -0,0 +1,180 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: buddysystem\n" + +msgid "buddy_allow_to_contact_me" +msgstr "Permitir solicitudes de contacto" + +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +msgid "buddy_allow_to_contact_me_info" +msgstr "Otros usuarios pueden enviarme solicitudes para ponerse en contacto." + +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Confirmar solicitud" + +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Cancelar solicitud" + +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Desvincular" + +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignorar contacto" + +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Confirmar contacto" + +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Cancelar solicitud" + +msgid "buddy_bs_action_already_ignored" +msgstr "Acción no posible. Ya ha ignorado al usuario '%s'." + +msgid "buddy_bs_action_already_linked" +msgstr "Acción no posible. Ya ha aceptado la solicitud de contacto del usuario '%s'." + +msgid "buddy_bs_action_already_requested" +msgstr "Acción no posible. Ya ha enviado una solicitud al usuario '%s'." + +msgid "buddy_bs_action_already_unlinked" +msgstr "Acción no posible. El estado de contacto para el usuario '%s' ya es desvinculado." + +msgid "buddy_bs_action_not_possible" +msgstr "Acción no posible" + +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Contacto solicitado" + +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Solicitud ignorada" + +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Vinculado" + +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Vinculado" + +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Contacto solicitado" + +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Solicitud" + +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Solicitar contacto" + +msgid "buddy_bs_state_ignored_request_a" +msgstr "Solicitado" + +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignorado" + +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignorado" + +msgid "buddy_bs_state_linked" +msgstr "Vinculado" + +msgid "buddy_bs_state_linked_a" +msgstr "Vinculado" + +msgid "buddy_bs_state_linked_p" +msgstr "Vinculado" + +msgid "buddy_bs_state_requested" +msgstr "Solicitado" + +msgid "buddy_bs_state_requested_a" +msgstr "Solicitado" + +msgid "buddy_bs_state_requested_filter_a" +msgstr "Esperando reacción" + +msgid "buddy_bs_state_requested_filter_p" +msgstr "Acción requerida" + +msgid "buddy_bs_state_requested_p" +msgstr "Solicitado" + +msgid "buddy_bs_state_unlinked" +msgstr "Desvinculado" + +msgid "buddy_bs_state_unlinked_a" +msgstr "Desvinculado" + +msgid "buddy_bs_state_unlinked_p" +msgstr "Desvinculado" + +msgid "buddy_confirm_unlink" +msgstr "¿Realmente deseas desconectarte de este contacto?" + +msgid "buddy_enable" +msgstr "Activar ‘Contactos’" + +msgid "buddy_enable_info" +msgstr "Si se habilita, los usuarios podrán contactar entre sí iniciando solicitudes de contacto. Además, existe un ajuste personal de usuario para permitir o impedir ser contactado." + +msgid "buddy_handle_contact_request" +msgstr "Solicitud de contacto" + +msgid "buddy_noti_cr_profile_not_published" +msgstr "Perfil no publicado" + +msgid "buddy_notification_contact_request" +msgstr "Solicitud de contacto" + +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignorar solicitud" + +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignorar solicitud" + +msgid "buddy_notification_contact_request_link" +msgstr "Aprobar solicitud" + +msgid "buddy_notification_contact_request_link_osd" +msgstr "Aprobar solicitud" + +msgid "buddy_notification_contact_request_long" +msgstr "¡Hola, [SALUTATION]![BR][BR]\"[REQUESTING_USER]\" desea añadirte a su lista de amigos.[BR][BR]Enlace al perfil personal: [PERSONAL_PROFILE_LINK][BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +msgid "buddy_notification_contact_request_short" +msgstr "El usuario \"[REQUESTING_USER]\" desea añadirte a su lista de amigos." + +msgid "buddy_relation_requested" +msgstr "Se ha enviado una solicitud al usuario." + +msgid "buddy_request_approved" +msgstr "Has aprobado el contacto correctamente." + +msgid "buddy_request_ignored" +msgstr "Has ignorado al usuario." + +msgid "buddy_tbl_filter_state" +msgstr "Estado" + +msgid "buddy_tbl_state_actions_col_label" +msgstr "Estado / Acción" + +msgid "buddy_tbl_title_relations" +msgstr "Relaciones con otros usuarios" + +msgid "buddy_use_osd" +msgstr "Ventanas emergentes de solicitudes de contacto" + +msgid "buddy_use_osd_info" +msgstr "Muestra una ventana emergente para indicar que un usuario desea añadirte a su lista de amigos." + +msgid "buddy_view_gallery" +msgstr "Galería" + +msgid "buddy_view_table" +msgstr "Lista" diff --git a/components/ILIAS/Contact/lang/buddysystem_et.po b/components/ILIAS/Contact/lang/buddysystem_et.po new file mode 100644 index 000000000000..e13ee6622fdd --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_et.po @@ -0,0 +1,237 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: buddysystem\n" + +#, fuzzy +msgid "buddy_allow_to_contact_me" +msgstr "Allow to contact me" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +#, fuzzy +msgid "buddy_allow_to_contact_me_info" +msgstr "If enabled, other users are able to send me request for getting into contact." + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Confirm Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Unlink" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignore" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Confirm" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_action_already_ignored" +msgstr "Already ignored user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_linked" +msgstr "Already accepted the contact request from user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_requested" +msgstr "Already requested user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_unlinked" +msgstr "The contact state for user '%s' is already unlinked." + +#, fuzzy +msgid "buddy_bs_action_not_possible" +msgstr "Action not possible" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Request Ignored" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Request" + +#, fuzzy +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Request Contact" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_linked" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_requested" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +#, fuzzy +msgid "buddy_bs_state_requested_p" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_a" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +#, fuzzy +msgid "buddy_enable" +msgstr "Activate ‘Contacts’" + +#, fuzzy +msgid "buddy_enable_info" +msgstr "If enabled, users are allowed to contact each other by initiating contact requests. Additionally, there is a personal user setting to allow or prevent being contacted." + +#, fuzzy +msgid "buddy_handle_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +#, fuzzy +msgid "buddy_notification_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link_osd" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]the user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_notification_contact_request_short" +msgstr "The user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_relation_requested" +msgstr "A request has been sent to the user." + +#, fuzzy +msgid "buddy_request_approved" +msgstr "You successfully approved the contact." + +#, fuzzy +msgid "buddy_request_ignored" +msgstr "You ignored the user." + +#, fuzzy +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +#, fuzzy +msgid "buddy_tbl_title_relations" +msgstr "Relations to Other Users" + +#, fuzzy +msgid "buddy_use_osd" +msgstr "Popup Contact Requests" + +#, fuzzy +msgid "buddy_use_osd_info" +msgstr "Display a popup to indicate a user wants to add you to his friends lists." + +#, fuzzy +msgid "buddy_view_gallery" +msgstr "Gallery" + +#, fuzzy +msgid "buddy_view_table" +msgstr "List" diff --git a/components/ILIAS/Contact/lang/buddysystem_fa.po b/components/ILIAS/Contact/lang/buddysystem_fa.po new file mode 100644 index 000000000000..f9bd5cafb6df --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_fa.po @@ -0,0 +1,237 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: buddysystem\n" + +#, fuzzy +msgid "buddy_allow_to_contact_me" +msgstr "Allow to contact me" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +#, fuzzy +msgid "buddy_allow_to_contact_me_info" +msgstr "If enabled, other users are able to send me request for getting into contact." + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Confirm Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Unlink" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignore" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Confirm" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_action_already_ignored" +msgstr "Already ignored user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_linked" +msgstr "Already accepted the contact request from user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_requested" +msgstr "Already requested user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_unlinked" +msgstr "The contact state for user '%s' is already unlinked." + +#, fuzzy +msgid "buddy_bs_action_not_possible" +msgstr "Action not possible" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Request Ignored" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Request" + +#, fuzzy +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Request Contact" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_linked" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_requested" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +#, fuzzy +msgid "buddy_bs_state_requested_p" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_a" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +#, fuzzy +msgid "buddy_enable" +msgstr "Activate ‘Contacts’" + +#, fuzzy +msgid "buddy_enable_info" +msgstr "If enabled, users are allowed to contact each other by initiating contact requests. Additionally, there is a personal user setting to allow or prevent being contacted." + +#, fuzzy +msgid "buddy_handle_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +#, fuzzy +msgid "buddy_notification_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link_osd" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]the user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_notification_contact_request_short" +msgstr "The user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_relation_requested" +msgstr "A request has been sent to the user." + +#, fuzzy +msgid "buddy_request_approved" +msgstr "You successfully approved the contact." + +#, fuzzy +msgid "buddy_request_ignored" +msgstr "You ignored the user." + +#, fuzzy +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +#, fuzzy +msgid "buddy_tbl_title_relations" +msgstr "Relations to Other Users" + +#, fuzzy +msgid "buddy_use_osd" +msgstr "Popup Contact Requests" + +#, fuzzy +msgid "buddy_use_osd_info" +msgstr "Display a popup to indicate a user wants to add you to his friends lists." + +#, fuzzy +msgid "buddy_view_gallery" +msgstr "Gallery" + +#, fuzzy +msgid "buddy_view_table" +msgstr "List" diff --git a/components/ILIAS/Contact/lang/buddysystem_fr.po b/components/ILIAS/Contact/lang/buddysystem_fr.po new file mode 100644 index 000000000000..83d51c62e2c4 --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_fr.po @@ -0,0 +1,183 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: buddysystem\n" + +msgid "buddy_allow_to_contact_me" +msgstr "Autoriser à être contacté" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +msgid "buddy_allow_to_contact_me_info" +msgstr "Si cette option est activée, d'autres utilisateurs sont en mesure de me faire parvenir une demande de contact." + +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Confirmer demande" + +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Annuler demande" + +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Non liée" + +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignore" + +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Confirm" + +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Annuler demande" + +msgid "buddy_bs_action_already_ignored" +msgstr "Already ignored user '%s'." + +msgid "buddy_bs_action_already_linked" +msgstr "Already accepted the contact request from user '%s'." + +msgid "buddy_bs_action_already_requested" +msgstr "Already requested user '%s'." + +msgid "buddy_bs_action_already_unlinked" +msgstr "The contact state for user '%s' is already unlinked." + +msgid "buddy_bs_action_not_possible" +msgstr "Action impossible" + +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Contact demandé" + +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Demande ignorée" + +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Liée" + +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Liée" + +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Contact demandé" + +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Demande" + +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Demander contact" + +msgid "buddy_bs_state_ignored_request_a" +msgstr "Demandé" + +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignoré" + +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignoré" + +msgid "buddy_bs_state_linked" +msgstr "Liée" + +msgid "buddy_bs_state_linked_a" +msgstr "Liée" + +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +msgid "buddy_bs_state_requested" +msgstr "Demandé" + +msgid "buddy_bs_state_requested_a" +msgstr "Demandé" + +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +msgid "buddy_bs_state_requested_p" +msgstr "Demandé" + +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +msgid "buddy_bs_state_unlinked_a" +msgstr "Non liée" + +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +msgid "buddy_enable" +msgstr "Activer les Contacts" + +msgid "buddy_enable_info" +msgstr "Si activé, les utilisateurs sont autorisés à communiquer entre eux en lanàçant des demandes de contact. De plus, il y a un paramètre d'utilisateur personnel pour permettre ou éviter d'être contacté." + +msgid "buddy_handle_contact_request" +msgstr "Demande de contact" + +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +msgid "buddy_notification_contact_request" +msgstr "Demande de contact" + +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request:" + +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignorer demande" + +msgid "buddy_notification_contact_request_link" +msgstr "Approuver demande:" + +msgid "buddy_notification_contact_request_link_osd" +msgstr "Approuver demande" + +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]L’utilisateur «[REQUESTING_USER]» veut vous ajouter à sa liste d’amis.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +msgid "buddy_notification_contact_request_short" +msgstr "L’utilisateur «[REQUESTING_USER]» veut vous ajouter à sa liste d’amis.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +msgid "buddy_relation_requested" +msgstr "Une demande a été envoyée à l’utilisateur." + +msgid "buddy_request_approved" +msgstr "Vous avez approuvé le contact avec succès." + +msgid "buddy_request_ignored" +msgstr "Vous avez ignoré l’utilisateur." + +msgid "buddy_tbl_filter_state" +msgstr "Statut" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +msgid "buddy_tbl_title_relations" +msgstr "Contacts" + +msgid "buddy_use_osd" +msgstr "Pop-up de demandes de contact" + +msgid "buddy_use_osd_info" +msgstr "Affiche un pop-up pour indiquer qu’un utilisateur veut vous ajouter à sa liste d’amis." + +msgid "buddy_view_gallery" +msgstr "Galerie" + +msgid "buddy_view_table" +msgstr "Liste" diff --git a/components/ILIAS/Contact/lang/buddysystem_hr.po b/components/ILIAS/Contact/lang/buddysystem_hr.po new file mode 100644 index 000000000000..82bd88af5acb --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_hr.po @@ -0,0 +1,190 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: buddysystem\n" + +msgid "buddy_allow_to_contact_me" +msgstr "Dopusti da me se kontaktira" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +msgid "buddy_allow_to_contact_me_info" +msgstr "Ako je aktivirano, drugi korisnici mogu mi slati upite za kontakt." + +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Potvrdite zahtjev" + +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Otkaži zahtjev" + +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Prekini vezu" + +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Zanemari kontakt" + +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Potvrdi kontakt" + +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Otkaži zahtjev" + +msgid "buddy_bs_action_already_ignored" +msgstr "Akcija nije moguća. Zahtjev za kontakt korisnika '%s' je već ignoriran." + +msgid "buddy_bs_action_already_linked" +msgstr "Akcija nije moguća. Već je prihvaćen zahtjev za kontakt korisnika '%s'." + +msgid "buddy_bs_action_already_requested" +msgstr "Akcija nije moguća. Korisniku '%s' je već poslan zahtev." + +msgid "buddy_bs_action_already_unlinked" +msgstr "Akcija nije moguća. Svi kontakti s korisnikom '%s' su već prekinuti." + +msgid "buddy_bs_action_not_possible" +msgstr "Akcija nije moguća" + +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Zatražen kontakt" + +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Zahtjev je ignoriran" + +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Povezan" + +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Povezan" + +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Zatražen kontakt" + +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Zahtjev" + +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Zatraži kontakt" + +msgid "buddy_bs_state_ignored_request_a" +msgstr "Zatraženo" + +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignorirano" + +msgid "buddy_bs_state_ignoredrequest" +msgstr "Zanemaren" + +msgid "buddy_bs_state_linked" +msgstr "Zanemaren" + +msgid "buddy_bs_state_linked_a" +msgstr "Povezan" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +msgid "buddy_bs_state_requested" +msgstr "Zatražen" + +msgid "buddy_bs_state_requested_a" +msgstr "Zatražen" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +msgid "buddy_bs_state_requested_p" +msgstr "Zatražen" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +msgid "buddy_bs_state_unlinked_a" +msgstr "Prekinuta veza" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +msgid "buddy_enable" +msgstr "Aktivirajte 'Kontakte'" + +msgid "buddy_enable_info" +msgstr "Ako je aktivirano, korisnicima je dopušteno međusobno kontaktiranje iniciranjem zahtjeva za kontakt. Uz to, postoji osobna korisnička postavka koja omogućuje ili sprječava kontaktiranje." + +msgid "buddy_handle_contact_request" +msgstr "Zahtjev za kontakt" + +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profil nije objavljen" + +msgid "buddy_notification_contact_request" +msgstr "Zahtjev za kontakt" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignoriraj zahtjev" + +#, fuzzy +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +msgid "buddy_notification_contact_request_link_osd" +msgstr "Odobri zahtjev" + +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION] [BR] [BR] \"[REQUESTING_USER]\" želi vas dodati na svoj popis prijatelja. [BR] [BR] Link na osobni profil: [PERSONAL_PROFILE_LINK] [BR] [BR] [APPROVE_REQUEST_TXT] [APPROVE_REQUEST] [BR ] [IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +msgid "buddy_notification_contact_request_short" +msgstr "Korisnik \"[REQUESTING_USER]\" želi vas dodati na svoj popis prijatelja. [BR] [BR] [APPROVE_REQUEST] [BR] [IGNORE_REQUEST]" + +msgid "buddy_relation_requested" +msgstr "Korisniku je poslan zahtjev." + +msgid "buddy_request_approved" +msgstr "Uspješno ste odobrili kontakt." + +msgid "buddy_request_ignored" +msgstr "Ignorirali ste korisnika." + +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +msgid "buddy_tbl_title_relations" +msgstr "Odnosi s ostalim korisnicima" + +msgid "buddy_use_osd" +msgstr "Skočni zahtjevi za kontakt" + +msgid "buddy_use_osd_info" +msgstr "Prikažite skočni prozor koji označava da vas korisnik želi dodati na svoje popise prijatelja." + +msgid "buddy_view_gallery" +msgstr "Galerija" + +msgid "buddy_view_table" +msgstr "Popis" diff --git a/components/ILIAS/Contact/lang/buddysystem_hu.po b/components/ILIAS/Contact/lang/buddysystem_hu.po new file mode 100644 index 000000000000..36c7251efc40 --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_hu.po @@ -0,0 +1,180 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: buddysystem\n" + +msgid "buddy_allow_to_contact_me" +msgstr "Ismerősnek jelölhetnek" + +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Meghatározza, hogy a felhasználók alapértelmezés szerint küldhetnek-e egymásnak kapcsolatfelvételi kéréseket." + +msgid "buddy_allow_to_contact_me_info" +msgstr "A többi felhasználó kérést küldhet felém, hogy ismerősnek kíván megjelölni." + +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Jelölés elfogadása" + +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Jelölés visszavonása" + +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Jelölés visszavonása" + +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Jelölés elutasítása" + +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Jelölés elfogadása" + +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Jelölés visszavonása" + +msgid "buddy_bs_action_already_ignored" +msgstr "Ezt a műveletet nem lehet végrehajtani. ‘%s’ felhasználót már elutasította." + +msgid "buddy_bs_action_already_linked" +msgstr "Ezt a műveletet nem lehet végrehajtani. ‘%s’ felhasználótól már elfogadta a jelölést." + +msgid "buddy_bs_action_already_requested" +msgstr "Ezt a műveletet nem lehet végrehajtani. ‘%s’ felhasználónak már küldött jelölést." + +msgid "buddy_bs_action_already_unlinked" +msgstr "Ezt a műveletet nem lehet végrehajtani. ‘%s’ felhasználótól már visszavonta a jelölést." + +msgid "buddy_bs_action_not_possible" +msgstr "Ezt a műveletet nem lehet végrehajtani" + +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Elutasított" + +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Elutasított" + +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Visszaigazolt" + +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Visszaigazolt" + +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Jelölés kezelése" + +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Jelölés kezelése" + +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Ismerősnek jelölés" + +msgid "buddy_bs_state_ignored_request_a" +msgstr "Ismerősnek jelölés elküldve" + +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ismerősnek jelölés elutasítva" + +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ismerősnek jelölés elutasítva" + +msgid "buddy_bs_state_linked" +msgstr "Ismerős" + +msgid "buddy_bs_state_linked_a" +msgstr "Ismerős" + +msgid "buddy_bs_state_linked_p" +msgstr "Összekötve" + +msgid "buddy_bs_state_requested" +msgstr "Ismerősnek jelölés elküldve" + +msgid "buddy_bs_state_requested_a" +msgstr "Ismerősnek jelölés elküldve" + +msgid "buddy_bs_state_requested_filter_a" +msgstr "Várakozás a válaszra" + +msgid "buddy_bs_state_requested_filter_p" +msgstr "Művelet szükséges" + +msgid "buddy_bs_state_requested_p" +msgstr "Ismerősnek jelölés elküldve" + +msgid "buddy_bs_state_unlinked" +msgstr "Nincs összekötve" + +msgid "buddy_bs_state_unlinked_a" +msgstr "Ismeretlen" + +msgid "buddy_bs_state_unlinked_p" +msgstr "Nincs összekötve" + +msgid "buddy_confirm_unlink" +msgstr "Biztos, hogy bontja a kapcsolatot ezzel az ismerőssel?" + +msgid "buddy_enable" +msgstr "‘Kapcsolatok’ aktiválása" + +msgid "buddy_enable_info" +msgstr "Felhasználók kérések küldésével/elfogadásával ismerősnek jelölhetik meg egymást. Az összes felhasználó egyéni beállításában engedélyezheti/tilthatja, hogy őt ismerősnek jelöljék." + +msgid "buddy_handle_contact_request" +msgstr "Kapcsolat kérése" + +msgid "buddy_noti_cr_profile_not_published" +msgstr "A profil nincs közzétéve." + +msgid "buddy_notification_contact_request" +msgstr "Ismerősnek jelölés" + +msgid "buddy_notification_contact_request_ignore" +msgstr "Ismerősnek jelölés elutasítása" + +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ismerősnek jelölés elutasítása" + +msgid "buddy_notification_contact_request_link" +msgstr "Ismerősnek jelölés elfogadása" + +msgid "buddy_notification_contact_request_link_osd" +msgstr "Ismerősnek jelölés elfogadása" + +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]‘[REQUESTING_USER]’ ismerősnek jelölt.[BR][BR]Személyes profilja: [PERSONAL_PROFILE_LINK][BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +msgid "buddy_notification_contact_request_short" +msgstr "‘[REQUESTING_USER]’ ismerősnek jelölt.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +msgid "buddy_relation_requested" +msgstr "A felhasználónak sikeresen elküldte a kérést." + +msgid "buddy_request_approved" +msgstr "Sikeresen elfogadta a jelölést." + +msgid "buddy_request_ignored" +msgstr "Figyelmen kívül hagyta a felhasználót." + +msgid "buddy_tbl_filter_state" +msgstr "Állapot" + +msgid "buddy_tbl_state_actions_col_label" +msgstr "Állapot / Művelet" + +msgid "buddy_tbl_title_relations" +msgstr "Kapcsolat a többi felhasználóval" + +msgid "buddy_use_osd" +msgstr "Ismerősnek jelölések felugró ablakban" + +msgid "buddy_use_osd_info" +msgstr "Felugró ablakban jelzi a rendszer, hogy valaki a ismerősei közé szeretné felvenni." + +msgid "buddy_view_gallery" +msgstr "Képtár" + +msgid "buddy_view_table" +msgstr "Felsorolás" diff --git a/components/ILIAS/Contact/lang/buddysystem_it.po b/components/ILIAS/Contact/lang/buddysystem_it.po new file mode 100644 index 000000000000..7ab2b6472012 --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_it.po @@ -0,0 +1,188 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: buddysystem\n" + +msgid "buddy_allow_to_contact_me" +msgstr "Consenti di contattarmi" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +msgid "buddy_allow_to_contact_me_info" +msgstr "Se consentito, altri utenti possono inviare delle richieste per contattarmi." + +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Conferma richiesta" + +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Elimina richiesta" + +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Scollega" + +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignora" + +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Confermare" + +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Elimina richiesta" + +msgid "buddy_bs_action_already_ignored" +msgstr "Utente '%s' già ignorato." + +msgid "buddy_bs_action_already_linked" +msgstr "Ho già accettato la richiesta di contatto dall'utente '%s'." + +msgid "buddy_bs_action_already_requested" +msgstr "Utente già richiesto '%s'." + +msgid "buddy_bs_action_already_unlinked" +msgstr "Lo stato del contatto per l'utente '%s' è già scollegato." + +msgid "buddy_bs_action_not_possible" +msgstr "Azione non possibile" + +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Contatto richiesto" + +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Richiesta ignorata" + +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Collegato" + +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Collegato" + +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Contatto richiesto" + +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Richiesta" + +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Richiedi contatto" + +msgid "buddy_bs_state_ignored_request_a" +msgstr "Richiesti" + +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignorato" + +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignorato" + +msgid "buddy_bs_state_linked" +msgstr "Collegato" + +msgid "buddy_bs_state_linked_a" +msgstr "Collegato" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +msgid "buddy_bs_state_requested" +msgstr "Richiesti" + +msgid "buddy_bs_state_requested_a" +msgstr "Richiesti" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +msgid "buddy_bs_state_requested_p" +msgstr "Richiesti" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +msgid "buddy_bs_state_unlinked_a" +msgstr "Scollegato" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +msgid "buddy_enable" +msgstr "Attiva “Contatti”" + +msgid "buddy_enable_info" +msgstr "Se consentito, gli utenti possono contattarsi a vicenda avviando richieste di contatto. Inoltre, c'è un'impostazione utente personale per consentire o impedire di essere contattato." + +msgid "buddy_handle_contact_request" +msgstr "Richiesta di contatto" + +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profilo non reso pubblico" + +msgid "buddy_notification_contact_request" +msgstr "Richiesta di contatto" + +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignora richiesta:" + +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignora richiesta" + +msgid "buddy_notification_contact_request_link" +msgstr "Approva richiesta:" + +msgid "buddy_notification_contact_request_link_osd" +msgstr "Approva richiesta" + +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]l’utente \"[REQUESTING_USER]\" vuole aggiungerti alla sua lista degli amici.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +msgid "buddy_notification_contact_request_short" +msgstr "L’utente \"[REQUESTING_USER]\" vuole aggiungerti alla sua lista di amici.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +msgid "buddy_relation_requested" +msgstr "Una richiesta è stata inviata all’utente." + +msgid "buddy_request_approved" +msgstr "Hai accetta il contatto con successo." + +msgid "buddy_request_ignored" +msgstr "Hai ignorato l’utente." + +msgid "buddy_tbl_filter_state" +msgstr "Stato" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +msgid "buddy_tbl_title_relations" +msgstr "Relazioni con altri utenti" + +msgid "buddy_use_osd" +msgstr "Richieste di contatto popup" + +msgid "buddy_use_osd_info" +msgstr "Visualizza un popup per indicare che un utente vuole aggiungerti alle sue listi di amici." + +msgid "buddy_view_gallery" +msgstr "Galleria" + +msgid "buddy_view_table" +msgstr "Lista" diff --git a/components/ILIAS/Contact/lang/buddysystem_ja.po b/components/ILIAS/Contact/lang/buddysystem_ja.po new file mode 100644 index 000000000000..19309b5d4334 --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_ja.po @@ -0,0 +1,180 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: buddysystem\n" + +msgid "buddy_allow_to_contact_me" +msgstr "コンタクトを許可" + +msgid "buddy_allow_to_contact_me_default_info" +msgstr "ユーザーがデフォルトで互いに連絡を取るためのリクエストを送信できるかどうかを定義します。" + +msgid "buddy_allow_to_contact_me_info" +msgstr "有効にすると他のユーザがコンタクト要求を送れるようになります。" + +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "要求を確認" + +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "要求をキャンセル" + +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "リンクなし" + +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "無視" + +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "確認" + +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "要求をキャンセル" + +msgid "buddy_bs_action_already_ignored" +msgstr "すでにユーザ'%s'を無視しました。" + +msgid "buddy_bs_action_already_linked" +msgstr "すでにユーザ'%s'からコンタクト要求を承認しました。" + +msgid "buddy_bs_action_already_requested" +msgstr "すでにユーザ'%s'を要求しました。" + +msgid "buddy_bs_action_already_unlinked" +msgstr "ユーザ'%s'のコンタクト状態はすでにリンク解除されています。" + +msgid "buddy_bs_action_not_possible" +msgstr "アクションは不可" + +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "コンタクトを要求" + +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "要求を無視" + +msgid "buddy_bs_btn_txt_linked_a" +msgstr "リンク済み" + +msgid "buddy_bs_btn_txt_linked_p" +msgstr "リンク済み" + +msgid "buddy_bs_btn_txt_requested_a" +msgstr "要求済みのコンタクト" + +msgid "buddy_bs_btn_txt_requested_p" +msgstr "要求" + +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "コンタクトを要求" + +msgid "buddy_bs_state_ignored_request_a" +msgstr "要求済み" + +msgid "buddy_bs_state_ignored_request_p" +msgstr "無視" + +msgid "buddy_bs_state_ignoredrequest" +msgstr "無視" + +msgid "buddy_bs_state_linked" +msgstr "リンク済み" + +msgid "buddy_bs_state_linked_a" +msgstr "リンク済み" + +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +msgid "buddy_bs_state_requested" +msgstr "要求済み" + +msgid "buddy_bs_state_requested_a" +msgstr "要求済み" + +msgid "buddy_bs_state_requested_filter_a" +msgstr "リアクション待ち" + +msgid "buddy_bs_state_requested_filter_p" +msgstr "アクションを要求しました" + +msgid "buddy_bs_state_requested_p" +msgstr "要求済み" + +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +msgid "buddy_bs_state_unlinked_a" +msgstr "リンクなし" + +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +msgid "buddy_confirm_unlink" +msgstr "本当にこの連絡先との接続を切断しますか?" + +msgid "buddy_enable" +msgstr "‘コンタクト’を有効化" + +msgid "buddy_enable_info" +msgstr "有効にするとユーザはコンタクト要求を出してお互いにコンタクトを許可されます。また、許可またはコンタクトの準備のパーソナルユーザ設定があります。" + +msgid "buddy_handle_contact_request" +msgstr "コンタクト要求" + +msgid "buddy_noti_cr_profile_not_published" +msgstr "プロファイルは未公開" + +msgid "buddy_notification_contact_request" +msgstr "コンタクト要求" + +msgid "buddy_notification_contact_request_ignore" +msgstr "要求を無視しました:" + +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "要求を無視" + +msgid "buddy_notification_contact_request_link" +msgstr "要求を承認:" + +msgid "buddy_notification_contact_request_link_osd" +msgstr "要求を承認" + +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]ユーザ\"[REQUESTING_USER]\"が友達リストへ追加される事を希望します。[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +msgid "buddy_notification_contact_request_short" +msgstr "ユーザ\"[REQUESTING_USER]\" が友達リストへ追加される事を希望します。[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +msgid "buddy_relation_requested" +msgstr "要求はユーザへ送信されました。" + +msgid "buddy_request_approved" +msgstr "コンタクトが承認されました。" + +msgid "buddy_request_ignored" +msgstr "ユーザを無視しました。" + +msgid "buddy_tbl_filter_state" +msgstr "ステータス" + +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +msgid "buddy_tbl_title_relations" +msgstr "他のユーザとの関係" + +msgid "buddy_use_osd" +msgstr "コンタクト要求をポップアップ" + +msgid "buddy_use_osd_info" +msgstr "友達リストへ追加したいユーザを示すポップアップを表示する" + +msgid "buddy_view_gallery" +msgstr "ギャラリー" + +msgid "buddy_view_table" +msgstr "リスト" diff --git a/components/ILIAS/Contact/lang/buddysystem_ka.po b/components/ILIAS/Contact/lang/buddysystem_ka.po new file mode 100644 index 000000000000..d09cde1fd20f --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_ka.po @@ -0,0 +1,237 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: buddysystem\n" + +#, fuzzy +msgid "buddy_allow_to_contact_me" +msgstr "Allow to contact me" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +#, fuzzy +msgid "buddy_allow_to_contact_me_info" +msgstr "If enabled, other users are able to send me request for getting into contact." + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Confirm Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Unlink" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignore" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Confirm" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_action_already_ignored" +msgstr "Already ignored user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_linked" +msgstr "Already accepted the contact request from user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_requested" +msgstr "Already requested user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_unlinked" +msgstr "The contact state for user '%s' is already unlinked." + +#, fuzzy +msgid "buddy_bs_action_not_possible" +msgstr "Action not possible" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Request Ignored" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Request" + +#, fuzzy +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Request Contact" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_linked" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_requested" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +#, fuzzy +msgid "buddy_bs_state_requested_p" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_a" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +#, fuzzy +msgid "buddy_enable" +msgstr "Activate ‘Contacts’" + +#, fuzzy +msgid "buddy_enable_info" +msgstr "If enabled, users are allowed to contact each other by initiating contact requests. Additionally, there is a personal user setting to allow or prevent being contacted." + +#, fuzzy +msgid "buddy_handle_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +#, fuzzy +msgid "buddy_notification_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link_osd" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]the user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_notification_contact_request_short" +msgstr "The user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_relation_requested" +msgstr "A request has been sent to the user." + +#, fuzzy +msgid "buddy_request_approved" +msgstr "You successfully approved the contact." + +#, fuzzy +msgid "buddy_request_ignored" +msgstr "You ignored the user." + +#, fuzzy +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +#, fuzzy +msgid "buddy_tbl_title_relations" +msgstr "Relations to Other Users" + +#, fuzzy +msgid "buddy_use_osd" +msgstr "Popup Contact Requests" + +#, fuzzy +msgid "buddy_use_osd_info" +msgstr "Display a popup to indicate a user wants to add you to his friends lists." + +#, fuzzy +msgid "buddy_view_gallery" +msgstr "Gallery" + +#, fuzzy +msgid "buddy_view_table" +msgstr "List" diff --git a/components/ILIAS/Contact/lang/buddysystem_lt.po b/components/ILIAS/Contact/lang/buddysystem_lt.po new file mode 100644 index 000000000000..c4c7107a798e --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_lt.po @@ -0,0 +1,237 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: buddysystem\n" + +#, fuzzy +msgid "buddy_allow_to_contact_me" +msgstr "Allow to contact me" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +#, fuzzy +msgid "buddy_allow_to_contact_me_info" +msgstr "If enabled, other users are able to send me request for getting into contact." + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Confirm Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Unlink" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignore" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Confirm" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_action_already_ignored" +msgstr "Already ignored user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_linked" +msgstr "Already accepted the contact request from user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_requested" +msgstr "Already requested user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_unlinked" +msgstr "The contact state for user '%s' is already unlinked." + +#, fuzzy +msgid "buddy_bs_action_not_possible" +msgstr "Action not possible" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Request Ignored" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Request" + +#, fuzzy +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Request Contact" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_linked" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_requested" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +#, fuzzy +msgid "buddy_bs_state_requested_p" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_a" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +#, fuzzy +msgid "buddy_enable" +msgstr "Activate ‘Contacts’" + +#, fuzzy +msgid "buddy_enable_info" +msgstr "If enabled, users are allowed to contact each other by initiating contact requests. Additionally, there is a personal user setting to allow or prevent being contacted." + +#, fuzzy +msgid "buddy_handle_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +#, fuzzy +msgid "buddy_notification_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link_osd" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]the user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_notification_contact_request_short" +msgstr "The user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_relation_requested" +msgstr "A request has been sent to the user." + +#, fuzzy +msgid "buddy_request_approved" +msgstr "You successfully approved the contact." + +#, fuzzy +msgid "buddy_request_ignored" +msgstr "You ignored the user." + +#, fuzzy +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +#, fuzzy +msgid "buddy_tbl_title_relations" +msgstr "Relations to Other Users" + +#, fuzzy +msgid "buddy_use_osd" +msgstr "Popup Contact Requests" + +#, fuzzy +msgid "buddy_use_osd_info" +msgstr "Display a popup to indicate a user wants to add you to his friends lists." + +#, fuzzy +msgid "buddy_view_gallery" +msgstr "Gallery" + +#, fuzzy +msgid "buddy_view_table" +msgstr "List" diff --git a/components/ILIAS/Contact/lang/buddysystem_nl.po b/components/ILIAS/Contact/lang/buddysystem_nl.po new file mode 100644 index 000000000000..a78fd25c11fe --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_nl.po @@ -0,0 +1,237 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: buddysystem\n" + +#, fuzzy +msgid "buddy_allow_to_contact_me" +msgstr "Allow to contact me" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +#, fuzzy +msgid "buddy_allow_to_contact_me_info" +msgstr "If enabled, other users are able to send me request for getting into contact." + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Confirm Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Unlink" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignore" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Confirm" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_action_already_ignored" +msgstr "Already ignored user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_linked" +msgstr "Already accepted the contact request from user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_requested" +msgstr "Already requested user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_unlinked" +msgstr "The contact state for user '%s' is already unlinked." + +#, fuzzy +msgid "buddy_bs_action_not_possible" +msgstr "Action not possible" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Request Ignored" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Request" + +#, fuzzy +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Request Contact" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_linked" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_requested" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +#, fuzzy +msgid "buddy_bs_state_requested_p" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_a" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +#, fuzzy +msgid "buddy_enable" +msgstr "Activate ‘Contacts’" + +#, fuzzy +msgid "buddy_enable_info" +msgstr "If enabled, users are allowed to contact each other by initiating contact requests. Additionally, there is a personal user setting to allow or prevent being contacted." + +#, fuzzy +msgid "buddy_handle_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +#, fuzzy +msgid "buddy_notification_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link_osd" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]the user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_notification_contact_request_short" +msgstr "The user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_relation_requested" +msgstr "A request has been sent to the user." + +#, fuzzy +msgid "buddy_request_approved" +msgstr "You successfully approved the contact." + +#, fuzzy +msgid "buddy_request_ignored" +msgstr "You ignored the user." + +#, fuzzy +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +#, fuzzy +msgid "buddy_tbl_title_relations" +msgstr "Relations to Other Users" + +#, fuzzy +msgid "buddy_use_osd" +msgstr "Popup Contact Requests" + +#, fuzzy +msgid "buddy_use_osd_info" +msgstr "Display a popup to indicate a user wants to add you to his friends lists." + +#, fuzzy +msgid "buddy_view_gallery" +msgstr "Gallery" + +#, fuzzy +msgid "buddy_view_table" +msgstr "List" diff --git a/components/ILIAS/Contact/lang/buddysystem_pl.po b/components/ILIAS/Contact/lang/buddysystem_pl.po new file mode 100644 index 000000000000..136096a1adde --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_pl.po @@ -0,0 +1,191 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: buddysystem\n" + +msgid "buddy_allow_to_contact_me" +msgstr "Pozwól na zapytania dotyczące punktu kontaktowego" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +msgid "buddy_allow_to_contact_me_info" +msgstr "Jeśli ta opcja jest aktywna, inni użytkownicy mogą wysyłać mi zapytania dotyczące punktu kontaktowego." + +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Zatwierdź zapytanie" + +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Cofnij zapytanie" + +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Anuluj punkt kontaktowy" + +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignoruj punkt kontaktowy" + +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Zatwierdź punkt kontaktowy" + +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Cofnij zapytanie" + +msgid "buddy_bs_action_already_ignored" +msgstr "Akcja nie jest możliwa, ponieważ zapytanie dotyczące punktu kontaktowego złożone przez użytkownika '%s' zostało już zignorowane." + +msgid "buddy_bs_action_already_linked" +msgstr "Akcja nie jest możliwa, ponieważ zapytanie dotyczące punktu kontaktowego dla użytkownika '%s' zostało już potwierdzone." + +msgid "buddy_bs_action_already_requested" +msgstr "Akcja nie jest możliwa, ponieważ zapytanie zostało użytkownikowi '%s' już złożone." + +msgid "buddy_bs_action_already_unlinked" +msgstr "Akcja nie jest możliwa. Wszelki kontakt do użytkownika '%s' został już przerwany." + +msgid "buddy_bs_action_not_possible" +msgstr "Akcja nie jest możliwa" + +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Zapytano o punkt kontaktowy" + +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Zignorowano zapytanie" + +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Sieciowy" + +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Sieciowy" + +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Zapytano o punkt kontaktowy" + +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Zapytanie dotyczące punktu kontaktowego" + +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Zapytaj o punkt kontaktowy" + +msgid "buddy_bs_state_ignored_request_a" +msgstr "Złożono zapytanie" + +msgid "buddy_bs_state_ignored_request_p" +msgstr "Zignorowano" + +msgid "buddy_bs_state_ignoredrequest" +msgstr "Zignorowano" + +msgid "buddy_bs_state_linked" +msgstr "Sieciowy" + +msgid "buddy_bs_state_linked_a" +msgstr "Sieciowy" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +msgid "buddy_bs_state_requested" +msgstr "Złożono zapytanie" + +msgid "buddy_bs_state_requested_a" +msgstr "Złożono zapytanie" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +msgid "buddy_bs_state_requested_p" +msgstr "Złożono zapytanie" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +msgid "buddy_bs_state_unlinked_a" +msgstr "Niesieciowy" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +msgid "buddy_enable" +msgstr "Aktywuj „Kontakty“" + +msgid "buddy_enable_info" +msgstr "Jeśli ta opcja jest aktywna, użytkownicy mogą się w systemie ze sobą kontaktować za pomocą zapytań dotyczących punktów kontaktowych. Dodatkowe indywidualne ustawienie umożliwia każdemu użytkownikowi na akceptowanie lub odrzucanie zapytań o kontakt." + +msgid "buddy_handle_contact_request" +msgstr "Zapytanie dotyczące punktu kontaktowego" + +#, fuzzy +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +msgid "buddy_notification_contact_request" +msgstr "Zapytanie dotyczące punktu kontaktowego" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignoruj zapytanie" + +#, fuzzy +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +msgid "buddy_notification_contact_request_link_osd" +msgstr "Zatwierdź zapytanie" + +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]Użytkownik \"[REQUESTING_USER]\" chce się z Tobą skontaktować.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +msgid "buddy_notification_contact_request_short" +msgstr "Użytkownik \"[REQUESTING_USER]\" chce się z Tobą skontaktować.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +msgid "buddy_relation_requested" +msgstr "Użytkownikowi zostało wysłane zapytanie dotyczące punktu kontaktowego." + +msgid "buddy_request_approved" +msgstr "Udało się nawiązać kontakt." + +msgid "buddy_request_ignored" +msgstr "Zignorowałeś użytkownika." + +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +msgid "buddy_tbl_title_relations" +msgstr "Relacja z innymi użytkownikami" + +msgid "buddy_use_osd" +msgstr "Wyskakujące okienko z zapytaniami dotyczącymi punktu kontaktowego" + +msgid "buddy_use_osd_info" +msgstr "Pokazuje wyskakujące okienko, gdy użytkownik chce się ze mną skontaktować." + +msgid "buddy_view_gallery" +msgstr "Galeria" + +msgid "buddy_view_table" +msgstr "Lista" diff --git a/components/ILIAS/Contact/lang/buddysystem_pt.po b/components/ILIAS/Contact/lang/buddysystem_pt.po new file mode 100644 index 000000000000..06c3a950ac90 --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_pt.po @@ -0,0 +1,189 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: buddysystem\n" + +msgid "buddy_allow_to_contact_me" +msgstr "Autorizar o contacto comigo" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +msgid "buddy_allow_to_contact_me_info" +msgstr "Se estiver ativado, outros utilizadores podem enviar-me um pedido para entrar em contacto." + +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Confirmar pedido" + +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Cancelar pedido" + +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Desconectar" + +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ação abortada" + +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Ativar avaliação de teste e logging" + +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Cancelar pedido" + +msgid "buddy_bs_action_already_ignored" +msgstr "Válido até" + +msgid "buddy_bs_action_already_linked" +msgstr "A sua conta expira" + +msgid "buddy_bs_action_already_requested" +msgstr "Ação" + +msgid "buddy_bs_action_already_unlinked" +msgstr "Ações" + +msgid "buddy_bs_action_not_possible" +msgstr "Ação impossível" + +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Contacto pedido" + +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Pedido ignorado" + +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Conectado" + +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Conectado" + +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Contacto pedido" + +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Pedir" + +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Pedir contacto" + +msgid "buddy_bs_state_ignored_request_a" +msgstr "Pedido" + +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignorado" + +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignorado" + +msgid "buddy_bs_state_linked" +msgstr "Conectado" + +msgid "buddy_bs_state_linked_a" +msgstr "Conectado" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +msgid "buddy_bs_state_requested" +msgstr "Pedido" + +msgid "buddy_bs_state_requested_a" +msgstr "Pedido" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +msgid "buddy_bs_state_requested_p" +msgstr "Pedido" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +msgid "buddy_bs_state_unlinked_a" +msgstr "Desconectado" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +msgid "buddy_enable" +msgstr "Ativar ‘Contactos’" + +msgid "buddy_enable_info" +msgstr "Se estiver ativado, os utilizadores podem entrar em contactar uns com os outros iniciando pedidos de contacto. Além disso, existe uma definição de utilizadores pessoal para autorizar ou impedir que possa ser contactado." + +msgid "buddy_handle_contact_request" +msgstr "Pedido de contacto" + +#, fuzzy +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +msgid "buddy_notification_contact_request" +msgstr "Pedido de contacto" + +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignorar pedido:" + +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignorar pedido" + +msgid "buddy_notification_contact_request_link" +msgstr "Aprovar pedido:" + +msgid "buddy_notification_contact_request_link_osd" +msgstr "Aprovar pedido" + +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]o utilizador \"[REQUESTING_USER]\" quer adicioná-lo à sua lista de amigos.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +msgid "buddy_notification_contact_request_short" +msgstr "O utilizador \"[REQUESTING_USER]\" quer adicioná-lo à sua lista de amigos.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +msgid "buddy_relation_requested" +msgstr "O pedido foi enviado ao utilizador." + +msgid "buddy_request_approved" +msgstr "Aprovou com sucesso o contacto." + +msgid "buddy_request_ignored" +msgstr "Ignorou o utilizador." + +msgid "buddy_tbl_filter_state" +msgstr "Estado" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +msgid "buddy_tbl_title_relations" +msgstr "Relações com outros utilizadores" + +msgid "buddy_use_osd" +msgstr "Popup pedidos de contacto" + +msgid "buddy_use_osd_info" +msgstr "Apresentar um popup para indicar que um utilizador quer adicioná-lo à sua lista de amigos." + +msgid "buddy_view_gallery" +msgstr "Galeria" + +msgid "buddy_view_table" +msgstr "Lista" diff --git a/components/ILIAS/Contact/lang/buddysystem_ro.po b/components/ILIAS/Contact/lang/buddysystem_ro.po new file mode 100644 index 000000000000..ef1e2005f0f0 --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_ro.po @@ -0,0 +1,237 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: buddysystem\n" + +#, fuzzy +msgid "buddy_allow_to_contact_me" +msgstr "Allow to contact me" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +#, fuzzy +msgid "buddy_allow_to_contact_me_info" +msgstr "If enabled, other users are able to send me request for getting into contact." + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Confirm Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Unlink" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignore" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Confirm" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_action_already_ignored" +msgstr "Already ignored user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_linked" +msgstr "Already accepted the contact request from user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_requested" +msgstr "Already requested user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_unlinked" +msgstr "The contact state for user '%s' is already unlinked." + +#, fuzzy +msgid "buddy_bs_action_not_possible" +msgstr "Action not possible" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Request Ignored" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Request" + +#, fuzzy +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Request Contact" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_linked" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_requested" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +#, fuzzy +msgid "buddy_bs_state_requested_p" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_a" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +#, fuzzy +msgid "buddy_enable" +msgstr "Activate ‘Contacts’" + +#, fuzzy +msgid "buddy_enable_info" +msgstr "If enabled, users are allowed to contact each other by initiating contact requests. Additionally, there is a personal user setting to allow or prevent being contacted." + +#, fuzzy +msgid "buddy_handle_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +#, fuzzy +msgid "buddy_notification_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link_osd" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]the user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_notification_contact_request_short" +msgstr "The user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_relation_requested" +msgstr "A request has been sent to the user." + +#, fuzzy +msgid "buddy_request_approved" +msgstr "You successfully approved the contact." + +#, fuzzy +msgid "buddy_request_ignored" +msgstr "You ignored the user." + +#, fuzzy +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +#, fuzzy +msgid "buddy_tbl_title_relations" +msgstr "Relations to Other Users" + +#, fuzzy +msgid "buddy_use_osd" +msgstr "Popup Contact Requests" + +#, fuzzy +msgid "buddy_use_osd_info" +msgstr "Display a popup to indicate a user wants to add you to his friends lists." + +#, fuzzy +msgid "buddy_view_gallery" +msgstr "Gallery" + +#, fuzzy +msgid "buddy_view_table" +msgstr "List" diff --git a/components/ILIAS/Contact/lang/buddysystem_ru.po b/components/ILIAS/Contact/lang/buddysystem_ru.po new file mode 100644 index 000000000000..047cbe252277 --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_ru.po @@ -0,0 +1,237 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: buddysystem\n" + +#, fuzzy +msgid "buddy_allow_to_contact_me" +msgstr "Allow to contact me" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +#, fuzzy +msgid "buddy_allow_to_contact_me_info" +msgstr "If enabled, other users are able to send me request for getting into contact." + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Confirm Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Unlink" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignore" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Confirm" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_action_already_ignored" +msgstr "Already ignored user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_linked" +msgstr "Already accepted the contact request from user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_requested" +msgstr "Already requested user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_unlinked" +msgstr "The contact state for user '%s' is already unlinked." + +#, fuzzy +msgid "buddy_bs_action_not_possible" +msgstr "Action not possible" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Request Ignored" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Request" + +#, fuzzy +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Request Contact" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_linked" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_requested" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +#, fuzzy +msgid "buddy_bs_state_requested_p" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_a" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +#, fuzzy +msgid "buddy_enable" +msgstr "Activate ‘Contacts’" + +#, fuzzy +msgid "buddy_enable_info" +msgstr "If enabled, users are allowed to contact each other by initiating contact requests. Additionally, there is a personal user setting to allow or prevent being contacted." + +#, fuzzy +msgid "buddy_handle_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +#, fuzzy +msgid "buddy_notification_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link_osd" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]the user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_notification_contact_request_short" +msgstr "The user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_relation_requested" +msgstr "A request has been sent to the user." + +#, fuzzy +msgid "buddy_request_approved" +msgstr "You successfully approved the contact." + +#, fuzzy +msgid "buddy_request_ignored" +msgstr "You ignored the user." + +#, fuzzy +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +#, fuzzy +msgid "buddy_tbl_title_relations" +msgstr "Relations to Other Users" + +#, fuzzy +msgid "buddy_use_osd" +msgstr "Popup Contact Requests" + +#, fuzzy +msgid "buddy_use_osd_info" +msgstr "Display a popup to indicate a user wants to add you to his friends lists." + +#, fuzzy +msgid "buddy_view_gallery" +msgstr "Gallery" + +#, fuzzy +msgid "buddy_view_table" +msgstr "List" diff --git a/components/ILIAS/Contact/lang/buddysystem_sk.po b/components/ILIAS/Contact/lang/buddysystem_sk.po new file mode 100644 index 000000000000..0d7d91394c08 --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_sk.po @@ -0,0 +1,237 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: buddysystem\n" + +#, fuzzy +msgid "buddy_allow_to_contact_me" +msgstr "Allow to contact me" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +#, fuzzy +msgid "buddy_allow_to_contact_me_info" +msgstr "If enabled, other users are able to send me request for getting into contact." + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Confirm Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Unlink" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignore" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Confirm" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_action_already_ignored" +msgstr "Already ignored user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_linked" +msgstr "Already accepted the contact request from user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_requested" +msgstr "Already requested user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_unlinked" +msgstr "The contact state for user '%s' is already unlinked." + +#, fuzzy +msgid "buddy_bs_action_not_possible" +msgstr "Action not possible" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Request Ignored" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Request" + +#, fuzzy +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Request Contact" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_linked" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_requested" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +#, fuzzy +msgid "buddy_bs_state_requested_p" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_a" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +#, fuzzy +msgid "buddy_enable" +msgstr "Activate ‘Contacts’" + +#, fuzzy +msgid "buddy_enable_info" +msgstr "If enabled, users are allowed to contact each other by initiating contact requests. Additionally, there is a personal user setting to allow or prevent being contacted." + +#, fuzzy +msgid "buddy_handle_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +#, fuzzy +msgid "buddy_notification_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link_osd" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]the user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_notification_contact_request_short" +msgstr "The user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_relation_requested" +msgstr "A request has been sent to the user." + +#, fuzzy +msgid "buddy_request_approved" +msgstr "You successfully approved the contact." + +#, fuzzy +msgid "buddy_request_ignored" +msgstr "You ignored the user." + +#, fuzzy +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +#, fuzzy +msgid "buddy_tbl_title_relations" +msgstr "Relations to Other Users" + +#, fuzzy +msgid "buddy_use_osd" +msgstr "Popup Contact Requests" + +#, fuzzy +msgid "buddy_use_osd_info" +msgstr "Display a popup to indicate a user wants to add you to his friends lists." + +#, fuzzy +msgid "buddy_view_gallery" +msgstr "Gallery" + +#, fuzzy +msgid "buddy_view_table" +msgstr "List" diff --git a/components/ILIAS/Contact/lang/buddysystem_sl.po b/components/ILIAS/Contact/lang/buddysystem_sl.po new file mode 100644 index 000000000000..a368404f10cd --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_sl.po @@ -0,0 +1,185 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: buddysystem\n" + +msgid "buddy_allow_to_contact_me" +msgstr "Dovoli zahteve za stik" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +msgid "buddy_allow_to_contact_me_info" +msgstr "Če je aktivirano, mi lahko drugi uporabniki pošljejo zahtevo za v stik." + +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Potrdi zahtevo" + +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Prekliči zahtevo" + +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Prekini stik" + +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Prezri stik" + +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Potrdi stik" + +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Prekliči zahtevo" + +msgid "buddy_bs_action_already_ignored" +msgstr "Dejanje ni mogoče, ker je bila zahteva za stik uporabnika '%s' že prezrta." + +msgid "buddy_bs_action_already_linked" +msgstr "Dejanje ni mogoče, ker je bila zahteva za stik za uporabnika '%s' že potrjena." + +msgid "buddy_bs_action_already_requested" +msgstr "Dejanje ni mogoče, ker je bila zahteva za stik že poslana uporabniku '%s'." + +msgid "buddy_bs_action_already_unlinked" +msgstr "Dejanje ni mogoče. Vsi stiki z uporabnikom '%s' so že bili prekinjeni." + +msgid "buddy_bs_action_not_possible" +msgstr "Dejanje ni mogoče" + +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Stik je zahtevan" + +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Zahteva je prezrta" + +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Povezano" + +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Povezano" + +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Stik je zahtevan" + +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Zahteva za stik" + +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Zahtevaj stik" + +msgid "buddy_bs_state_ignored_request_a" +msgstr "Zahtevano" + +msgid "buddy_bs_state_ignored_request_p" +msgstr "Prezrto" + +msgid "buddy_bs_state_ignoredrequest" +msgstr "Prezrto" + +msgid "buddy_bs_state_linked" +msgstr "Povezano" + +msgid "buddy_bs_state_linked_a" +msgstr "Povezano" + +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +msgid "buddy_bs_state_requested" +msgstr "Zahtevano" + +msgid "buddy_bs_state_requested_a" +msgstr "Zahtevano" + +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +msgid "buddy_bs_state_requested_p" +msgstr "Zahtevano" + +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +msgid "buddy_bs_state_unlinked_a" +msgstr "Ni povezano" + +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +msgid "buddy_enable" +msgstr "Aktiviraj „Stiki uporabnika“" + +msgid "buddy_enable_info" +msgstr "Če je aktivirano, se lahko uporabniki povežejo tako, da preko sistema pošljejo zahtevo za stik. Dodatna osebna nastavitev vsakemu uporabniku omogoča, da dovoli ali prepreči vzpostavljanje stikov." + +msgid "buddy_handle_contact_request" +msgstr "Zahteva za stik" + +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profil ni objavljen" + +msgid "buddy_notification_contact_request" +msgstr "Zahteva za stik" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Prezri zahtevo" + +#, fuzzy +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +msgid "buddy_notification_contact_request_link_osd" +msgstr "Potrdi zahtevo" + +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]\"[REQUESTING_USER]\" želi stopiti v stik z vami.[BR][BR]Povezava do osebnega profila: [PERSONAL_PROFILE_LINK][BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +msgid "buddy_notification_contact_request_short" +msgstr "Uporabnik \"[REQUESTING_USER]\" želi stopiti v stik z vami.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +msgid "buddy_relation_requested" +msgstr "Uporabniku je bila poslana zahteva za stik." + +msgid "buddy_request_approved" +msgstr "Stik je bil uspešno vzpostavljen." + +msgid "buddy_request_ignored" +msgstr "Uporabnika ste prezrli." + +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +msgid "buddy_tbl_title_relations" +msgstr "Razmerja do drugih uporabnikov" + +msgid "buddy_use_osd" +msgstr "Pojavno okno zahteve za stik" + +msgid "buddy_use_osd_info" +msgstr "Pokaže pojavno okno, če želi uporabnik stopiti v stik z mano." + +msgid "buddy_view_gallery" +msgstr "Galerija" + +msgid "buddy_view_table" +msgstr "Seznam" diff --git a/components/ILIAS/Contact/lang/buddysystem_sq.po b/components/ILIAS/Contact/lang/buddysystem_sq.po new file mode 100644 index 000000000000..222fcc9dba27 --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_sq.po @@ -0,0 +1,237 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: buddysystem\n" + +#, fuzzy +msgid "buddy_allow_to_contact_me" +msgstr "Allow to contact me" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +#, fuzzy +msgid "buddy_allow_to_contact_me_info" +msgstr "If enabled, other users are able to send me request for getting into contact." + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Confirm Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Unlink" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignore" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Confirm" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_action_already_ignored" +msgstr "Already ignored user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_linked" +msgstr "Already accepted the contact request from user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_requested" +msgstr "Already requested user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_unlinked" +msgstr "The contact state for user '%s' is already unlinked." + +#, fuzzy +msgid "buddy_bs_action_not_possible" +msgstr "Action not possible" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Request Ignored" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Request" + +#, fuzzy +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Request Contact" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_linked" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_requested" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +#, fuzzy +msgid "buddy_bs_state_requested_p" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_a" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +#, fuzzy +msgid "buddy_enable" +msgstr "Activate ‘Contacts’" + +#, fuzzy +msgid "buddy_enable_info" +msgstr "If enabled, users are allowed to contact each other by initiating contact requests. Additionally, there is a personal user setting to allow or prevent being contacted." + +#, fuzzy +msgid "buddy_handle_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +#, fuzzy +msgid "buddy_notification_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link_osd" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]the user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_notification_contact_request_short" +msgstr "The user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_relation_requested" +msgstr "A request has been sent to the user." + +#, fuzzy +msgid "buddy_request_approved" +msgstr "You successfully approved the contact." + +#, fuzzy +msgid "buddy_request_ignored" +msgstr "You ignored the user." + +#, fuzzy +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +#, fuzzy +msgid "buddy_tbl_title_relations" +msgstr "Relations to Other Users" + +#, fuzzy +msgid "buddy_use_osd" +msgstr "Popup Contact Requests" + +#, fuzzy +msgid "buddy_use_osd_info" +msgstr "Display a popup to indicate a user wants to add you to his friends lists." + +#, fuzzy +msgid "buddy_view_gallery" +msgstr "Gallery" + +#, fuzzy +msgid "buddy_view_table" +msgstr "List" diff --git a/components/ILIAS/Contact/lang/buddysystem_sr.po b/components/ILIAS/Contact/lang/buddysystem_sr.po new file mode 100644 index 000000000000..dffd08ae7f91 --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_sr.po @@ -0,0 +1,237 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: buddysystem\n" + +#, fuzzy +msgid "buddy_allow_to_contact_me" +msgstr "Allow to contact me" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +#, fuzzy +msgid "buddy_allow_to_contact_me_info" +msgstr "If enabled, other users are able to send me request for getting into contact." + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Confirm Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Unlink" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignore" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Confirm" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_action_already_ignored" +msgstr "Already ignored user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_linked" +msgstr "Already accepted the contact request from user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_requested" +msgstr "Already requested user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_unlinked" +msgstr "The contact state for user '%s' is already unlinked." + +#, fuzzy +msgid "buddy_bs_action_not_possible" +msgstr "Action not possible" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Request Ignored" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Request" + +#, fuzzy +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Request Contact" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_linked" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_requested" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +#, fuzzy +msgid "buddy_bs_state_requested_p" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_a" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +#, fuzzy +msgid "buddy_enable" +msgstr "Activate ‘Contacts’" + +#, fuzzy +msgid "buddy_enable_info" +msgstr "If enabled, users are allowed to contact each other by initiating contact requests. Additionally, there is a personal user setting to allow or prevent being contacted." + +#, fuzzy +msgid "buddy_handle_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +#, fuzzy +msgid "buddy_notification_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link_osd" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]the user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_notification_contact_request_short" +msgstr "The user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_relation_requested" +msgstr "A request has been sent to the user." + +#, fuzzy +msgid "buddy_request_approved" +msgstr "You successfully approved the contact." + +#, fuzzy +msgid "buddy_request_ignored" +msgstr "You ignored the user." + +#, fuzzy +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +#, fuzzy +msgid "buddy_tbl_title_relations" +msgstr "Relations to Other Users" + +#, fuzzy +msgid "buddy_use_osd" +msgstr "Popup Contact Requests" + +#, fuzzy +msgid "buddy_use_osd_info" +msgstr "Display a popup to indicate a user wants to add you to his friends lists." + +#, fuzzy +msgid "buddy_view_gallery" +msgstr "Gallery" + +#, fuzzy +msgid "buddy_view_table" +msgstr "List" diff --git a/components/ILIAS/Contact/lang/buddysystem_sv.po b/components/ILIAS/Contact/lang/buddysystem_sv.po new file mode 100644 index 000000000000..108c7a829a10 --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_sv.po @@ -0,0 +1,182 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: buddysystem\n" + +msgid "buddy_allow_to_contact_me" +msgstr "Tillåt kontaktförfrågningar" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +msgid "buddy_allow_to_contact_me_info" +msgstr "Om aktiverat kan andra användare skicka kontaktförfrågningar till mig." + +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Bekräfta begäran" + +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Begäran om återkallelse" + +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Avbryt kontakt" + +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignorera kontakt" + +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Bekräfta kontakt" + +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Begäran om återkallelse" + +msgid "buddy_bs_action_already_ignored" +msgstr "Åtgärden är inte möjlig eftersom kontaktförfrågan från användaren '%s' redan har ignorerats." + +msgid "buddy_bs_action_already_linked" +msgstr "Åtgärden är inte möjlig eftersom kontaktförfrågan för användaren '%s' redan har bekräftats." + +msgid "buddy_bs_action_already_requested" +msgstr "Åtgärden är inte möjlig eftersom användaren '%s' redan har begärts." + +msgid "buddy_bs_action_already_unlinked" +msgstr "Åtgärden är inte möjlig. All kontakt med användaren '%s' har redan lösts." + +msgid "buddy_bs_action_not_possible" +msgstr "Aktion ej möjlig" + +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Begärd kontakt" + +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Förfrågan ignorerad" + +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Nätverk" + +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Nätverk" + +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Begärd kontakt" + +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Kontaktförfrågan" + +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Förfrågan om kontakt" + +msgid "buddy_bs_state_ignored_request_a" +msgstr "Frågade" + +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignorerad" + +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignorerad" + +msgid "buddy_bs_state_linked" +msgstr "Nätverk" + +msgid "buddy_bs_state_linked_a" +msgstr "Nätverk" + +msgid "buddy_bs_state_linked_p" +msgstr "Nätverk" + +msgid "buddy_bs_state_requested" +msgstr "Frågade" + +msgid "buddy_bs_state_requested_a" +msgstr "Frågade" + +msgid "buddy_bs_state_requested_filter_a" +msgstr "Väntar på reaktion" + +msgid "buddy_bs_state_requested_filter_p" +msgstr "Åtgärd krävs" + +msgid "buddy_bs_state_requested_p" +msgstr "Frågade" + +msgid "buddy_bs_state_unlinked" +msgstr "Inte nätverk" + +msgid "buddy_bs_state_unlinked_a" +msgstr "Inte nätverk" + +msgid "buddy_bs_state_unlinked_p" +msgstr "Inte nätverk" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +msgid "buddy_enable" +msgstr "Aktivera \"Användarkontakter" + +msgid "buddy_enable_info" +msgstr "Om den är aktiverad kan användare i systemet kontakta varandra via kontaktförfrågningar. En ytterligare personlig inställning gör det möjligt för varje användare att tillåta eller förhindra kontaktförfrågningar." + +msgid "buddy_handle_contact_request" +msgstr "Kontaktförfrågan" + +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profil ej publicerad" + +msgid "buddy_notification_contact_request" +msgstr "Kontaktförfrågan" + +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignorera begäran" + +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignorera begäran" + +msgid "buddy_notification_contact_request_link" +msgstr "Bekräfta begäran" + +msgid "buddy_notification_contact_request_link_osd" +msgstr "Bekräfta begäran" + +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR]\"[REQUESTING_USER]\" vill gärna komma i kontakt med dig.[BR][BR]Länk till personlig profil" + +msgid "buddy_notification_contact_request_short" +msgstr "Användaren \"[REQUESTING_USER]\" vill gärna kontakta dig." + +msgid "buddy_relation_requested" +msgstr "En kontaktförfrågan har skickats till användaren." + +msgid "buddy_request_approved" +msgstr "Kontakten har framgångsrikt etablerats." + +msgid "buddy_request_ignored" +msgstr "Du har ignorerat användaren." + +msgid "buddy_tbl_filter_state" +msgstr "Status" + +msgid "buddy_tbl_state_actions_col_label" +msgstr "Status / Åtgärd" + +msgid "buddy_tbl_title_relations" +msgstr "Relationer med andra användare" + +msgid "buddy_use_osd" +msgstr "Popup kontaktförfrågningar" + +msgid "buddy_use_osd_info" +msgstr "Visar en popup när en användare vill kontakta mig." + +msgid "buddy_view_gallery" +msgstr "Galleri" + +msgid "buddy_view_table" +msgstr "Lista" diff --git a/components/ILIAS/Contact/lang/buddysystem_tr.po b/components/ILIAS/Contact/lang/buddysystem_tr.po new file mode 100644 index 000000000000..d35e7835f9de --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_tr.po @@ -0,0 +1,237 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: buddysystem\n" + +#, fuzzy +msgid "buddy_allow_to_contact_me" +msgstr "Allow to contact me" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +#, fuzzy +msgid "buddy_allow_to_contact_me_info" +msgstr "If enabled, other users are able to send me request for getting into contact." + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Confirm Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Unlink" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignore" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Confirm" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_action_already_ignored" +msgstr "Already ignored user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_linked" +msgstr "Already accepted the contact request from user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_requested" +msgstr "Already requested user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_unlinked" +msgstr "The contact state for user '%s' is already unlinked." + +#, fuzzy +msgid "buddy_bs_action_not_possible" +msgstr "Action not possible" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Request Ignored" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Request" + +#, fuzzy +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Request Contact" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_linked" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_requested" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +#, fuzzy +msgid "buddy_bs_state_requested_p" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_a" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +#, fuzzy +msgid "buddy_enable" +msgstr "Activate ‘Contacts’" + +#, fuzzy +msgid "buddy_enable_info" +msgstr "If enabled, users are allowed to contact each other by initiating contact requests. Additionally, there is a personal user setting to allow or prevent being contacted." + +#, fuzzy +msgid "buddy_handle_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +#, fuzzy +msgid "buddy_notification_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link_osd" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]the user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_notification_contact_request_short" +msgstr "The user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_relation_requested" +msgstr "A request has been sent to the user." + +#, fuzzy +msgid "buddy_request_approved" +msgstr "You successfully approved the contact." + +#, fuzzy +msgid "buddy_request_ignored" +msgstr "You ignored the user." + +#, fuzzy +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +#, fuzzy +msgid "buddy_tbl_title_relations" +msgstr "Relations to Other Users" + +#, fuzzy +msgid "buddy_use_osd" +msgstr "Popup Contact Requests" + +#, fuzzy +msgid "buddy_use_osd_info" +msgstr "Display a popup to indicate a user wants to add you to his friends lists." + +#, fuzzy +msgid "buddy_view_gallery" +msgstr "Gallery" + +#, fuzzy +msgid "buddy_view_table" +msgstr "List" diff --git a/components/ILIAS/Contact/lang/buddysystem_uk.po b/components/ILIAS/Contact/lang/buddysystem_uk.po new file mode 100644 index 000000000000..57966e69643e --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_uk.po @@ -0,0 +1,237 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: buddysystem\n" + +#, fuzzy +msgid "buddy_allow_to_contact_me" +msgstr "Allow to contact me" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +#, fuzzy +msgid "buddy_allow_to_contact_me_info" +msgstr "If enabled, other users are able to send me request for getting into contact." + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Confirm Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Unlink" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignore" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Confirm" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_action_already_ignored" +msgstr "Already ignored user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_linked" +msgstr "Already accepted the contact request from user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_requested" +msgstr "Already requested user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_unlinked" +msgstr "The contact state for user '%s' is already unlinked." + +#, fuzzy +msgid "buddy_bs_action_not_possible" +msgstr "Action not possible" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Request Ignored" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Request" + +#, fuzzy +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Request Contact" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_linked" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_requested" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +#, fuzzy +msgid "buddy_bs_state_requested_p" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_a" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +#, fuzzy +msgid "buddy_enable" +msgstr "Activate ‘Contacts’" + +#, fuzzy +msgid "buddy_enable_info" +msgstr "If enabled, users are allowed to contact each other by initiating contact requests. Additionally, there is a personal user setting to allow or prevent being contacted." + +#, fuzzy +msgid "buddy_handle_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +#, fuzzy +msgid "buddy_notification_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link_osd" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]the user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_notification_contact_request_short" +msgstr "The user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_relation_requested" +msgstr "A request has been sent to the user." + +#, fuzzy +msgid "buddy_request_approved" +msgstr "You successfully approved the contact." + +#, fuzzy +msgid "buddy_request_ignored" +msgstr "You ignored the user." + +#, fuzzy +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +#, fuzzy +msgid "buddy_tbl_title_relations" +msgstr "Relations to Other Users" + +#, fuzzy +msgid "buddy_use_osd" +msgstr "Popup Contact Requests" + +#, fuzzy +msgid "buddy_use_osd_info" +msgstr "Display a popup to indicate a user wants to add you to his friends lists." + +#, fuzzy +msgid "buddy_view_gallery" +msgstr "Gallery" + +#, fuzzy +msgid "buddy_view_table" +msgstr "List" diff --git a/components/ILIAS/Contact/lang/buddysystem_vi.po b/components/ILIAS/Contact/lang/buddysystem_vi.po new file mode 100644 index 000000000000..7494f2e901f1 --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_vi.po @@ -0,0 +1,237 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: buddysystem\n" + +#, fuzzy +msgid "buddy_allow_to_contact_me" +msgstr "Allow to contact me" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +#, fuzzy +msgid "buddy_allow_to_contact_me_info" +msgstr "If enabled, other users are able to send me request for getting into contact." + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Confirm Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Unlink" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignore" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Confirm" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_action_already_ignored" +msgstr "Already ignored user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_linked" +msgstr "Already accepted the contact request from user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_requested" +msgstr "Already requested user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_unlinked" +msgstr "The contact state for user '%s' is already unlinked." + +#, fuzzy +msgid "buddy_bs_action_not_possible" +msgstr "Action not possible" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Request Ignored" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Request" + +#, fuzzy +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Request Contact" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_linked" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_requested" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +#, fuzzy +msgid "buddy_bs_state_requested_p" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_a" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +#, fuzzy +msgid "buddy_enable" +msgstr "Activate ‘Contacts’" + +#, fuzzy +msgid "buddy_enable_info" +msgstr "If enabled, users are allowed to contact each other by initiating contact requests. Additionally, there is a personal user setting to allow or prevent being contacted." + +#, fuzzy +msgid "buddy_handle_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +#, fuzzy +msgid "buddy_notification_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link_osd" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]the user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_notification_contact_request_short" +msgstr "The user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_relation_requested" +msgstr "A request has been sent to the user." + +#, fuzzy +msgid "buddy_request_approved" +msgstr "You successfully approved the contact." + +#, fuzzy +msgid "buddy_request_ignored" +msgstr "You ignored the user." + +#, fuzzy +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +#, fuzzy +msgid "buddy_tbl_title_relations" +msgstr "Relations to Other Users" + +#, fuzzy +msgid "buddy_use_osd" +msgstr "Popup Contact Requests" + +#, fuzzy +msgid "buddy_use_osd_info" +msgstr "Display a popup to indicate a user wants to add you to his friends lists." + +#, fuzzy +msgid "buddy_view_gallery" +msgstr "Gallery" + +#, fuzzy +msgid "buddy_view_table" +msgstr "List" diff --git a/components/ILIAS/Contact/lang/buddysystem_zh.po b/components/ILIAS/Contact/lang/buddysystem_zh.po new file mode 100644 index 000000000000..4b093ba3f7a7 --- /dev/null +++ b/components/ILIAS/Contact/lang/buddysystem_zh.po @@ -0,0 +1,237 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: buddysystem\n" + +#, fuzzy +msgid "buddy_allow_to_contact_me" +msgstr "Allow to contact me" + +#, fuzzy +msgid "buddy_allow_to_contact_me_default_info" +msgstr "Defines if users can send each other requests for getting into contact by default." + +#, fuzzy +msgid "buddy_allow_to_contact_me_info" +msgstr "If enabled, other users are able to send me request for getting into contact." + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_linked" +msgstr "Confirm Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_ignored_request_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_linked_to_unlinked" +msgstr "Unlink" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_ignored_request" +msgstr "Ignore" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_linked" +msgstr "Confirm" + +#, fuzzy +msgid "buddy_bs_act_btn_txt_requested_to_unlinked" +msgstr "Cancel Request" + +#, fuzzy +msgid "buddy_bs_action_already_ignored" +msgstr "Already ignored user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_linked" +msgstr "Already accepted the contact request from user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_requested" +msgstr "Already requested user '%s'." + +#, fuzzy +msgid "buddy_bs_action_already_unlinked" +msgstr "The contact state for user '%s' is already unlinked." + +#, fuzzy +msgid "buddy_bs_action_not_possible" +msgstr "Action not possible" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_ignored_request_p" +msgstr "Request Ignored" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_a" +msgstr "Requested Contact" + +#, fuzzy +msgid "buddy_bs_btn_txt_requested_p" +msgstr "Request" + +#, fuzzy +msgid "buddy_bs_btn_txt_unlinked_a" +msgstr "Request Contact" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_ignored_request_p" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_ignoredrequest" +msgstr "Ignored" + +#, fuzzy +msgid "buddy_bs_state_linked" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_a" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_linked_p" +msgstr "Linked" + +#, fuzzy +msgid "buddy_bs_state_requested" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_a" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_a" +msgstr "Waiting for Reaction" + +#, fuzzy +msgid "buddy_bs_state_requested_filter_p" +msgstr "Action Required" + +#, fuzzy +msgid "buddy_bs_state_requested_p" +msgstr "Requested" + +#, fuzzy +msgid "buddy_bs_state_unlinked" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_a" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_bs_state_unlinked_p" +msgstr "Unlinked" + +#, fuzzy +msgid "buddy_confirm_unlink" +msgstr "Do you really want to disconnect from this contact?" + +#, fuzzy +msgid "buddy_enable" +msgstr "Activate ‘Contacts’" + +#, fuzzy +msgid "buddy_enable_info" +msgstr "If enabled, users are allowed to contact each other by initiating contact requests. Additionally, there is a personal user setting to allow or prevent being contacted." + +#, fuzzy +msgid "buddy_handle_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_noti_cr_profile_not_published" +msgstr "Profile not published" + +#, fuzzy +msgid "buddy_notification_contact_request" +msgstr "Contact Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_ignore_osd" +msgstr "Ignore Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_link_osd" +msgstr "Approve Request" + +#, fuzzy +msgid "buddy_notification_contact_request_long" +msgstr "[SALUTATION][BR][BR]the user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_notification_contact_request_short" +msgstr "The user \"[REQUESTING_USER]\" wants to add you to his friends list.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST]" + +#, fuzzy +msgid "buddy_relation_requested" +msgstr "A request has been sent to the user." + +#, fuzzy +msgid "buddy_request_approved" +msgstr "You successfully approved the contact." + +#, fuzzy +msgid "buddy_request_ignored" +msgstr "You ignored the user." + +#, fuzzy +msgid "buddy_tbl_filter_state" +msgstr "Status" + +#, fuzzy +msgid "buddy_tbl_state_actions_col_label" +msgstr "State / Action" + +#, fuzzy +msgid "buddy_tbl_title_relations" +msgstr "Relations to Other Users" + +#, fuzzy +msgid "buddy_use_osd" +msgstr "Popup Contact Requests" + +#, fuzzy +msgid "buddy_use_osd_info" +msgstr "Display a popup to indicate a user wants to add you to his friends lists." + +#, fuzzy +msgid "buddy_view_gallery" +msgstr "Gallery" + +#, fuzzy +msgid "buddy_view_table" +msgstr "List" diff --git a/components/ILIAS/Contact/lang/contact.pot b/components/ILIAS/Contact/lang/contact.pot new file mode 100644 index 000000000000..0c89bce1e97a --- /dev/null +++ b/components/ILIAS/Contact/lang/contact.pot @@ -0,0 +1,18 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: contact\n" + +msgid "contact_awrn_ap_contacts" +msgstr "" + +msgid "contact_awrn_ap_contacts_info" +msgstr "" + +msgid "contact_awrn_req_contacts" +msgstr "" + +msgid "contact_awrn_req_contacts_info" +msgstr "" diff --git a/components/ILIAS/Contact/lang/contact_ar.po b/components/ILIAS/Contact/lang/contact_ar.po new file mode 100644 index 000000000000..95d55fb7c33d --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_ar.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: contact\n" + +#, fuzzy +msgid "contact_awrn_ap_contacts" +msgstr "Approved Contacts" + +#, fuzzy +msgid "contact_awrn_ap_contacts_info" +msgstr "All contacts approved by the user are listed." + +#, fuzzy +msgid "contact_awrn_req_contacts" +msgstr "Contact Requests" + +#, fuzzy +msgid "contact_awrn_req_contacts_info" +msgstr "All contact requests are listed." diff --git a/components/ILIAS/Contact/lang/contact_bg.po b/components/ILIAS/Contact/lang/contact_bg.po new file mode 100644 index 000000000000..3d02005fe365 --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_bg.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: contact\n" + +#, fuzzy +msgid "contact_awrn_ap_contacts" +msgstr "Approved Contacts" + +#, fuzzy +msgid "contact_awrn_ap_contacts_info" +msgstr "All contacts approved by the user are listed." + +#, fuzzy +msgid "contact_awrn_req_contacts" +msgstr "Contact Requests" + +#, fuzzy +msgid "contact_awrn_req_contacts_info" +msgstr "All contact requests are listed." diff --git a/components/ILIAS/Contact/lang/contact_cs.po b/components/ILIAS/Contact/lang/contact_cs.po new file mode 100644 index 000000000000..9ae18188349b --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_cs.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: contact\n" + +msgid "contact_awrn_ap_contacts" +msgstr "Schválené kontakty" + +msgid "contact_awrn_ap_contacts_info" +msgstr "Jsou uvedeny všechny kontakty schválené uživatelem." + +msgid "contact_awrn_req_contacts" +msgstr "Žádosti o kontakt" + +msgid "contact_awrn_req_contacts_info" +msgstr "Jsou uvedeny všechny žádosti o kontakt." diff --git a/components/ILIAS/Contact/lang/contact_da.po b/components/ILIAS/Contact/lang/contact_da.po new file mode 100644 index 000000000000..d3273087a17c --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_da.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: contact\n" + +#, fuzzy +msgid "contact_awrn_ap_contacts" +msgstr "Approved Contacts" + +#, fuzzy +msgid "contact_awrn_ap_contacts_info" +msgstr "All contacts approved by the user are listed." + +#, fuzzy +msgid "contact_awrn_req_contacts" +msgstr "Contact Requests" + +#, fuzzy +msgid "contact_awrn_req_contacts_info" +msgstr "All contact requests are listed." diff --git a/components/ILIAS/Contact/lang/contact_de.po b/components/ILIAS/Contact/lang/contact_de.po new file mode 100644 index 000000000000..96c5c4e345d9 --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_de.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: contact\n" + +msgid "contact_awrn_ap_contacts" +msgstr "Bestätigte Kontakte" + +msgid "contact_awrn_ap_contacts_info" +msgstr "Alle bestätigten Kontakte eines Benutzers werden aufgelistet." + +msgid "contact_awrn_req_contacts" +msgstr "Kontaktanfragen" + +msgid "contact_awrn_req_contacts_info" +msgstr "Alle Kontaktanfragen werden aufgelistet." diff --git a/components/ILIAS/Contact/lang/contact_el.po b/components/ILIAS/Contact/lang/contact_el.po new file mode 100644 index 000000000000..064c9bc914f3 --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_el.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: contact\n" + +#, fuzzy +msgid "contact_awrn_ap_contacts" +msgstr "Approved Contacts" + +#, fuzzy +msgid "contact_awrn_ap_contacts_info" +msgstr "All contacts approved by the user are listed." + +#, fuzzy +msgid "contact_awrn_req_contacts" +msgstr "Contact Requests" + +#, fuzzy +msgid "contact_awrn_req_contacts_info" +msgstr "All contact requests are listed." diff --git a/components/ILIAS/Contact/lang/contact_en.po b/components/ILIAS/Contact/lang/contact_en.po new file mode 100644 index 000000000000..8d79e4d601f0 --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_en.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: contact\n" + +msgid "contact_awrn_ap_contacts" +msgstr "Approved Contacts" + +msgid "contact_awrn_ap_contacts_info" +msgstr "All contacts approved by the user are listed." + +msgid "contact_awrn_req_contacts" +msgstr "Contact Requests" + +msgid "contact_awrn_req_contacts_info" +msgstr "All contact requests are listed." diff --git a/components/ILIAS/Contact/lang/contact_es.po b/components/ILIAS/Contact/lang/contact_es.po new file mode 100644 index 000000000000..d843b3353188 --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_es.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: contact\n" + +msgid "contact_awrn_ap_contacts" +msgstr "Contactos aprobados" + +msgid "contact_awrn_ap_contacts_info" +msgstr "Se enumeran todos los contactos aprobados por el usuario." + +msgid "contact_awrn_req_contacts" +msgstr "Solicitudes de contacto" + +msgid "contact_awrn_req_contacts_info" +msgstr "Se enumeran todas las solicitudes de contacto." diff --git a/components/ILIAS/Contact/lang/contact_et.po b/components/ILIAS/Contact/lang/contact_et.po new file mode 100644 index 000000000000..d060d21eb038 --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_et.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: contact\n" + +#, fuzzy +msgid "contact_awrn_ap_contacts" +msgstr "Approved Contacts" + +#, fuzzy +msgid "contact_awrn_ap_contacts_info" +msgstr "All contacts approved by the user are listed." + +#, fuzzy +msgid "contact_awrn_req_contacts" +msgstr "Contact Requests" + +#, fuzzy +msgid "contact_awrn_req_contacts_info" +msgstr "All contact requests are listed." diff --git a/components/ILIAS/Contact/lang/contact_fa.po b/components/ILIAS/Contact/lang/contact_fa.po new file mode 100644 index 000000000000..605f38de7b3b --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_fa.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: contact\n" + +#, fuzzy +msgid "contact_awrn_ap_contacts" +msgstr "Approved Contacts" + +#, fuzzy +msgid "contact_awrn_ap_contacts_info" +msgstr "All contacts approved by the user are listed." + +#, fuzzy +msgid "contact_awrn_req_contacts" +msgstr "Contact Requests" + +#, fuzzy +msgid "contact_awrn_req_contacts_info" +msgstr "All contact requests are listed." diff --git a/components/ILIAS/Contact/lang/contact_fr.po b/components/ILIAS/Contact/lang/contact_fr.po new file mode 100644 index 000000000000..c7cfa8176e5d --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_fr.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: contact\n" + +msgid "contact_awrn_ap_contacts" +msgstr "Contacts approuvés" + +msgid "contact_awrn_ap_contacts_info" +msgstr "Tous les contacts approuvés par l'utilisateur sont répertoriés." + +msgid "contact_awrn_req_contacts" +msgstr "Demandes de contacts" + +msgid "contact_awrn_req_contacts_info" +msgstr "Toutes les demandes de contact sont répertoriées." diff --git a/components/ILIAS/Contact/lang/contact_hr.po b/components/ILIAS/Contact/lang/contact_hr.po new file mode 100644 index 000000000000..376eb4bd2984 --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_hr.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: contact\n" + +msgid "contact_awrn_ap_contacts" +msgstr "Approved Contacts" + +msgid "contact_awrn_ap_contacts_info" +msgstr "All contacts approved by the user are listed." + +msgid "contact_awrn_req_contacts" +msgstr "Contact Requests" + +msgid "contact_awrn_req_contacts_info" +msgstr "All contact requests are listed." diff --git a/components/ILIAS/Contact/lang/contact_hu.po b/components/ILIAS/Contact/lang/contact_hu.po new file mode 100644 index 000000000000..ba9a708921ee --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_hu.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: contact\n" + +msgid "contact_awrn_ap_contacts" +msgstr "Elfogadott jelölések" + +msgid "contact_awrn_ap_contacts_info" +msgstr "A felhasználó összes elfogadott jelölését felsoroljuk." + +msgid "contact_awrn_req_contacts" +msgstr "‘Ismerősnek jelölés’ kérések" + +msgid "contact_awrn_req_contacts_info" +msgstr "Az összes felhasználót felsoroljuk, aki ‘Ismerősnek jelölés’ kérést küldött." diff --git a/components/ILIAS/Contact/lang/contact_it.po b/components/ILIAS/Contact/lang/contact_it.po new file mode 100644 index 000000000000..f9296a85332e --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_it.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: contact\n" + +msgid "contact_awrn_ap_contacts" +msgstr "Contatti confermati" + +msgid "contact_awrn_ap_contacts_info" +msgstr "Sono elencati tutti i contatti confermati dall’utente." + +msgid "contact_awrn_req_contacts" +msgstr "Richieste di contatto" + +msgid "contact_awrn_req_contacts_info" +msgstr "Sono indicate tutte le richieste di contatto." diff --git a/components/ILIAS/Contact/lang/contact_ja.po b/components/ILIAS/Contact/lang/contact_ja.po new file mode 100644 index 000000000000..2feda784f412 --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_ja.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: contact\n" + +msgid "contact_awrn_ap_contacts" +msgstr "コンタクトを承認しました" + +msgid "contact_awrn_ap_contacts_info" +msgstr "ユーザの承認した全てのコンタクトが表示されます。" + +msgid "contact_awrn_req_contacts" +msgstr "コンタクト要求" + +msgid "contact_awrn_req_contacts_info" +msgstr "全てのコンタクト要求が表示されます。" diff --git a/components/ILIAS/Contact/lang/contact_ka.po b/components/ILIAS/Contact/lang/contact_ka.po new file mode 100644 index 000000000000..ed1418d24671 --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_ka.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: contact\n" + +#, fuzzy +msgid "contact_awrn_ap_contacts" +msgstr "Approved Contacts" + +#, fuzzy +msgid "contact_awrn_ap_contacts_info" +msgstr "All contacts approved by the user are listed." + +#, fuzzy +msgid "contact_awrn_req_contacts" +msgstr "Contact Requests" + +#, fuzzy +msgid "contact_awrn_req_contacts_info" +msgstr "All contact requests are listed." diff --git a/components/ILIAS/Contact/lang/contact_lt.po b/components/ILIAS/Contact/lang/contact_lt.po new file mode 100644 index 000000000000..81eeb786dd42 --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_lt.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: contact\n" + +#, fuzzy +msgid "contact_awrn_ap_contacts" +msgstr "Approved Contacts" + +#, fuzzy +msgid "contact_awrn_ap_contacts_info" +msgstr "All contacts approved by the user are listed." + +#, fuzzy +msgid "contact_awrn_req_contacts" +msgstr "Contact Requests" + +#, fuzzy +msgid "contact_awrn_req_contacts_info" +msgstr "All contact requests are listed." diff --git a/components/ILIAS/Contact/lang/contact_nl.po b/components/ILIAS/Contact/lang/contact_nl.po new file mode 100644 index 000000000000..1b8a58291940 --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_nl.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: contact\n" + +#, fuzzy +msgid "contact_awrn_ap_contacts" +msgstr "Approved Contacts" + +#, fuzzy +msgid "contact_awrn_ap_contacts_info" +msgstr "All contacts approved by the user are listed." + +#, fuzzy +msgid "contact_awrn_req_contacts" +msgstr "Contact Requests" + +#, fuzzy +msgid "contact_awrn_req_contacts_info" +msgstr "All contact requests are listed." diff --git a/components/ILIAS/Contact/lang/contact_pl.po b/components/ILIAS/Contact/lang/contact_pl.po new file mode 100644 index 000000000000..df7469908683 --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_pl.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: contact\n" + +msgid "contact_awrn_ap_contacts" +msgstr "Zatwierdzone kontakty" + +msgid "contact_awrn_ap_contacts_info" +msgstr "Wszystkie zatwierdzone kontakty użytkownika zostaną ujęte w liście." + +msgid "contact_awrn_req_contacts" +msgstr "Zapytania dotyczące punktu kontaktowego" + +msgid "contact_awrn_req_contacts_info" +msgstr "Wszystkie zapytania dotyczące punktu kontaktowego zawarte są w liście." diff --git a/components/ILIAS/Contact/lang/contact_pt.po b/components/ILIAS/Contact/lang/contact_pt.po new file mode 100644 index 000000000000..3d7720f93db2 --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_pt.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: contact\n" + +msgid "contact_awrn_ap_contacts" +msgstr "Contactos aprovados" + +msgid "contact_awrn_ap_contacts_info" +msgstr "Todos os contactos aprovados pelo utilizador estão listados." + +msgid "contact_awrn_req_contacts" +msgstr "Pedidos de contactos" + +msgid "contact_awrn_req_contacts_info" +msgstr "Todos os pedidos de contactos estão listados." diff --git a/components/ILIAS/Contact/lang/contact_ro.po b/components/ILIAS/Contact/lang/contact_ro.po new file mode 100644 index 000000000000..68c058fff018 --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_ro.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: contact\n" + +#, fuzzy +msgid "contact_awrn_ap_contacts" +msgstr "Approved Contacts" + +#, fuzzy +msgid "contact_awrn_ap_contacts_info" +msgstr "All contacts approved by the user are listed." + +#, fuzzy +msgid "contact_awrn_req_contacts" +msgstr "Contact Requests" + +#, fuzzy +msgid "contact_awrn_req_contacts_info" +msgstr "All contact requests are listed." diff --git a/components/ILIAS/Contact/lang/contact_ru.po b/components/ILIAS/Contact/lang/contact_ru.po new file mode 100644 index 000000000000..c3c95a02e614 --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_ru.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: contact\n" + +#, fuzzy +msgid "contact_awrn_ap_contacts" +msgstr "Approved Contacts" + +#, fuzzy +msgid "contact_awrn_ap_contacts_info" +msgstr "All contacts approved by the user are listed." + +#, fuzzy +msgid "contact_awrn_req_contacts" +msgstr "Contact Requests" + +#, fuzzy +msgid "contact_awrn_req_contacts_info" +msgstr "All contact requests are listed." diff --git a/components/ILIAS/Contact/lang/contact_sk.po b/components/ILIAS/Contact/lang/contact_sk.po new file mode 100644 index 000000000000..6e6e2f9bcd07 --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_sk.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: contact\n" + +#, fuzzy +msgid "contact_awrn_ap_contacts" +msgstr "Approved Contacts" + +#, fuzzy +msgid "contact_awrn_ap_contacts_info" +msgstr "All contacts approved by the user are listed." + +#, fuzzy +msgid "contact_awrn_req_contacts" +msgstr "Contact Requests" + +#, fuzzy +msgid "contact_awrn_req_contacts_info" +msgstr "All contact requests are listed." diff --git a/components/ILIAS/Contact/lang/contact_sl.po b/components/ILIAS/Contact/lang/contact_sl.po new file mode 100644 index 000000000000..baa90cbc9764 --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_sl.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: contact\n" + +msgid "contact_awrn_ap_contacts" +msgstr "Approved Contacts" + +msgid "contact_awrn_ap_contacts_info" +msgstr "All contacts approved by the user are listed." + +msgid "contact_awrn_req_contacts" +msgstr "Contact Requests" + +msgid "contact_awrn_req_contacts_info" +msgstr "All contact requests are listed." diff --git a/components/ILIAS/Contact/lang/contact_sq.po b/components/ILIAS/Contact/lang/contact_sq.po new file mode 100644 index 000000000000..adbbb53f0896 --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_sq.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: contact\n" + +#, fuzzy +msgid "contact_awrn_ap_contacts" +msgstr "Approved Contacts" + +#, fuzzy +msgid "contact_awrn_ap_contacts_info" +msgstr "All contacts approved by the user are listed." + +#, fuzzy +msgid "contact_awrn_req_contacts" +msgstr "Contact Requests" + +#, fuzzy +msgid "contact_awrn_req_contacts_info" +msgstr "All contact requests are listed." diff --git a/components/ILIAS/Contact/lang/contact_sr.po b/components/ILIAS/Contact/lang/contact_sr.po new file mode 100644 index 000000000000..bfe6c71cf005 --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_sr.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: contact\n" + +#, fuzzy +msgid "contact_awrn_ap_contacts" +msgstr "Approved Contacts" + +#, fuzzy +msgid "contact_awrn_ap_contacts_info" +msgstr "All contacts approved by the user are listed." + +#, fuzzy +msgid "contact_awrn_req_contacts" +msgstr "Contact Requests" + +#, fuzzy +msgid "contact_awrn_req_contacts_info" +msgstr "All contact requests are listed." diff --git a/components/ILIAS/Contact/lang/contact_sv.po b/components/ILIAS/Contact/lang/contact_sv.po new file mode 100644 index 000000000000..cbd42f73d8af --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_sv.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: contact\n" + +msgid "contact_awrn_ap_contacts" +msgstr "Bekräftade kontakter" + +msgid "contact_awrn_ap_contacts_info" +msgstr "Alla bekräftade kontakter för en användare listas." + +msgid "contact_awrn_req_contacts" +msgstr "Kontaktförfrågningar" + +msgid "contact_awrn_req_contacts_info" +msgstr "Alla kontaktförfrågningar är listade." diff --git a/components/ILIAS/Contact/lang/contact_tr.po b/components/ILIAS/Contact/lang/contact_tr.po new file mode 100644 index 000000000000..c163dc442ab5 --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_tr.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: contact\n" + +#, fuzzy +msgid "contact_awrn_ap_contacts" +msgstr "Approved Contacts" + +#, fuzzy +msgid "contact_awrn_ap_contacts_info" +msgstr "All contacts approved by the user are listed." + +#, fuzzy +msgid "contact_awrn_req_contacts" +msgstr "Contact Requests" + +#, fuzzy +msgid "contact_awrn_req_contacts_info" +msgstr "All contact requests are listed." diff --git a/components/ILIAS/Contact/lang/contact_uk.po b/components/ILIAS/Contact/lang/contact_uk.po new file mode 100644 index 000000000000..e38fc087573e --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_uk.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: contact\n" + +#, fuzzy +msgid "contact_awrn_ap_contacts" +msgstr "Approved Contacts" + +#, fuzzy +msgid "contact_awrn_ap_contacts_info" +msgstr "All contacts approved by the user are listed." + +#, fuzzy +msgid "contact_awrn_req_contacts" +msgstr "Contact Requests" + +#, fuzzy +msgid "contact_awrn_req_contacts_info" +msgstr "All contact requests are listed." diff --git a/components/ILIAS/Contact/lang/contact_vi.po b/components/ILIAS/Contact/lang/contact_vi.po new file mode 100644 index 000000000000..8335c80bc01e --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_vi.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: contact\n" + +#, fuzzy +msgid "contact_awrn_ap_contacts" +msgstr "Approved Contacts" + +#, fuzzy +msgid "contact_awrn_ap_contacts_info" +msgstr "All contacts approved by the user are listed." + +#, fuzzy +msgid "contact_awrn_req_contacts" +msgstr "Contact Requests" + +#, fuzzy +msgid "contact_awrn_req_contacts_info" +msgstr "All contact requests are listed." diff --git a/components/ILIAS/Contact/lang/contact_zh.po b/components/ILIAS/Contact/lang/contact_zh.po new file mode 100644 index 000000000000..7a7a6c27e831 --- /dev/null +++ b/components/ILIAS/Contact/lang/contact_zh.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: contact\n" + +#, fuzzy +msgid "contact_awrn_ap_contacts" +msgstr "Approved Contacts" + +#, fuzzy +msgid "contact_awrn_ap_contacts_info" +msgstr "All contacts approved by the user are listed." + +#, fuzzy +msgid "contact_awrn_req_contacts" +msgstr "Contact Requests" + +#, fuzzy +msgid "contact_awrn_req_contacts_info" +msgstr "All contact requests are listed." diff --git a/components/ILIAS/Container/Container.php b/components/ILIAS/Container/Container.php index 8cf5aa09a323..1856b00e7e73 100644 --- a/components/ILIAS/Container/Container.php +++ b/components/ILIAS/Container/Container.php @@ -20,6 +20,9 @@ namespace ILIAS; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; + class Container implements Component\Component { public function init( @@ -42,5 +45,13 @@ public function init( new Component\Resource\ComponentJS($this, "ilClassification.js"); $contribute[Component\Resource\PublicAsset::class] = fn() => new Component\Resource\ComponentJS($this, "ilblockcallback.js"); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'classification' + ); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'cont' + ); } } diff --git a/components/ILIAS/Container/lang/classification.pot b/components/ILIAS/Container/lang/classification.pot new file mode 100644 index 000000000000..bd0137b14519 --- /dev/null +++ b/components/ILIAS/Container/lang/classification.pot @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: classification\n" + +msgid "clsfct_back_to_cat" +msgstr "" + +msgid "clsfct_block_info" +msgstr "" + +msgid "clsfct_block_title" +msgstr "" + +msgid "clsfct_content_no_match" +msgstr "" + +msgid "clsfct_content_title" +msgstr "" + +msgid "clsfct_selected_objects" +msgstr "" diff --git a/components/ILIAS/Container/lang/classification_ar.po b/components/ILIAS/Container/lang/classification_ar.po new file mode 100644 index 000000000000..7d8d9b4d06e3 --- /dev/null +++ b/components/ILIAS/Container/lang/classification_ar.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: classification\n" + +#, fuzzy +msgid "clsfct_back_to_cat" +msgstr "Back to Category" + +#, fuzzy +msgid "clsfct_block_info" +msgstr "Your Selection filters the objects." + +#, fuzzy +msgid "clsfct_block_title" +msgstr "Selection by Topics" + +#, fuzzy +msgid "clsfct_content_no_match" +msgstr "No hits" + +#, fuzzy +msgid "clsfct_content_title" +msgstr "Objects matching your selection" + +#, fuzzy +msgid "clsfct_selected_objects" +msgstr "Selected Objects" diff --git a/components/ILIAS/Container/lang/classification_bg.po b/components/ILIAS/Container/lang/classification_bg.po new file mode 100644 index 000000000000..bf90f178c8c9 --- /dev/null +++ b/components/ILIAS/Container/lang/classification_bg.po @@ -0,0 +1,30 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: classification\n" + +#, fuzzy +msgid "clsfct_back_to_cat" +msgstr "Назад към категорията" + +msgid "clsfct_block_info" +msgstr "Вашата селекция филтрира обектите." + +#, fuzzy +msgid "clsfct_block_title" +msgstr "Селекция по теми" + +#, fuzzy +msgid "clsfct_content_no_match" +msgstr "Няма обекти, които да отговарят на избраните от вас критерии." + +msgid "clsfct_content_title" +msgstr "Облекти, отговарящи на вашия избор" + +msgid "clsfct_selected_objects" +msgstr "Избрани обекти" diff --git a/components/ILIAS/Container/lang/classification_cs.po b/components/ILIAS/Container/lang/classification_cs.po new file mode 100644 index 000000000000..50412cfee805 --- /dev/null +++ b/components/ILIAS/Container/lang/classification_cs.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: classification\n" + +msgid "clsfct_back_to_cat" +msgstr "Zpět do kategorie" + +msgid "clsfct_block_info" +msgstr "Váš výběr filtruje objekty." + +msgid "clsfct_block_title" +msgstr "Výběr podle témat" + +msgid "clsfct_content_no_match" +msgstr "Žádné zásahy" + +msgid "clsfct_content_title" +msgstr "Objekty odpovídající vašemu výběru" + +msgid "clsfct_selected_objects" +msgstr "Vybrané objekty" diff --git a/components/ILIAS/Container/lang/classification_da.po b/components/ILIAS/Container/lang/classification_da.po new file mode 100644 index 000000000000..69ec396e2a44 --- /dev/null +++ b/components/ILIAS/Container/lang/classification_da.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: classification\n" + +#, fuzzy +msgid "clsfct_back_to_cat" +msgstr "Back to Category" + +#, fuzzy +msgid "clsfct_block_info" +msgstr "Your Selection filters the objects." + +#, fuzzy +msgid "clsfct_block_title" +msgstr "Selection by Topics" + +#, fuzzy +msgid "clsfct_content_no_match" +msgstr "No hits" + +#, fuzzy +msgid "clsfct_content_title" +msgstr "Objects matching your selection" + +#, fuzzy +msgid "clsfct_selected_objects" +msgstr "Selected Objects" diff --git a/components/ILIAS/Container/lang/classification_de.po b/components/ILIAS/Container/lang/classification_de.po new file mode 100644 index 000000000000..b3fac8669ace --- /dev/null +++ b/components/ILIAS/Container/lang/classification_de.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: classification\n" + +msgid "clsfct_back_to_cat" +msgstr "Zurück zur Kategorie" + +msgid "clsfct_block_info" +msgstr "Ihre Auswahl filtert die Objekte." + +msgid "clsfct_block_title" +msgstr "Auswahl nach Themen" + +msgid "clsfct_content_no_match" +msgstr "Es wurden keine Objekte für die ausgewählten Kriterien gefunden." + +msgid "clsfct_content_title" +msgstr "Zu Ihrer Auswahl passende Objekte." + +msgid "clsfct_selected_objects" +msgstr "Ausgewählte Objekte" diff --git a/components/ILIAS/Container/lang/classification_el.po b/components/ILIAS/Container/lang/classification_el.po new file mode 100644 index 000000000000..5da7b25eebfb --- /dev/null +++ b/components/ILIAS/Container/lang/classification_el.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: classification\n" + +#, fuzzy +msgid "clsfct_back_to_cat" +msgstr "Back to Category" + +#, fuzzy +msgid "clsfct_block_info" +msgstr "Your Selection filters the objects." + +#, fuzzy +msgid "clsfct_block_title" +msgstr "Selection by Topics" + +#, fuzzy +msgid "clsfct_content_no_match" +msgstr "No hits" + +#, fuzzy +msgid "clsfct_content_title" +msgstr "Objects matching your selection" + +#, fuzzy +msgid "clsfct_selected_objects" +msgstr "Selected Objects" diff --git a/components/ILIAS/Container/lang/classification_en.po b/components/ILIAS/Container/lang/classification_en.po new file mode 100644 index 000000000000..fd5a7416f4ae --- /dev/null +++ b/components/ILIAS/Container/lang/classification_en.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: classification\n" + +msgid "clsfct_back_to_cat" +msgstr "Back to Category" + +msgid "clsfct_block_info" +msgstr "Your Selection filters the objects." + +msgid "clsfct_block_title" +msgstr "Selection by Topics" + +msgid "clsfct_content_no_match" +msgstr "No objects match your selected criteria." + +msgid "clsfct_content_title" +msgstr "Objects matching your selection" + +msgid "clsfct_selected_objects" +msgstr "Selected Objects" diff --git a/components/ILIAS/Container/lang/classification_es.po b/components/ILIAS/Container/lang/classification_es.po new file mode 100644 index 000000000000..10069bc280bc --- /dev/null +++ b/components/ILIAS/Container/lang/classification_es.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: classification\n" + +msgid "clsfct_back_to_cat" +msgstr "Volver a la categoría" + +msgid "clsfct_block_info" +msgstr "Su selección filtra los objetos." + +msgid "clsfct_block_title" +msgstr "Selección por temas" + +msgid "clsfct_content_no_match" +msgstr "Ningún objeto coincide con los criterios seleccionados." + +msgid "clsfct_content_title" +msgstr "Objetos que coinciden con su selección" + +msgid "clsfct_selected_objects" +msgstr "Objetos seleccionados" diff --git a/components/ILIAS/Container/lang/classification_et.po b/components/ILIAS/Container/lang/classification_et.po new file mode 100644 index 000000000000..f3feb4a32119 --- /dev/null +++ b/components/ILIAS/Container/lang/classification_et.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: classification\n" + +#, fuzzy +msgid "clsfct_back_to_cat" +msgstr "Back to Category" + +msgid "clsfct_block_info" +msgstr "Your Selection filters the objects." + +msgid "clsfct_block_title" +msgstr "Selection by Topics" + +msgid "clsfct_content_no_match" +msgstr "No hits" + +msgid "clsfct_content_title" +msgstr "Objects matching your selection" + +#, fuzzy +msgid "clsfct_selected_objects" +msgstr "Selected Objects" diff --git a/components/ILIAS/Container/lang/classification_fa.po b/components/ILIAS/Container/lang/classification_fa.po new file mode 100644 index 000000000000..050ac66dc9b6 --- /dev/null +++ b/components/ILIAS/Container/lang/classification_fa.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: classification\n" + +#, fuzzy +msgid "clsfct_back_to_cat" +msgstr "Back to Category" + +#, fuzzy +msgid "clsfct_block_info" +msgstr "Your Selection filters the objects." + +#, fuzzy +msgid "clsfct_block_title" +msgstr "Selection by Topics" + +#, fuzzy +msgid "clsfct_content_no_match" +msgstr "No hits" + +#, fuzzy +msgid "clsfct_content_title" +msgstr "Objects matching your selection" + +#, fuzzy +msgid "clsfct_selected_objects" +msgstr "Selected Objects" diff --git a/components/ILIAS/Container/lang/classification_fr.po b/components/ILIAS/Container/lang/classification_fr.po new file mode 100644 index 000000000000..50ee9a55f415 --- /dev/null +++ b/components/ILIAS/Container/lang/classification_fr.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: classification\n" + +msgid "clsfct_back_to_cat" +msgstr "Retour à la catégorie" + +msgid "clsfct_block_info" +msgstr "Votre sélection filtre les objets." + +msgid "clsfct_block_title" +msgstr "Sélection par sujets" + +msgid "clsfct_content_no_match" +msgstr "No hits" + +msgid "clsfct_content_title" +msgstr "Objets correspondant à votre sélection" + +msgid "clsfct_selected_objects" +msgstr "Objets sélectionnés" diff --git a/components/ILIAS/Container/lang/classification_hr.po b/components/ILIAS/Container/lang/classification_hr.po new file mode 100644 index 000000000000..d1f9bc39046c --- /dev/null +++ b/components/ILIAS/Container/lang/classification_hr.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: classification\n" + +msgid "clsfct_back_to_cat" +msgstr "Back to Category" + +msgid "clsfct_block_info" +msgstr "Your Selection filters the objects." + +msgid "clsfct_block_title" +msgstr "Selection by Topics" + +msgid "clsfct_content_no_match" +msgstr "No objects match your selected criteria." + +msgid "clsfct_content_title" +msgstr "Objects matching your selection" + +msgid "clsfct_selected_objects" +msgstr "Selected Objects" diff --git a/components/ILIAS/Container/lang/classification_hu.po b/components/ILIAS/Container/lang/classification_hu.po new file mode 100644 index 000000000000..55c1cf9babc7 --- /dev/null +++ b/components/ILIAS/Container/lang/classification_hu.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: classification\n" + +msgid "clsfct_back_to_cat" +msgstr "Vissza a kategóriához" + +msgid "clsfct_block_info" +msgstr "Tartalom szűréséhez kattintson egy címkére" + +msgid "clsfct_block_title" +msgstr "Címkefelhő" + +msgid "clsfct_content_no_match" +msgstr "Nincs találat" + +msgid "clsfct_content_title" +msgstr "Címke alapján szűrt tartalom" + +msgid "clsfct_selected_objects" +msgstr "Kiválasztott objektumok" diff --git a/components/ILIAS/Container/lang/classification_it.po b/components/ILIAS/Container/lang/classification_it.po new file mode 100644 index 000000000000..f04c59e9e585 --- /dev/null +++ b/components/ILIAS/Container/lang/classification_it.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: classification\n" + +msgid "clsfct_back_to_cat" +msgstr "Torna alla categoria" + +msgid "clsfct_block_info" +msgstr "La selezione filtra gli oggetti." + +msgid "clsfct_block_title" +msgstr "Selezione per argomenti" + +msgid "clsfct_content_no_match" +msgstr "Nessuna selezione" + +msgid "clsfct_content_title" +msgstr "Oggetti che corrispondono alla selezione" + +msgid "clsfct_selected_objects" +msgstr "Oggetti selezionati" diff --git a/components/ILIAS/Container/lang/classification_ja.po b/components/ILIAS/Container/lang/classification_ja.po new file mode 100644 index 000000000000..4ab0ef3acfeb --- /dev/null +++ b/components/ILIAS/Container/lang/classification_ja.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: classification\n" + +msgid "clsfct_back_to_cat" +msgstr "カテゴリーへ戻る" + +msgid "clsfct_block_info" +msgstr "選択がオブジェクトをフィルターします。" + +msgid "clsfct_block_title" +msgstr "トピックで選択" + +msgid "clsfct_content_no_match" +msgstr "ヒットなし" + +msgid "clsfct_content_title" +msgstr "選択のオブジェクト整合" + +msgid "clsfct_selected_objects" +msgstr "オブジェクトを選択しました" diff --git a/components/ILIAS/Container/lang/classification_ka.po b/components/ILIAS/Container/lang/classification_ka.po new file mode 100644 index 000000000000..9a2ea3b0d65c --- /dev/null +++ b/components/ILIAS/Container/lang/classification_ka.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: classification\n" + +#, fuzzy +msgid "clsfct_back_to_cat" +msgstr "Back to Category" + +#, fuzzy +msgid "clsfct_block_info" +msgstr "Your Selection filters the objects." + +#, fuzzy +msgid "clsfct_block_title" +msgstr "Selection by Topics" + +#, fuzzy +msgid "clsfct_content_no_match" +msgstr "No hits" + +#, fuzzy +msgid "clsfct_content_title" +msgstr "Objects matching your selection" + +#, fuzzy +msgid "clsfct_selected_objects" +msgstr "Selected Objects" diff --git a/components/ILIAS/Container/lang/classification_lt.po b/components/ILIAS/Container/lang/classification_lt.po new file mode 100644 index 000000000000..64090cedeae6 --- /dev/null +++ b/components/ILIAS/Container/lang/classification_lt.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: classification\n" + +#, fuzzy +msgid "clsfct_back_to_cat" +msgstr "Back to Category" + +#, fuzzy +msgid "clsfct_block_info" +msgstr "Your Selection filters the objects." + +#, fuzzy +msgid "clsfct_block_title" +msgstr "Selection by Topics" + +#, fuzzy +msgid "clsfct_content_no_match" +msgstr "No hits" + +#, fuzzy +msgid "clsfct_content_title" +msgstr "Objects matching your selection" + +#, fuzzy +msgid "clsfct_selected_objects" +msgstr "Selected Objects" diff --git a/components/ILIAS/Container/lang/classification_nl.po b/components/ILIAS/Container/lang/classification_nl.po new file mode 100644 index 000000000000..746309a7d8e7 --- /dev/null +++ b/components/ILIAS/Container/lang/classification_nl.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: classification\n" + +#, fuzzy +msgid "clsfct_back_to_cat" +msgstr "Back to Category" + +msgid "clsfct_block_info" +msgstr "Je selectie filtreert de objecten" + +msgid "clsfct_block_title" +msgstr "Selectie per onderwerp" + +msgid "clsfct_content_no_match" +msgstr "Geen overeenkomsten" + +msgid "clsfct_content_title" +msgstr "Objecten die overeenkomen met je selectie" + +#, fuzzy +msgid "clsfct_selected_objects" +msgstr "Selected Objects" diff --git a/components/ILIAS/Container/lang/classification_pl.po b/components/ILIAS/Container/lang/classification_pl.po new file mode 100644 index 000000000000..204c5af7ca67 --- /dev/null +++ b/components/ILIAS/Container/lang/classification_pl.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: classification\n" + +msgid "clsfct_back_to_cat" +msgstr "Wróć do kategorii" + +msgid "clsfct_block_info" +msgstr "Twój wybór filtruje obiekty." + +msgid "clsfct_block_title" +msgstr "Wybór wg wątków" + +msgid "clsfct_content_no_match" +msgstr "Nie znaleziono obiektów pasujących do wybranych kryteriów." + +msgid "clsfct_content_title" +msgstr "Obiekty pasujące do Twojego wyboru." + +msgid "clsfct_selected_objects" +msgstr "Wybrane obiekty" diff --git a/components/ILIAS/Container/lang/classification_pt.po b/components/ILIAS/Container/lang/classification_pt.po new file mode 100644 index 000000000000..d7f4db81b791 --- /dev/null +++ b/components/ILIAS/Container/lang/classification_pt.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: classification\n" + +msgid "clsfct_back_to_cat" +msgstr "Voltar à categoria" + +msgid "clsfct_block_info" +msgstr "A sua seleção filtra os objetos." + +msgid "clsfct_block_title" +msgstr "Seleção por tópicos" + +msgid "clsfct_content_no_match" +msgstr "Possível alterar dados pessoas e perfis" + +msgid "clsfct_content_title" +msgstr "Objetos que correspondem à sua seleção" + +msgid "clsfct_selected_objects" +msgstr "Objetos selecionados" diff --git a/components/ILIAS/Container/lang/classification_ro.po b/components/ILIAS/Container/lang/classification_ro.po new file mode 100644 index 000000000000..f6dcd7ee3546 --- /dev/null +++ b/components/ILIAS/Container/lang/classification_ro.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: classification\n" + +#, fuzzy +msgid "clsfct_back_to_cat" +msgstr "Back to Category" + +#, fuzzy +msgid "clsfct_block_info" +msgstr "Your Selection filters the objects." + +#, fuzzy +msgid "clsfct_block_title" +msgstr "Selection by Topics" + +#, fuzzy +msgid "clsfct_content_no_match" +msgstr "No hits" + +#, fuzzy +msgid "clsfct_content_title" +msgstr "Objects matching your selection" + +#, fuzzy +msgid "clsfct_selected_objects" +msgstr "Selected Objects" diff --git a/components/ILIAS/Container/lang/classification_ru.po b/components/ILIAS/Container/lang/classification_ru.po new file mode 100644 index 000000000000..40b222856bce --- /dev/null +++ b/components/ILIAS/Container/lang/classification_ru.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: classification\n" + +#, fuzzy +msgid "clsfct_back_to_cat" +msgstr "Back to Category" + +#, fuzzy +msgid "clsfct_block_info" +msgstr "Your Selection filters the objects." + +#, fuzzy +msgid "clsfct_block_title" +msgstr "Selection by Topics" + +#, fuzzy +msgid "clsfct_content_no_match" +msgstr "No hits" + +#, fuzzy +msgid "clsfct_content_title" +msgstr "Objects matching your selection" + +#, fuzzy +msgid "clsfct_selected_objects" +msgstr "Selected Objects" diff --git a/components/ILIAS/Container/lang/classification_sk.po b/components/ILIAS/Container/lang/classification_sk.po new file mode 100644 index 000000000000..97301e9ab63a --- /dev/null +++ b/components/ILIAS/Container/lang/classification_sk.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: classification\n" + +#, fuzzy +msgid "clsfct_back_to_cat" +msgstr "Back to Category" + +#, fuzzy +msgid "clsfct_block_info" +msgstr "Your Selection filters the objects." + +#, fuzzy +msgid "clsfct_block_title" +msgstr "Selection by Topics" + +#, fuzzy +msgid "clsfct_content_no_match" +msgstr "No hits" + +#, fuzzy +msgid "clsfct_content_title" +msgstr "Objects matching your selection" + +#, fuzzy +msgid "clsfct_selected_objects" +msgstr "Selected Objects" diff --git a/components/ILIAS/Container/lang/classification_sl.po b/components/ILIAS/Container/lang/classification_sl.po new file mode 100644 index 000000000000..66d07f47ff05 --- /dev/null +++ b/components/ILIAS/Container/lang/classification_sl.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: classification\n" + +msgid "clsfct_back_to_cat" +msgstr "Back to Category" + +msgid "clsfct_block_info" +msgstr "Your Selection filters the objects." + +msgid "clsfct_block_title" +msgstr "Selection by Topics" + +msgid "clsfct_content_no_match" +msgstr "No objects match your selected criteria." + +msgid "clsfct_content_title" +msgstr "Objects matching your selection" + +msgid "clsfct_selected_objects" +msgstr "Selected Objects" diff --git a/components/ILIAS/Container/lang/classification_sq.po b/components/ILIAS/Container/lang/classification_sq.po new file mode 100644 index 000000000000..172e2edc211f --- /dev/null +++ b/components/ILIAS/Container/lang/classification_sq.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: classification\n" + +#, fuzzy +msgid "clsfct_back_to_cat" +msgstr "Back to Category" + +#, fuzzy +msgid "clsfct_block_info" +msgstr "Your Selection filters the objects." + +#, fuzzy +msgid "clsfct_block_title" +msgstr "Selection by Topics" + +#, fuzzy +msgid "clsfct_content_no_match" +msgstr "No hits" + +#, fuzzy +msgid "clsfct_content_title" +msgstr "Objects matching your selection" + +#, fuzzy +msgid "clsfct_selected_objects" +msgstr "Selected Objects" diff --git a/components/ILIAS/Container/lang/classification_sr.po b/components/ILIAS/Container/lang/classification_sr.po new file mode 100644 index 000000000000..373a7ee19567 --- /dev/null +++ b/components/ILIAS/Container/lang/classification_sr.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: classification\n" + +#, fuzzy +msgid "clsfct_back_to_cat" +msgstr "Back to Category" + +#, fuzzy +msgid "clsfct_block_info" +msgstr "Your Selection filters the objects." + +#, fuzzy +msgid "clsfct_block_title" +msgstr "Selection by Topics" + +#, fuzzy +msgid "clsfct_content_no_match" +msgstr "No hits" + +#, fuzzy +msgid "clsfct_content_title" +msgstr "Objects matching your selection" + +#, fuzzy +msgid "clsfct_selected_objects" +msgstr "Selected Objects" diff --git a/components/ILIAS/Container/lang/classification_sv.po b/components/ILIAS/Container/lang/classification_sv.po new file mode 100644 index 000000000000..ffaa23e64364 --- /dev/null +++ b/components/ILIAS/Container/lang/classification_sv.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: classification\n" + +msgid "clsfct_back_to_cat" +msgstr "Tillbaka till kategorin" + +msgid "clsfct_block_info" +msgstr "Ditt urval filtrerar objekten." + +msgid "clsfct_block_title" +msgstr "Urval enligt teman" + +msgid "clsfct_content_no_match" +msgstr "Inga objekt hittades för de valda kriterierna." + +msgid "clsfct_content_title" +msgstr "Objekt som matchar ditt urval." + +msgid "clsfct_selected_objects" +msgstr "Utvalda objekt" diff --git a/components/ILIAS/Container/lang/classification_tr.po b/components/ILIAS/Container/lang/classification_tr.po new file mode 100644 index 000000000000..590629bcb6cf --- /dev/null +++ b/components/ILIAS/Container/lang/classification_tr.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: classification\n" + +#, fuzzy +msgid "clsfct_back_to_cat" +msgstr "Back to Category" + +#, fuzzy +msgid "clsfct_block_info" +msgstr "Your Selection filters the objects." + +#, fuzzy +msgid "clsfct_block_title" +msgstr "Selection by Topics" + +#, fuzzy +msgid "clsfct_content_no_match" +msgstr "No hits" + +#, fuzzy +msgid "clsfct_content_title" +msgstr "Objects matching your selection" + +#, fuzzy +msgid "clsfct_selected_objects" +msgstr "Selected Objects" diff --git a/components/ILIAS/Container/lang/classification_uk.po b/components/ILIAS/Container/lang/classification_uk.po new file mode 100644 index 000000000000..b6381ddbdee9 --- /dev/null +++ b/components/ILIAS/Container/lang/classification_uk.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: classification\n" + +#, fuzzy +msgid "clsfct_back_to_cat" +msgstr "Back to Category" + +#, fuzzy +msgid "clsfct_block_info" +msgstr "Your Selection filters the objects." + +#, fuzzy +msgid "clsfct_block_title" +msgstr "Selection by Topics" + +#, fuzzy +msgid "clsfct_content_no_match" +msgstr "No hits" + +#, fuzzy +msgid "clsfct_content_title" +msgstr "Objects matching your selection" + +#, fuzzy +msgid "clsfct_selected_objects" +msgstr "Selected Objects" diff --git a/components/ILIAS/Container/lang/classification_vi.po b/components/ILIAS/Container/lang/classification_vi.po new file mode 100644 index 000000000000..c11979f6e9ca --- /dev/null +++ b/components/ILIAS/Container/lang/classification_vi.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: classification\n" + +#, fuzzy +msgid "clsfct_back_to_cat" +msgstr "Back to Category" + +#, fuzzy +msgid "clsfct_block_info" +msgstr "Your Selection filters the objects." + +#, fuzzy +msgid "clsfct_block_title" +msgstr "Selection by Topics" + +#, fuzzy +msgid "clsfct_content_no_match" +msgstr "No hits" + +#, fuzzy +msgid "clsfct_content_title" +msgstr "Objects matching your selection" + +#, fuzzy +msgid "clsfct_selected_objects" +msgstr "Selected Objects" diff --git a/components/ILIAS/Container/lang/classification_zh.po b/components/ILIAS/Container/lang/classification_zh.po new file mode 100644 index 000000000000..04c7c7d248b4 --- /dev/null +++ b/components/ILIAS/Container/lang/classification_zh.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: classification\n" + +#, fuzzy +msgid "clsfct_back_to_cat" +msgstr "Back to Category" + +#, fuzzy +msgid "clsfct_block_info" +msgstr "Your Selection filters the objects." + +#, fuzzy +msgid "clsfct_block_title" +msgstr "Selection by Topics" + +#, fuzzy +msgid "clsfct_content_no_match" +msgstr "No hits" + +#, fuzzy +msgid "clsfct_content_title" +msgstr "Objects matching your selection" + +#, fuzzy +msgid "clsfct_selected_objects" +msgstr "Selected Objects" diff --git a/components/ILIAS/Container/lang/cont.pot b/components/ILIAS/Container/lang/cont.pot new file mode 100644 index 000000000000..7eff23fc6578 --- /dev/null +++ b/components/ILIAS/Container/lang/cont.pot @@ -0,0 +1,246 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: cont\n" + +msgid "cont_add_global_profile" +msgstr "" + +msgid "cont_add_local_profile" +msgstr "" + +msgid "cont_add_skill" +msgstr "" + +msgid "cont_assign_competence" +msgstr "" + +msgid "cont_assign_skills" +msgstr "" + +msgid "cont_block_limit" +msgstr "" + +msgid "cont_block_limit_info" +msgstr "" + +msgid "cont_cont_skills" +msgstr "" + +msgid "cont_deassign_competence" +msgstr "" + +msgid "cont_filter" +msgstr "" + +msgid "cont_filter_field" +msgstr "" + +msgid "cont_filter_fields" +msgstr "" + +msgid "cont_filter_record" +msgstr "" + +msgid "cont_found_objects" +msgstr "" + +msgid "cont_item_list" +msgstr "" + +msgid "cont_item_list_info" +msgstr "" + +msgid "cont_list_presentation" +msgstr "" + +msgid "cont_mem_skills" +msgstr "" + +msgid "cont_news_edited" +msgstr "" + +msgid "cont_news_settings" +msgstr "" + +msgid "cont_news_timeline" +msgstr "" + +msgid "cont_news_timeline_auto_entries" +msgstr "" + +msgid "cont_news_timeline_auto_entries_info" +msgstr "" + +msgid "cont_news_timeline_info" +msgstr "" + +msgid "cont_news_timeline_landing_page" +msgstr "" + +msgid "cont_news_timeline_landing_page_info" +msgstr "" + +msgid "cont_news_timeline_tab" +msgstr "" + +msgid "cont_no_title" +msgstr "" + +msgid "cont_only_crs_grp_fold_download" +msgstr "" + +msgid "cont_page_type_cont" +msgstr "" + +msgid "cont_page_type_cstr" +msgstr "" + +msgid "cont_path" +msgstr "" + +msgid "cont_publish_assignment" +msgstr "" + +msgid "cont_published" +msgstr "" + +msgid "cont_really_deassign_skills" +msgstr "" + +msgid "cont_really_remove_skill_from_course" +msgstr "" + +msgid "cont_select_fields" +msgstr "" + +msgid "cont_show_more" +msgstr "" + +msgid "cont_skill" +msgstr "" + +msgid "cont_skill_ass_profiles" +msgstr "" + +msgid "cont_skill_assigned_comp" +msgstr "" + +msgid "cont_skill_assigned_profiles" +msgstr "" + +msgid "cont_skill_deletion_not_possible" +msgstr "" + +msgid "cont_skill_do_not_set" +msgstr "" + +msgid "cont_skill_members" +msgstr "" + +msgid "cont_skill_no_profile_selected" +msgstr "" + +msgid "cont_skill_no_skill" +msgstr "" + +msgid "cont_skill_no_skills_selected" +msgstr "" + +msgid "cont_skill_profile" +msgstr "" + +msgid "cont_skill_profiles" +msgstr "" + +msgid "cont_skill_publish" +msgstr "" + +msgid "cont_skill_publish_auto" +msgstr "" + +msgid "cont_skill_publish_auto_info" +msgstr "" + +msgid "cont_skill_publish_manual" +msgstr "" + +msgid "cont_skill_publish_manual_info" +msgstr "" + +msgid "cont_skill_really_delete_profile_from_list" +msgstr "" + +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "" + +msgid "cont_skill_really_remove_profile_from_list" +msgstr "" + +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "" + +msgid "cont_skill_records" +msgstr "" + +msgid "cont_skill_removal_not_possible" +msgstr "" + +msgid "cont_std_filter_title_1" +msgstr "" + +msgid "cont_std_filter_title_2" +msgstr "" + +msgid "cont_std_filter_title_3" +msgstr "" + +msgid "cont_std_filter_title_4" +msgstr "" + +msgid "cont_std_filter_title_5" +msgstr "" + +msgid "cont_std_filter_title_6" +msgstr "" + +msgid "cont_std_filter_title_7" +msgstr "" + +msgid "cont_std_filter_title_8" +msgstr "" + +msgid "cont_std_filter_title_9" +msgstr "" + +msgid "cont_std_record_title" +msgstr "" + +msgid "cont_tile_size" +msgstr "" + +msgid "cont_tile_size_0" +msgstr "" + +msgid "cont_tile_size_1" +msgstr "" + +msgid "cont_tile_size_2" +msgstr "" + +msgid "cont_tile_size_3" +msgstr "" + +msgid "cont_tile_size_4" +msgstr "" + +msgid "cont_tile_view" +msgstr "" + +msgid "cont_tile_view_info" +msgstr "" + +msgid "cont_trash_general_usage" +msgstr "" diff --git a/components/ILIAS/Container/lang/cont_ar.po b/components/ILIAS/Container/lang/cont_ar.po new file mode 100644 index 000000000000..2e41bf12ffac --- /dev/null +++ b/components/ILIAS/Container/lang/cont_ar.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +#, fuzzy +msgid "cont_add_skill" +msgstr "Add Competence" + +#, fuzzy +msgid "cont_assign_competence" +msgstr "Assign Competences to Members" + +#, fuzzy +msgid "cont_assign_skills" +msgstr "Assign Competences" + +#, fuzzy +msgid "cont_block_limit" +msgstr "Limit Items per Block" + +#, fuzzy +msgid "cont_block_limit_info" +msgstr "If a block contains more items, a \"Show more\" button will appear." + +#, fuzzy +msgid "cont_cont_skills" +msgstr "Assigned Competences of Members" + +#, fuzzy +msgid "cont_deassign_competence" +msgstr "Deassign Competences" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +#, fuzzy +msgid "cont_item_list" +msgstr "List" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +#, fuzzy +msgid "cont_list_presentation" +msgstr "Item Presentation" + +#, fuzzy +msgid "cont_mem_skills" +msgstr "Competences" + +#, fuzzy +msgid "cont_news_edited" +msgstr "Bearbeitet" + +#, fuzzy +msgid "cont_news_settings" +msgstr "News Settings" + +#, fuzzy +msgid "cont_news_timeline" +msgstr "News Timeline" + +#, fuzzy +msgid "cont_news_timeline_auto_entries" +msgstr "Include Automatic Entries" + +#, fuzzy +msgid "cont_news_timeline_auto_entries_info" +msgstr "Include all news that are created automatically, e.g. forum posts, new files, etc." + +#, fuzzy +msgid "cont_news_timeline_info" +msgstr "Activates News Timeline Tab" + +#, fuzzy +msgid "cont_news_timeline_landing_page" +msgstr "Landing Page" + +#, fuzzy +msgid "cont_news_timeline_landing_page_info" +msgstr "Timeline page will be the landing page." + +#, fuzzy +msgid "cont_news_timeline_tab" +msgstr "Timeline" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +#, fuzzy +msgid "cont_path" +msgstr "Path" + +#, fuzzy +msgid "cont_publish_assignment" +msgstr "Publish Assignments" + +#, fuzzy +msgid "cont_published" +msgstr "Published" + +#, fuzzy +msgid "cont_really_deassign_skills" +msgstr "Do you really want to deassign all competences from the users?" + +#, fuzzy +msgid "cont_really_remove_skill_from_course" +msgstr "Do you really want to remove these competences from the list?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +#, fuzzy +msgid "cont_show_more" +msgstr "Show More" + +#, fuzzy +msgid "cont_skill" +msgstr "Competence" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_assigned_comp" +msgstr "Competence Selection" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +#, fuzzy +msgid "cont_skill_do_not_set" +msgstr "Do not set" + +#, fuzzy +msgid "cont_skill_members" +msgstr "Members" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +#, fuzzy +msgid "cont_skill_no_skill" +msgstr "No value (Reset)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_publish" +msgstr "Publish" + +#, fuzzy +msgid "cont_skill_publish_auto" +msgstr "Automatic" + +#, fuzzy +msgid "cont_skill_publish_auto_info" +msgstr "Competence assignments for members are immediately visible for members." + +#, fuzzy +msgid "cont_skill_publish_manual" +msgstr "Manual" + +#, fuzzy +msgid "cont_skill_publish_manual_info" +msgstr "Competence assignments for members must be published before they become visible for members." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +#, fuzzy +msgid "cont_tile_view" +msgstr "Tiles" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_bg.po b/components/ILIAS/Container/lang/cont_bg.po new file mode 100644 index 000000000000..f1964dd56577 --- /dev/null +++ b/components/ILIAS/Container/lang/cont_bg.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +#, fuzzy +msgid "cont_add_skill" +msgstr "Add Competence" + +#, fuzzy +msgid "cont_assign_competence" +msgstr "Assign Competences to Members" + +#, fuzzy +msgid "cont_assign_skills" +msgstr "Assign Competences" + +#, fuzzy +msgid "cont_block_limit" +msgstr "Limit Items per Block" + +#, fuzzy +msgid "cont_block_limit_info" +msgstr "If a block contains more items, a \"Show more\" button will appear." + +#, fuzzy +msgid "cont_cont_skills" +msgstr "Assigned Competences of Members" + +#, fuzzy +msgid "cont_deassign_competence" +msgstr "Deassign Competences" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +#, fuzzy +msgid "cont_item_list" +msgstr "List" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +#, fuzzy +msgid "cont_list_presentation" +msgstr "Item Presentation" + +#, fuzzy +msgid "cont_mem_skills" +msgstr "Competences" + +#, fuzzy +msgid "cont_news_edited" +msgstr "Bearbeitet" + +#, fuzzy +msgid "cont_news_settings" +msgstr "News Settings" + +#, fuzzy +msgid "cont_news_timeline" +msgstr "News Timeline" + +#, fuzzy +msgid "cont_news_timeline_auto_entries" +msgstr "Include Automatic Entries" + +#, fuzzy +msgid "cont_news_timeline_auto_entries_info" +msgstr "Include all news that are created automatically, e.g. forum posts, new files, etc." + +#, fuzzy +msgid "cont_news_timeline_info" +msgstr "Activates News Timeline Tab" + +#, fuzzy +msgid "cont_news_timeline_landing_page" +msgstr "Landing Page" + +#, fuzzy +msgid "cont_news_timeline_landing_page_info" +msgstr "Timeline page will be the landing page." + +#, fuzzy +msgid "cont_news_timeline_tab" +msgstr "Timeline" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +#, fuzzy +msgid "cont_path" +msgstr "Path" + +#, fuzzy +msgid "cont_publish_assignment" +msgstr "Publish Assignments" + +#, fuzzy +msgid "cont_published" +msgstr "Published" + +#, fuzzy +msgid "cont_really_deassign_skills" +msgstr "Do you really want to deassign all competences from the users?" + +#, fuzzy +msgid "cont_really_remove_skill_from_course" +msgstr "Do you really want to remove these competences from the list?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +#, fuzzy +msgid "cont_show_more" +msgstr "Show More" + +#, fuzzy +msgid "cont_skill" +msgstr "Competence" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_assigned_comp" +msgstr "Competence Selection" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +#, fuzzy +msgid "cont_skill_do_not_set" +msgstr "Do not set" + +#, fuzzy +msgid "cont_skill_members" +msgstr "Members" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +#, fuzzy +msgid "cont_skill_no_skill" +msgstr "No value (Reset)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_publish" +msgstr "Publish" + +#, fuzzy +msgid "cont_skill_publish_auto" +msgstr "Automatic" + +#, fuzzy +msgid "cont_skill_publish_auto_info" +msgstr "Competence assignments for members are immediately visible for members." + +#, fuzzy +msgid "cont_skill_publish_manual" +msgstr "Manual" + +#, fuzzy +msgid "cont_skill_publish_manual_info" +msgstr "Competence assignments for members must be published before they become visible for members." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +#, fuzzy +msgid "cont_tile_view" +msgstr "Tiles" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_cs.po b/components/ILIAS/Container/lang/cont_cs.po new file mode 100644 index 000000000000..9c85e3831b98 --- /dev/null +++ b/components/ILIAS/Container/lang/cont_cs.po @@ -0,0 +1,293 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +msgid "cont_add_skill" +msgstr "Přidat způsobilost" + +msgid "cont_assign_competence" +msgstr "Přiřadit členům způsobilosti" + +msgid "cont_assign_skills" +msgstr "Přiřadit způsobilosti" + +msgid "cont_block_limit" +msgstr "Omezit položky na blok" + +msgid "cont_block_limit_info" +msgstr "Pokud blok obsahuje více položek, objeví se tlačítko „Zobrazit více“." + +msgid "cont_cont_skills" +msgstr "Přiřazené způsobilosti členů" + +msgid "cont_deassign_competence" +msgstr "Zrušit přiřazení způsobilostí" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +msgid "cont_item_list" +msgstr "List" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +msgid "cont_list_presentation" +msgstr "Prezentace položky" + +msgid "cont_mem_skills" +msgstr "Způsobilosti" + +msgid "cont_news_edited" +msgstr "Zpracováno" + +msgid "cont_news_settings" +msgstr "Nastavení zpráv" + +msgid "cont_news_timeline" +msgstr "Časová osa zpráv" + +msgid "cont_news_timeline_auto_entries" +msgstr "Zahrnout automatické vstupy" + +msgid "cont_news_timeline_auto_entries_info" +msgstr "Zahrnout všechny zprávy, které jsou vytvořeny automaticky, např. příspěvky ve fórech, nové soubory atd." + +msgid "cont_news_timeline_info" +msgstr "Aktivuje záložku Časová osa zpráv" + +msgid "cont_news_timeline_landing_page" +msgstr "Vstupní stránka" + +msgid "cont_news_timeline_landing_page_info" +msgstr "Stránka časové osy bude vstupní stránkou." + +msgid "cont_news_timeline_tab" +msgstr "Časová osa" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +msgid "cont_path" +msgstr "Cesta" + +msgid "cont_publish_assignment" +msgstr "Zveřejnit přiřazení" + +msgid "cont_published" +msgstr "Zveřejněno" + +msgid "cont_really_deassign_skills" +msgstr "Opravdu chcete zrušit přiřazení všech způsobilostí od uživatelů?" + +msgid "cont_really_remove_skill_from_course" +msgstr "Opravdu chcete odstranit tyto způsobilosti ze seznamu?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +msgid "cont_show_more" +msgstr "Zobrazit více" + +msgid "cont_skill" +msgstr "Způsobilost" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +msgid "cont_skill_assigned_comp" +msgstr "Výběr způsobilosti" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +msgid "cont_skill_do_not_set" +msgstr "Nenastaveno" + +msgid "cont_skill_members" +msgstr "Členové" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +msgid "cont_skill_no_skill" +msgstr "Žádná hodnota (obnovit)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +msgid "cont_skill_publish" +msgstr "Publikovat" + +msgid "cont_skill_publish_auto" +msgstr "Automatické" + +msgid "cont_skill_publish_auto_info" +msgstr "Přiřazení způsobilosti pro členy jsou členům okamžitě viditelná." + +msgid "cont_skill_publish_manual" +msgstr "Manuální" + +msgid "cont_skill_publish_manual_info" +msgstr "Přiřazení způsobilosti pro členy musí být zveřejněna dříve, než budou viditelná členům." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +msgid "cont_tile_view" +msgstr "Dlaždice" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_da.po b/components/ILIAS/Container/lang/cont_da.po new file mode 100644 index 000000000000..536ed7736fcc --- /dev/null +++ b/components/ILIAS/Container/lang/cont_da.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +#, fuzzy +msgid "cont_add_skill" +msgstr "Add Competence" + +#, fuzzy +msgid "cont_assign_competence" +msgstr "Assign Competences to Members" + +#, fuzzy +msgid "cont_assign_skills" +msgstr "Assign Competences" + +#, fuzzy +msgid "cont_block_limit" +msgstr "Limit Items per Block" + +#, fuzzy +msgid "cont_block_limit_info" +msgstr "If a block contains more items, a \"Show more\" button will appear." + +#, fuzzy +msgid "cont_cont_skills" +msgstr "Assigned Competences of Members" + +#, fuzzy +msgid "cont_deassign_competence" +msgstr "Deassign Competences" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +#, fuzzy +msgid "cont_item_list" +msgstr "List" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +#, fuzzy +msgid "cont_list_presentation" +msgstr "Item Presentation" + +#, fuzzy +msgid "cont_mem_skills" +msgstr "Competences" + +#, fuzzy +msgid "cont_news_edited" +msgstr "Bearbeitet" + +#, fuzzy +msgid "cont_news_settings" +msgstr "News Settings" + +#, fuzzy +msgid "cont_news_timeline" +msgstr "News Timeline" + +#, fuzzy +msgid "cont_news_timeline_auto_entries" +msgstr "Include Automatic Entries" + +#, fuzzy +msgid "cont_news_timeline_auto_entries_info" +msgstr "Include all news that are created automatically, e.g. forum posts, new files, etc." + +#, fuzzy +msgid "cont_news_timeline_info" +msgstr "Activates News Timeline Tab" + +#, fuzzy +msgid "cont_news_timeline_landing_page" +msgstr "Landing Page" + +#, fuzzy +msgid "cont_news_timeline_landing_page_info" +msgstr "Timeline page will be the landing page." + +#, fuzzy +msgid "cont_news_timeline_tab" +msgstr "Timeline" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +#, fuzzy +msgid "cont_path" +msgstr "Path" + +#, fuzzy +msgid "cont_publish_assignment" +msgstr "Publish Assignments" + +#, fuzzy +msgid "cont_published" +msgstr "Published" + +#, fuzzy +msgid "cont_really_deassign_skills" +msgstr "Do you really want to deassign all competences from the users?" + +#, fuzzy +msgid "cont_really_remove_skill_from_course" +msgstr "Do you really want to remove these competences from the list?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +#, fuzzy +msgid "cont_show_more" +msgstr "Show More" + +#, fuzzy +msgid "cont_skill" +msgstr "Competence" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_assigned_comp" +msgstr "Competence Selection" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +#, fuzzy +msgid "cont_skill_do_not_set" +msgstr "Do not set" + +#, fuzzy +msgid "cont_skill_members" +msgstr "Members" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +#, fuzzy +msgid "cont_skill_no_skill" +msgstr "No value (Reset)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_publish" +msgstr "Publish" + +#, fuzzy +msgid "cont_skill_publish_auto" +msgstr "Automatic" + +#, fuzzy +msgid "cont_skill_publish_auto_info" +msgstr "Competence assignments for members are immediately visible for members." + +#, fuzzy +msgid "cont_skill_publish_manual" +msgstr "Manual" + +#, fuzzy +msgid "cont_skill_publish_manual_info" +msgstr "Competence assignments for members must be published before they become visible for members." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +#, fuzzy +msgid "cont_tile_view" +msgstr "Tiles" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_de.po b/components/ILIAS/Container/lang/cont_de.po new file mode 100644 index 000000000000..51baa6b060a2 --- /dev/null +++ b/components/ILIAS/Container/lang/cont_de.po @@ -0,0 +1,249 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cont\n" + +msgid "cont_add_global_profile" +msgstr "Globales Profil hinzufügen" + +msgid "cont_add_local_profile" +msgstr "Lokales Profil hinzufügen" + +msgid "cont_add_skill" +msgstr "Kompetenz hinzufügen" + +msgid "cont_assign_competence" +msgstr "Mitgliedern Kompetenzen zuweisen" + +msgid "cont_assign_skills" +msgstr "Kompetenzen zuweisen" + +msgid "cont_block_limit" +msgstr "Einträge per Block begrenzen" + +msgid "cont_block_limit_info" +msgstr "Falls ein Block mehr Einträge beinhaltet, erscheint ein Aktionsknopf \"Mehr anzeigen\"." + +msgid "cont_cont_skills" +msgstr "Kompetenzen der Mitglieder" + +msgid "cont_deassign_competence" +msgstr "Kompetenzen zurücksetzen" + +msgid "cont_filter" +msgstr "Filter" + +msgid "cont_filter_field" +msgstr "Feld" + +msgid "cont_filter_fields" +msgstr "Filterfelder" + +msgid "cont_filter_record" +msgstr "Datensatz" + +msgid "cont_found_objects" +msgstr "Gefundene Objekte" + +msgid "cont_item_list" +msgstr "Liste" + +msgid "cont_item_list_info" +msgstr "Untergeordnete Objekte in einer Liste anzeigen." + +msgid "cont_list_presentation" +msgstr "Präsentationsansicht für Inhalte" + +msgid "cont_mem_skills" +msgstr "Kompetenzen" + +msgid "cont_news_edited" +msgstr "Bearbeitet" + +msgid "cont_news_settings" +msgstr "Neuigkeiten" + +msgid "cont_news_timeline" +msgstr "Timeline" + +msgid "cont_news_timeline_auto_entries" +msgstr "Automatisch erstellte Neuigkeiten" + +msgid "cont_news_timeline_auto_entries_info" +msgstr "Alle automatisch erstellten Neuigkeiten werden mit angezeigt, z.B. Forenbeiträge, neue Dateien etc." + +msgid "cont_news_timeline_info" +msgstr "Aktiviert den Reiter \"Timeline\" für Neuigkeiten" + +msgid "cont_news_timeline_landing_page" +msgstr "Startseite" + +msgid "cont_news_timeline_landing_page_info" +msgstr "Timeline als Startseite" + +msgid "cont_news_timeline_tab" +msgstr "Timeline" + +msgid "cont_no_title" +msgstr "Leerer Titel" + +msgid "cont_only_crs_grp_fold_download" +msgstr "Es können nur Dateien, Kurse, Gruppen oder Ordner heruntergeladen werden." + +msgid "cont_page_type_cont" +msgstr "Magazinseite (Kurs, Gruppe, Kategorie, ...)" + +msgid "cont_page_type_cstr" +msgstr "Startseite lernzielorientierter Kurs" + +msgid "cont_path" +msgstr "Pfad" + +msgid "cont_publish_assignment" +msgstr "Zuweisungen veröffentlichen" + +msgid "cont_published" +msgstr "Veröffentlichung" + +msgid "cont_really_deassign_skills" +msgstr "Wollen Sie wirklich alle Kompetenzzuweisungen des Benutzers zurücksetzen?" + +msgid "cont_really_remove_skill_from_course" +msgstr "Sollen die Kompetenzen wirklich aus der Liste entfernt werden?" + +msgid "cont_select_fields" +msgstr "Felder auswählen" + +msgid "cont_show_more" +msgstr "Mehr anzeigen" + +msgid "cont_skill" +msgstr "Kompetenz" + +msgid "cont_skill_ass_profiles" +msgstr "Profile der Mitglieder" + +msgid "cont_skill_assigned_comp" +msgstr "Kompetenzauswahl" + +msgid "cont_skill_assigned_profiles" +msgstr "Profilauswahl" + +msgid "cont_skill_deletion_not_possible" +msgstr "Das Löschen von globalen Kompetenzprofilen ist nicht möglich. Bitte wählen Sie ausschließlich lokale Kompetenzprofile aus." + +msgid "cont_skill_do_not_set" +msgstr "Nicht setzen" + +msgid "cont_skill_members" +msgstr "Mitglieder" + +msgid "cont_skill_no_profile_selected" +msgstr "Bitte wählen Sie ein Profil aus." + +msgid "cont_skill_no_skill" +msgstr "Kein Wert (zurücksetzen)" + +msgid "cont_skill_no_skills_selected" +msgstr "Es wurden noch keine Kompetenzen ausgewählt. Bitte fügen Sie zunächst mindestens eine Kompetenz hinzu unter \"Kompetenzauswahl\"." + +msgid "cont_skill_profile" +msgstr "Profil" + +msgid "cont_skill_profiles" +msgstr "Kompetenzprofile" + +msgid "cont_skill_publish" +msgstr "Veröffentlichung" + +msgid "cont_skill_publish_auto" +msgstr "Automatisch" + +msgid "cont_skill_publish_auto_info" +msgstr "Zuweisungen von Kompetenzstufen zu Mitgliedern werden für diese sofort sichtbar." + +msgid "cont_skill_publish_manual" +msgstr "Manuell" + +msgid "cont_skill_publish_manual_info" +msgstr "Zuweisungen von Kompetenzstufen zu Mitgliedern werden für diese erst sichtbar, wenn diese veröffentlicht werden." + +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Soll das Profil wirklich gelöscht werden?" + +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Sollen die Profile wirklich gelöscht werden?" + +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Soll das Profil wirklich aus der Liste entfernt werden?" + +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Sollen die Profile wirklich aus der Liste entfernt werden?" + +msgid "cont_skill_records" +msgstr "Kompetenzeinträge" + +msgid "cont_skill_removal_not_possible" +msgstr "Das Entfernen von lokalen Kompetenzprofilen ist nicht möglich. Bitte wählen Sie ausschließlich globale Kompetenzprofile aus." + +msgid "cont_std_filter_title_1" +msgstr "Titel" + +msgid "cont_std_filter_title_2" +msgstr "Beschreibung" + +msgid "cont_std_filter_title_3" +msgstr "Titel/Beschreibung" + +msgid "cont_std_filter_title_4" +msgstr "Schlagwort" + +msgid "cont_std_filter_title_5" +msgstr "Autor" + +msgid "cont_std_filter_title_6" +msgstr "Lizenz" + +msgid "cont_std_filter_title_7" +msgstr "Kontaktperson" + +msgid "cont_std_filter_title_8" +msgstr "Objekttyp" + +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +msgid "cont_std_record_title" +msgstr "Standard" + +msgid "cont_tile_size" +msgstr "Kachelgröße" + +msgid "cont_tile_size_0" +msgstr "normal (bis zu vier Kacheln in einer Zeile)" + +msgid "cont_tile_size_1" +msgstr "klein (bis zu sechs Kacheln in einer Zeile)" + +msgid "cont_tile_size_2" +msgstr "groß (bis zu drei Kacheln in einer Zeile)" + +msgid "cont_tile_size_3" +msgstr "sehr groß (bis zu zwei Kacheln in einer Zeile)" + +msgid "cont_tile_size_4" +msgstr "volle Breite (eine Kachel in einer Zeile)" + +msgid "cont_tile_view" +msgstr "Kacheln" + +msgid "cont_tile_view_info" +msgstr "Untergeordnete Objekte als Kacheln anzeigen. Bilder für diese Kacheln können in den Einstellungen jedes einzelnen Objekts hochgeladen werden." + +msgid "cont_trash_general_usage" +msgstr "Um größere Mengen alter, gelöschter Objekte aus dem System zu entfernen, ist es empfehlenswert zunächst die Nicht-Container (etwa Dateien, Glossare, Tests, ..) und so alle Objekte aus den Container-Objekten (Kategorien, Kurse, Gruppen, Lernsequenzen,..) zu entfernen. Die Filter \"Typ\" und \"Gelöscht am\" unterstützen den Vorgang. Abschließend löschen Sie dann die Container." diff --git a/components/ILIAS/Container/lang/cont_el.po b/components/ILIAS/Container/lang/cont_el.po new file mode 100644 index 000000000000..67df97319b11 --- /dev/null +++ b/components/ILIAS/Container/lang/cont_el.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +#, fuzzy +msgid "cont_add_skill" +msgstr "Add Competence" + +#, fuzzy +msgid "cont_assign_competence" +msgstr "Assign Competences to Members" + +#, fuzzy +msgid "cont_assign_skills" +msgstr "Assign Competences" + +#, fuzzy +msgid "cont_block_limit" +msgstr "Limit Items per Block" + +#, fuzzy +msgid "cont_block_limit_info" +msgstr "If a block contains more items, a \"Show more\" button will appear." + +#, fuzzy +msgid "cont_cont_skills" +msgstr "Assigned Competences of Members" + +#, fuzzy +msgid "cont_deassign_competence" +msgstr "Deassign Competences" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +#, fuzzy +msgid "cont_item_list" +msgstr "List" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +#, fuzzy +msgid "cont_list_presentation" +msgstr "Item Presentation" + +#, fuzzy +msgid "cont_mem_skills" +msgstr "Competences" + +#, fuzzy +msgid "cont_news_edited" +msgstr "Bearbeitet" + +#, fuzzy +msgid "cont_news_settings" +msgstr "News Settings" + +#, fuzzy +msgid "cont_news_timeline" +msgstr "News Timeline" + +#, fuzzy +msgid "cont_news_timeline_auto_entries" +msgstr "Include Automatic Entries" + +#, fuzzy +msgid "cont_news_timeline_auto_entries_info" +msgstr "Include all news that are created automatically, e.g. forum posts, new files, etc." + +#, fuzzy +msgid "cont_news_timeline_info" +msgstr "Activates News Timeline Tab" + +#, fuzzy +msgid "cont_news_timeline_landing_page" +msgstr "Landing Page" + +#, fuzzy +msgid "cont_news_timeline_landing_page_info" +msgstr "Timeline page will be the landing page." + +#, fuzzy +msgid "cont_news_timeline_tab" +msgstr "Timeline" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +#, fuzzy +msgid "cont_path" +msgstr "Path" + +#, fuzzy +msgid "cont_publish_assignment" +msgstr "Publish Assignments" + +#, fuzzy +msgid "cont_published" +msgstr "Published" + +#, fuzzy +msgid "cont_really_deassign_skills" +msgstr "Do you really want to deassign all competences from the users?" + +#, fuzzy +msgid "cont_really_remove_skill_from_course" +msgstr "Do you really want to remove these competences from the list?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +#, fuzzy +msgid "cont_show_more" +msgstr "Show More" + +#, fuzzy +msgid "cont_skill" +msgstr "Competence" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_assigned_comp" +msgstr "Competence Selection" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +#, fuzzy +msgid "cont_skill_do_not_set" +msgstr "Do not set" + +#, fuzzy +msgid "cont_skill_members" +msgstr "Members" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +#, fuzzy +msgid "cont_skill_no_skill" +msgstr "No value (Reset)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_publish" +msgstr "Publish" + +#, fuzzy +msgid "cont_skill_publish_auto" +msgstr "Automatic" + +#, fuzzy +msgid "cont_skill_publish_auto_info" +msgstr "Competence assignments for members are immediately visible for members." + +#, fuzzy +msgid "cont_skill_publish_manual" +msgstr "Manual" + +#, fuzzy +msgid "cont_skill_publish_manual_info" +msgstr "Competence assignments for members must be published before they become visible for members." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +#, fuzzy +msgid "cont_tile_view" +msgstr "Tiles" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_en.po b/components/ILIAS/Container/lang/cont_en.po new file mode 100644 index 000000000000..37be6fcecf4f --- /dev/null +++ b/components/ILIAS/Container/lang/cont_en.po @@ -0,0 +1,249 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cont\n" + +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +msgid "cont_add_skill" +msgstr "Add Competence" + +msgid "cont_assign_competence" +msgstr "Assign Competences to Members" + +msgid "cont_assign_skills" +msgstr "Assign Competences" + +msgid "cont_block_limit" +msgstr "Limit Objects per Block" + +msgid "cont_block_limit_info" +msgstr "If a block contains more objects than the number set here, a \"Show More\" button will appear." + +msgid "cont_cont_skills" +msgstr "Assigned Competences of Members" + +msgid "cont_deassign_competence" +msgstr "Deassign Competences" + +msgid "cont_filter" +msgstr "Filter" + +msgid "cont_filter_field" +msgstr "Field" + +msgid "cont_filter_fields" +msgstr "Filter Fields" + +msgid "cont_filter_record" +msgstr "Record" + +msgid "cont_found_objects" +msgstr "Found Objects" + +msgid "cont_item_list" +msgstr "List" + +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +msgid "cont_list_presentation" +msgstr "Content Display Options" + +msgid "cont_mem_skills" +msgstr "Competences" + +msgid "cont_news_edited" +msgstr "Edited" + +msgid "cont_news_settings" +msgstr "News Settings" + +msgid "cont_news_timeline" +msgstr "News Timeline" + +msgid "cont_news_timeline_auto_entries" +msgstr "Include Automatic Entries" + +msgid "cont_news_timeline_auto_entries_info" +msgstr "Include all news that are created automatically, e.g. forum posts, new files, etc." + +msgid "cont_news_timeline_info" +msgstr "Activates News Timeline Tab" + +msgid "cont_news_timeline_landing_page" +msgstr "Landing Page" + +msgid "cont_news_timeline_landing_page_info" +msgstr "Timeline page will be the landing page." + +msgid "cont_news_timeline_tab" +msgstr "Timeline" + +msgid "cont_no_title" +msgstr "Empty Title" + +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +msgid "cont_path" +msgstr "Path" + +msgid "cont_publish_assignment" +msgstr "Publish Assignments" + +msgid "cont_published" +msgstr "Published" + +msgid "cont_really_deassign_skills" +msgstr "Do you really want to deassign all competences from the users?" + +msgid "cont_really_remove_skill_from_course" +msgstr "Do you really want to remove these competences from the list?" + +msgid "cont_select_fields" +msgstr "Select Fields" + +msgid "cont_show_more" +msgstr "Show More" + +msgid "cont_skill" +msgstr "Competence" + +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +msgid "cont_skill_assigned_comp" +msgstr "Competence Selection" + +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +msgid "cont_skill_do_not_set" +msgstr "Do not set" + +msgid "cont_skill_members" +msgstr "Members" + +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +msgid "cont_skill_no_skill" +msgstr "No value (Reset)" + +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +msgid "cont_skill_profile" +msgstr "Profile" + +msgid "cont_skill_profiles" +msgstr "Competence Profiles" + +msgid "cont_skill_publish" +msgstr "Publish" + +msgid "cont_skill_publish_auto" +msgstr "Automatic" + +msgid "cont_skill_publish_auto_info" +msgstr "Competence assignments for members are immediately visible for members." + +msgid "cont_skill_publish_manual" +msgstr "Manual" + +msgid "cont_skill_publish_manual_info" +msgstr "Competence assignments for members must be published before they become visible for members." + +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +msgid "cont_skill_records" +msgstr "Competence Records" + +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +msgid "cont_std_filter_title_1" +msgstr "Title" + +msgid "cont_std_filter_title_2" +msgstr "Description" + +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +msgid "cont_std_filter_title_5" +msgstr "Author" + +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +msgid "cont_std_record_title" +msgstr "Standard" + +msgid "cont_tile_size" +msgstr "Tile Size" + +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +msgid "cont_tile_view" +msgstr "Tiles" + +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_es.po b/components/ILIAS/Container/lang/cont_es.po new file mode 100644 index 000000000000..b5823f4a6fe5 --- /dev/null +++ b/components/ILIAS/Container/lang/cont_es.po @@ -0,0 +1,249 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: cont\n" + +msgid "cont_add_global_profile" +msgstr "Añadir perfil global" + +msgid "cont_add_local_profile" +msgstr "Añadir perfil local" + +msgid "cont_add_skill" +msgstr "Añadir competencia" + +msgid "cont_assign_competence" +msgstr "Asignar competencias a los miembros" + +msgid "cont_assign_skills" +msgstr "Asignar competencias" + +msgid "cont_block_limit" +msgstr "Limitar objetos por bloque" + +msgid "cont_block_limit_info" +msgstr "Si un bloque contiene más objetos que el número establecido aquí, aparecerá un botón \"Mostrar más\"." + +msgid "cont_cont_skills" +msgstr "Competencias asignadas de los miembros" + +msgid "cont_deassign_competence" +msgstr "Desasignar competencias" + +msgid "cont_filter" +msgstr "Filtro" + +msgid "cont_filter_field" +msgstr "Campo" + +msgid "cont_filter_fields" +msgstr "Campos de filtrado" + +msgid "cont_filter_record" +msgstr "Registro" + +msgid "cont_found_objects" +msgstr "Objetos encontrados" + +msgid "cont_item_list" +msgstr "Lista" + +msgid "cont_item_list_info" +msgstr "Los objetos situados dentro de este contenedor se muestran en forma de lista." + +msgid "cont_list_presentation" +msgstr "Opciones de visualización de contenido" + +msgid "cont_mem_skills" +msgstr "Competencias" + +msgid "cont_news_edited" +msgstr "Editado" + +msgid "cont_news_settings" +msgstr "Configuración de noticias" + +msgid "cont_news_timeline" +msgstr "Cronología de noticias" + +msgid "cont_news_timeline_auto_entries" +msgstr "Incluir entradas automáticas" + +msgid "cont_news_timeline_auto_entries_info" +msgstr "Incluir todas las noticias que se crean automáticamente, p. ej., mensajes del foro, archivos nuevos, etc." + +msgid "cont_news_timeline_info" +msgstr "Activa la pestaña de Cronología de noticias" + +msgid "cont_news_timeline_landing_page" +msgstr "Página de inicio" + +msgid "cont_news_timeline_landing_page_info" +msgstr "La página de la línea de tiempo será la página de inicio." + +msgid "cont_news_timeline_tab" +msgstr "Línea de tiempo" + +msgid "cont_no_title" +msgstr "Título vacío" + +msgid "cont_only_crs_grp_fold_download" +msgstr "Solo se pueden descargar cursos, grupos, carpetas o archivos." + +msgid "cont_page_type_cont" +msgstr "Página del repositorio (Curso, Grupo, ...)" + +msgid "cont_page_type_cstr" +msgstr "Página de inicio del curso (Vista de objetivos de aprendizaje)" + +msgid "cont_path" +msgstr "Ruta" + +msgid "cont_publish_assignment" +msgstr "Publicar tareas" + +msgid "cont_published" +msgstr "Publicado" + +msgid "cont_really_deassign_skills" +msgstr "¿Realmente desea desasignar todas las competencias de los usuarios?" + +msgid "cont_really_remove_skill_from_course" +msgstr "¿Realmente desea eliminar estas competencias de la lista?" + +msgid "cont_select_fields" +msgstr "Seleccionar campos" + +msgid "cont_show_more" +msgstr "Mostrar más" + +msgid "cont_skill" +msgstr "Competencia" + +msgid "cont_skill_ass_profiles" +msgstr "Perfiles asignados de los miembros" + +msgid "cont_skill_assigned_comp" +msgstr "Selección de competencias" + +msgid "cont_skill_assigned_profiles" +msgstr "Selección de perfiles" + +msgid "cont_skill_deletion_not_possible" +msgstr "La eliminación de perfiles de competencias globales no es posible. Por favor, seleccione solo perfiles de competencias locales." + +msgid "cont_skill_do_not_set" +msgstr "No establecer" + +msgid "cont_skill_members" +msgstr "Miembros" + +msgid "cont_skill_no_profile_selected" +msgstr "Por favor, seleccione un perfil." + +msgid "cont_skill_no_skill" +msgstr "Sin valor (Restablecer)" + +msgid "cont_skill_no_skills_selected" +msgstr "Aún no se han seleccionado competencias. Por favor, añada primero al menos una competencia en \"Selección de competencias\"." + +msgid "cont_skill_profile" +msgstr "Perfil" + +msgid "cont_skill_profiles" +msgstr "Perfiles de competencias" + +msgid "cont_skill_publish" +msgstr "Publicar" + +msgid "cont_skill_publish_auto" +msgstr "Automático" + +msgid "cont_skill_publish_auto_info" +msgstr "Las asignaciones de competencias para los miembros son visibles inmediatamente para ellos." + +msgid "cont_skill_publish_manual" +msgstr "Manual" + +msgid "cont_skill_publish_manual_info" +msgstr "Las asignaciones de competencias para los miembros deben publicarse antes de que sean visibles para ellos." + +msgid "cont_skill_really_delete_profile_from_list" +msgstr "¿Realmente desea eliminar este perfil?" + +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "¿Realmente desea eliminar estos perfiles?" + +msgid "cont_skill_really_remove_profile_from_list" +msgstr "¿Realmente desea quitar este perfil de la lista?" + +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "¿Realmente desea quitar estos perfiles de la lista?" + +msgid "cont_skill_records" +msgstr "Registros de competencias" + +msgid "cont_skill_removal_not_possible" +msgstr "No es posible eliminar perfiles de competencias locales. Por favor, seleccione solo perfiles de competencias globales." + +msgid "cont_std_filter_title_1" +msgstr "Título" + +msgid "cont_std_filter_title_2" +msgstr "Descripción" + +msgid "cont_std_filter_title_3" +msgstr "Título/Descripción" + +msgid "cont_std_filter_title_4" +msgstr "Palabra clave" + +msgid "cont_std_filter_title_5" +msgstr "Autor" + +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +msgid "cont_std_filter_title_7" +msgstr "Soporte Tutorial" + +msgid "cont_std_filter_title_8" +msgstr "Tipo de objeto" + +msgid "cont_std_filter_title_9" +msgstr "En línea/Fuera de línea" + +msgid "cont_std_record_title" +msgstr "Estándar" + +msgid "cont_tile_size" +msgstr "Tamaño del mosaico" + +msgid "cont_tile_size_0" +msgstr "normal (hasta cuatro mosaicos en una fila)" + +msgid "cont_tile_size_1" +msgstr "pequeño (hasta seis mosaicos en una fila)" + +msgid "cont_tile_size_2" +msgstr "grande (hasta tres mosaicos en una fila)" + +msgid "cont_tile_size_3" +msgstr "extra grande (hasta dos mosaicos en una fila)" + +msgid "cont_tile_size_4" +msgstr "completo (un mosaico en una fila)" + +msgid "cont_tile_view" +msgstr "Mosaicos" + +msgid "cont_tile_view_info" +msgstr "Los objetos ubicados dentro de este contenedor se muestran en forma de mosaicos estilo miniatura. Las imágenes para estos mosaicos pueden subirse en la configuración de cada objeto individual." + +msgid "cont_trash_general_usage" +msgstr "Si desea eliminar una gran cantidad de objetos antiguos y eliminados del sistema, es muy recomendable comenzar con objetos que no sean contenedores (es decir, archivos, glosarios, pruebas,...) y así eliminar todos los objetos de los contenedores (categorías, cursos, grupos, secuencias de aprendizaje,...). El uso de los filtros \"Tipo\" y \"Eliminado el\" ayuda en este proceso. Finalmente, elimine los contenedores." diff --git a/components/ILIAS/Container/lang/cont_et.po b/components/ILIAS/Container/lang/cont_et.po new file mode 100644 index 000000000000..8d80af38605f --- /dev/null +++ b/components/ILIAS/Container/lang/cont_et.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +#, fuzzy +msgid "cont_add_skill" +msgstr "Add Competence" + +#, fuzzy +msgid "cont_assign_competence" +msgstr "Assign Competences to Members" + +#, fuzzy +msgid "cont_assign_skills" +msgstr "Assign Competences" + +#, fuzzy +msgid "cont_block_limit" +msgstr "Limit Items per Block" + +#, fuzzy +msgid "cont_block_limit_info" +msgstr "If a block contains more items, a \"Show more\" button will appear." + +#, fuzzy +msgid "cont_cont_skills" +msgstr "Assigned Competences of Members" + +#, fuzzy +msgid "cont_deassign_competence" +msgstr "Deassign Competences" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +#, fuzzy +msgid "cont_item_list" +msgstr "List" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +#, fuzzy +msgid "cont_list_presentation" +msgstr "Item Presentation" + +#, fuzzy +msgid "cont_mem_skills" +msgstr "Competences" + +#, fuzzy +msgid "cont_news_edited" +msgstr "Bearbeitet" + +#, fuzzy +msgid "cont_news_settings" +msgstr "News Settings" + +#, fuzzy +msgid "cont_news_timeline" +msgstr "News Timeline" + +#, fuzzy +msgid "cont_news_timeline_auto_entries" +msgstr "Include Automatic Entries" + +#, fuzzy +msgid "cont_news_timeline_auto_entries_info" +msgstr "Include all news that are created automatically, e.g. forum posts, new files, etc." + +#, fuzzy +msgid "cont_news_timeline_info" +msgstr "Activates News Timeline Tab" + +#, fuzzy +msgid "cont_news_timeline_landing_page" +msgstr "Landing Page" + +#, fuzzy +msgid "cont_news_timeline_landing_page_info" +msgstr "Timeline page will be the landing page." + +#, fuzzy +msgid "cont_news_timeline_tab" +msgstr "Timeline" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +#, fuzzy +msgid "cont_path" +msgstr "Path" + +#, fuzzy +msgid "cont_publish_assignment" +msgstr "Publish Assignments" + +#, fuzzy +msgid "cont_published" +msgstr "Published" + +#, fuzzy +msgid "cont_really_deassign_skills" +msgstr "Do you really want to deassign all competences from the users?" + +#, fuzzy +msgid "cont_really_remove_skill_from_course" +msgstr "Do you really want to remove these competences from the list?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +#, fuzzy +msgid "cont_show_more" +msgstr "Show More" + +#, fuzzy +msgid "cont_skill" +msgstr "Competence" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_assigned_comp" +msgstr "Competence Selection" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +#, fuzzy +msgid "cont_skill_do_not_set" +msgstr "Do not set" + +#, fuzzy +msgid "cont_skill_members" +msgstr "Members" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +#, fuzzy +msgid "cont_skill_no_skill" +msgstr "No value (Reset)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_publish" +msgstr "Publish" + +#, fuzzy +msgid "cont_skill_publish_auto" +msgstr "Automatic" + +#, fuzzy +msgid "cont_skill_publish_auto_info" +msgstr "Competence assignments for members are immediately visible for members." + +#, fuzzy +msgid "cont_skill_publish_manual" +msgstr "Manual" + +#, fuzzy +msgid "cont_skill_publish_manual_info" +msgstr "Competence assignments for members must be published before they become visible for members." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +#, fuzzy +msgid "cont_tile_view" +msgstr "Tiles" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_fa.po b/components/ILIAS/Container/lang/cont_fa.po new file mode 100644 index 000000000000..ff3082f0bd94 --- /dev/null +++ b/components/ILIAS/Container/lang/cont_fa.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +#, fuzzy +msgid "cont_add_skill" +msgstr "Add Competence" + +#, fuzzy +msgid "cont_assign_competence" +msgstr "Assign Competences to Members" + +#, fuzzy +msgid "cont_assign_skills" +msgstr "Assign Competences" + +#, fuzzy +msgid "cont_block_limit" +msgstr "Limit Items per Block" + +#, fuzzy +msgid "cont_block_limit_info" +msgstr "If a block contains more items, a \"Show more\" button will appear." + +#, fuzzy +msgid "cont_cont_skills" +msgstr "Assigned Competences of Members" + +#, fuzzy +msgid "cont_deassign_competence" +msgstr "Deassign Competences" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +#, fuzzy +msgid "cont_item_list" +msgstr "List" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +#, fuzzy +msgid "cont_list_presentation" +msgstr "Item Presentation" + +#, fuzzy +msgid "cont_mem_skills" +msgstr "Competences" + +#, fuzzy +msgid "cont_news_edited" +msgstr "Bearbeitet" + +#, fuzzy +msgid "cont_news_settings" +msgstr "News Settings" + +#, fuzzy +msgid "cont_news_timeline" +msgstr "News Timeline" + +#, fuzzy +msgid "cont_news_timeline_auto_entries" +msgstr "Include Automatic Entries" + +#, fuzzy +msgid "cont_news_timeline_auto_entries_info" +msgstr "Include all news that are created automatically, e.g. forum posts, new files, etc." + +#, fuzzy +msgid "cont_news_timeline_info" +msgstr "Activates News Timeline Tab" + +#, fuzzy +msgid "cont_news_timeline_landing_page" +msgstr "Landing Page" + +#, fuzzy +msgid "cont_news_timeline_landing_page_info" +msgstr "Timeline page will be the landing page." + +#, fuzzy +msgid "cont_news_timeline_tab" +msgstr "Timeline" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +#, fuzzy +msgid "cont_path" +msgstr "Path" + +#, fuzzy +msgid "cont_publish_assignment" +msgstr "Publish Assignments" + +#, fuzzy +msgid "cont_published" +msgstr "Published" + +#, fuzzy +msgid "cont_really_deassign_skills" +msgstr "Do you really want to deassign all competences from the users?" + +#, fuzzy +msgid "cont_really_remove_skill_from_course" +msgstr "Do you really want to remove these competences from the list?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +#, fuzzy +msgid "cont_show_more" +msgstr "Show More" + +#, fuzzy +msgid "cont_skill" +msgstr "Competence" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_assigned_comp" +msgstr "Competence Selection" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +#, fuzzy +msgid "cont_skill_do_not_set" +msgstr "Do not set" + +#, fuzzy +msgid "cont_skill_members" +msgstr "Members" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +#, fuzzy +msgid "cont_skill_no_skill" +msgstr "No value (Reset)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_publish" +msgstr "Publish" + +#, fuzzy +msgid "cont_skill_publish_auto" +msgstr "Automatic" + +#, fuzzy +msgid "cont_skill_publish_auto_info" +msgstr "Competence assignments for members are immediately visible for members." + +#, fuzzy +msgid "cont_skill_publish_manual" +msgstr "Manual" + +#, fuzzy +msgid "cont_skill_publish_manual_info" +msgstr "Competence assignments for members must be published before they become visible for members." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +#, fuzzy +msgid "cont_tile_view" +msgstr "Tiles" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_fr.po b/components/ILIAS/Container/lang/cont_fr.po new file mode 100644 index 000000000000..09a515897115 --- /dev/null +++ b/components/ILIAS/Container/lang/cont_fr.po @@ -0,0 +1,260 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: cont\n" + +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +msgid "cont_add_skill" +msgstr "Ajouter une compétence" + +msgid "cont_assign_competence" +msgstr "Assigner les compétences aux membres" + +msgid "cont_assign_skills" +msgstr "Assigner les compétences" + +msgid "cont_block_limit" +msgstr "Limit Items per Block" + +msgid "cont_block_limit_info" +msgstr "If a block contains more items, a \"Show more\" button will appear." + +msgid "cont_cont_skills" +msgstr "Compétences assignées des membres" + +msgid "cont_deassign_competence" +msgstr "Annuler les assignations des compétences" + +msgid "cont_filter" +msgstr "Filter" + +msgid "cont_filter_field" +msgstr "Field" + +msgid "cont_filter_fields" +msgstr "Filter Fields" + +msgid "cont_filter_record" +msgstr "Record" + +msgid "cont_found_objects" +msgstr "Found Objects" + +msgid "cont_item_list" +msgstr "List" + +msgid "cont_item_list_info" +msgstr "Display content objects in a list." + +msgid "cont_list_presentation" +msgstr "Présentation de l'objet" + +msgid "cont_mem_skills" +msgstr "Compétences" + +msgid "cont_news_edited" +msgstr "Traitées" + +msgid "cont_news_settings" +msgstr "Paramètres des nouvelles" + +msgid "cont_news_timeline" +msgstr "Chronologie des nouvelles" + +msgid "cont_news_timeline_auto_entries" +msgstr "Inclure les entrées automatiques" + +msgid "cont_news_timeline_auto_entries_info" +msgstr "Inclure toutes les nouvelles qui sont créées automatiquement, par ex. les publications de forum, les nouveaux fichiers, etc." + +msgid "cont_news_timeline_info" +msgstr "Active l’onglet de chronologie des nouvelles" + +msgid "cont_news_timeline_landing_page" +msgstr "Page d’accueil" + +msgid "cont_news_timeline_landing_page_info" +msgstr "La page de chronologie sera la page d’accueil." + +msgid "cont_news_timeline_tab" +msgstr "Chronologie" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +msgid "cont_page_type_cont" +msgstr "Page de catalogue (cours, group, ...)" + +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +msgid "cont_path" +msgstr "Chemin" + +msgid "cont_publish_assignment" +msgstr "Publier les affectations" + +msgid "cont_published" +msgstr "Publiées" + +msgid "cont_really_deassign_skills" +msgstr "Voulez-vous vraiment annuler l’affectation de toutes les compétences des utilisateurs?" + +msgid "cont_really_remove_skill_from_course" +msgstr "Voulez-vous vraiment retirer ces compétences de la liste?" + +msgid "cont_select_fields" +msgstr "Select Fields" + +msgid "cont_show_more" +msgstr "Show More" + +msgid "cont_skill" +msgstr "Compétence" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +msgid "cont_skill_assigned_comp" +msgstr "Sélection de compétences" + +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +msgid "cont_skill_do_not_set" +msgstr "Ne pas définir" + +msgid "cont_skill_members" +msgstr "Membres" + +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +msgid "cont_skill_no_skill" +msgstr "Aucune valeur (réinitialiser)" + +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +msgid "cont_skill_profile" +msgstr "Profile" + +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +msgid "cont_skill_publish" +msgstr "Publier" + +msgid "cont_skill_publish_auto" +msgstr "Automatique" + +msgid "cont_skill_publish_auto_info" +msgstr "Les affectations de compétences pour les membres sont immédiatement visibles pour les membres." + +msgid "cont_skill_publish_manual" +msgstr "Manuel" + +msgid "cont_skill_publish_manual_info" +msgstr "Les affectations de compétences pour les membres doivent être publiées avant de devenir visibles pour les membres." + +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +msgid "cont_std_filter_title_1" +msgstr "Titre" + +msgid "cont_std_filter_title_2" +msgstr "Description" + +msgid "cont_std_filter_title_3" +msgstr "Titre/Description" + +msgid "cont_std_filter_title_4" +msgstr "Mot-clé" + +msgid "cont_std_filter_title_5" +msgstr "Auteur" + +msgid "cont_std_filter_title_6" +msgstr "Droit d'auteur" + +msgid "cont_std_filter_title_7" +msgstr "Tutoriel" + +msgid "cont_std_filter_title_8" +msgstr "Type d'objet" + +msgid "cont_std_filter_title_9" +msgstr "En ligne/Hors-ligne" + +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +msgid "cont_tile_view" +msgstr "Tiles" + +msgid "cont_tile_view_info" +msgstr "Display content objects as thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_hr.po b/components/ILIAS/Container/lang/cont_hr.po new file mode 100644 index 000000000000..dafb263c6222 --- /dev/null +++ b/components/ILIAS/Container/lang/cont_hr.po @@ -0,0 +1,293 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +msgid "cont_add_skill" +msgstr "Dodaj kompetenciju" + +msgid "cont_assign_competence" +msgstr "Dodijeli kompetencije članovima" + +msgid "cont_assign_skills" +msgstr "Dodijeli kompetencije" + +msgid "cont_block_limit" +msgstr "Ograniči stavke po bloku" + +msgid "cont_block_limit_info" +msgstr "Ako blok sadrži više stavki, pojavit će se gumb \"Prikaži više\"." + +msgid "cont_cont_skills" +msgstr "Dodijeljene nadležnosti članova" + +msgid "cont_deassign_competence" +msgstr "Ukini dodjelu kompetencija" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +msgid "cont_item_list" +msgstr "Popis" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +msgid "cont_list_presentation" +msgstr "Prezentacija predmeta" + +msgid "cont_mem_skills" +msgstr "Kompetencije" + +msgid "cont_news_edited" +msgstr "Obrađeno" + +msgid "cont_news_settings" +msgstr "Postavke vijesti" + +msgid "cont_news_timeline" +msgstr "Vremenska traka vijesti" + +msgid "cont_news_timeline_auto_entries" +msgstr "Uključi automatske unose" + +msgid "cont_news_timeline_auto_entries_info" +msgstr "Uključi sve vijesti koje se kreiraju automatski, npr. postovi na forumu, nove datoteke itd." + +msgid "cont_news_timeline_info" +msgstr "Aktivira karticu Vremenska traka vijesti" + +msgid "cont_news_timeline_landing_page" +msgstr "Odredišna stranica" + +msgid "cont_news_timeline_landing_page_info" +msgstr "Stranica vremenske trake bit će odredišna stranica." + +msgid "cont_news_timeline_tab" +msgstr "Vremenska traka" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +msgid "cont_path" +msgstr "Staza" + +msgid "cont_publish_assignment" +msgstr "Objavi zadatke" + +msgid "cont_published" +msgstr "Objavljeno" + +msgid "cont_really_deassign_skills" +msgstr "Želite li stvarno ukinuti dodjelu svih kompetencija korisnicima?" + +msgid "cont_really_remove_skill_from_course" +msgstr "Želite li zaista ukloniti ove kompetencije s popisa?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +msgid "cont_show_more" +msgstr "Prikaži više" + +msgid "cont_skill" +msgstr "Kompetencija" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +msgid "cont_skill_assigned_comp" +msgstr "Izbor kompetencija" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +msgid "cont_skill_do_not_set" +msgstr "Ne postavljaj" + +msgid "cont_skill_members" +msgstr "Članovi" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +msgid "cont_skill_no_skill" +msgstr "Nema vrijednosti (resetiraj)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +msgid "cont_skill_publish" +msgstr "Objavi" + +msgid "cont_skill_publish_auto" +msgstr "Automatski" + +msgid "cont_skill_publish_auto_info" +msgstr "Članovima su odmah vidljive dodjele kompetencija." + +msgid "cont_skill_publish_manual" +msgstr "Ručno" + +msgid "cont_skill_publish_manual_info" +msgstr "Dodjele kompetencija članovima moraju se objaviti prije nego što postanu vidljivi za članove." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +msgid "cont_tile_view" +msgstr "Pločice" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_hu.po b/components/ILIAS/Container/lang/cont_hu.po new file mode 100644 index 000000000000..e8b6663be993 --- /dev/null +++ b/components/ILIAS/Container/lang/cont_hu.po @@ -0,0 +1,249 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cont\n" + +msgid "cont_add_global_profile" +msgstr "Globális profil hozzáadása" + +msgid "cont_add_local_profile" +msgstr "Helyi profil hozzáadása" + +msgid "cont_add_skill" +msgstr "Kompetencia hozzáadása" + +msgid "cont_assign_competence" +msgstr "Kompetenciák tagokhoz rendelése" + +msgid "cont_assign_skills" +msgstr "Kompetenciák hozzárendelése" + +msgid "cont_block_limit" +msgstr "Objektumok számának korlátozás blokkonként" + +msgid "cont_block_limit_info" +msgstr "Amennyiben a blokk több objektumot tartalmaz, egy ‘Több megjelenítése’ gomb fog megjelenni." + +msgid "cont_cont_skills" +msgstr "Tagokhoz rendelt kompetenciák" + +msgid "cont_deassign_competence" +msgstr "Kompetenciák hozzárendeléseinek eltávolítása" + +msgid "cont_filter" +msgstr "Szűrés" + +msgid "cont_filter_field" +msgstr "Szűrő" + +msgid "cont_filter_fields" +msgstr "Szűrőmezők" + +msgid "cont_filter_record" +msgstr "Bejegyzések" + +msgid "cont_found_objects" +msgstr "Talált objektumok" + +msgid "cont_item_list" +msgstr "Felsorolás" + +msgid "cont_item_list_info" +msgstr "Ebben a tárolóban lévő objektumok felsorolásban jelennek meg." + +msgid "cont_list_presentation" +msgstr "Tartalom megjelenítési beállításai" + +msgid "cont_mem_skills" +msgstr "Kompetenciák" + +msgid "cont_news_edited" +msgstr "Módosította" + +msgid "cont_news_settings" +msgstr "Hírek beállításai" + +msgid "cont_news_timeline" +msgstr "Hírek idővonala" + +msgid "cont_news_timeline_auto_entries" +msgstr "Automatikus bejegyzések is megjelenjenek" + +msgid "cont_news_timeline_auto_entries_info" +msgstr "Összes automatikusan létrehozott hír is megjelenjen, mint például fórumhozzászólások, fájlok létrehozása." + +msgid "cont_news_timeline_info" +msgstr "Hírek idővonal lapjának bekapcsolása" + +msgid "cont_news_timeline_landing_page" +msgstr "Kezdőoldal" + +msgid "cont_news_timeline_landing_page_info" +msgstr "Az Idővonal lap lesz a kezdőoldal." + +msgid "cont_news_timeline_tab" +msgstr "Idővonal" + +msgid "cont_no_title" +msgstr "Üres cím" + +msgid "cont_only_crs_grp_fold_download" +msgstr "Csak kurzusok, csoportok, mappák vagy fájlok tölthetők le." + +msgid "cont_page_type_cont" +msgstr "Tartalomtár oldal (kurzusok, csoportok, …)" + +msgid "cont_page_type_cstr" +msgstr "Kurzus kezdő oldala (tanulási cél nézet)" + +msgid "cont_path" +msgstr "Útvonal" + +msgid "cont_publish_assignment" +msgstr "Összerendelések közzététele" + +msgid "cont_published" +msgstr "Közzétéve" + +msgid "cont_really_deassign_skills" +msgstr "Biztos, hogy eltávolítja a felhasználóktól a kompetenciákat?" + +msgid "cont_really_remove_skill_from_course" +msgstr "Biztos, hogy eltávolítja ezeket a kompetenciákat a felsorolásból?" + +msgid "cont_select_fields" +msgstr "Válasszon mezőket" + +msgid "cont_show_more" +msgstr "Több megjelenítése" + +msgid "cont_skill" +msgstr "Kompetencia" + +msgid "cont_skill_ass_profiles" +msgstr "Tagokhoz rendelt profilok" + +msgid "cont_skill_assigned_comp" +msgstr "Kompetencia kiválasztása" + +msgid "cont_skill_assigned_profiles" +msgstr "Profil kiválasztása" + +msgid "cont_skill_deletion_not_possible" +msgstr "Globális kompetenciaprofilok törlése nem lehetésges. Csak helyi kompetenciaprofilokat jelöljön ki." + +msgid "cont_skill_do_not_set" +msgstr "Nem állít be" + +msgid "cont_skill_members" +msgstr "Tagok" + +msgid "cont_skill_no_profile_selected" +msgstr "Kérem, válasszon egy profilt." + +msgid "cont_skill_no_skill" +msgstr "Nincs érték (alapértékre állítás)" + +msgid "cont_skill_no_skills_selected" +msgstr "Egy kompetncia sincs még kiválasztva. Legalább egy kompetenciát adjon hozzá a \"Kompetencia kiválasztása\" alatt." + +msgid "cont_skill_profile" +msgstr "Profil" + +msgid "cont_skill_profiles" +msgstr "Tagok profiljai" + +msgid "cont_skill_publish" +msgstr "Közzététel" + +msgid "cont_skill_publish_auto" +msgstr "Automatikus" + +msgid "cont_skill_publish_auto_info" +msgstr "A tagok azonnal láthatják a hozzájuk rendelt kompetenciákat." + +msgid "cont_skill_publish_manual" +msgstr "Kézi" + +msgid "cont_skill_publish_manual_info" +msgstr "A tagok csak publikálás után láthatják a hozzájuk rendelt kompetenciákat." + +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Biztos, hogy törli ezt a profilt?" + +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Biztos, hogy törli ezeket a profilokat?" + +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Biztos, hogy eltávolítja ezt a profilt a felsorolásból?" + +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Biztos, hogy eltávolítja ezeket a profilokat a felsorolásból?" + +msgid "cont_skill_records" +msgstr "Kompetencia-bejegyzések" + +msgid "cont_skill_removal_not_possible" +msgstr "Lokális kompetenciaprofilok eltávolítsa nem lehetséges. Csak globális kompetenciaprofilokat jelöljön ki." + +msgid "cont_std_filter_title_1" +msgstr "Cím" + +msgid "cont_std_filter_title_2" +msgstr "Leírás" + +msgid "cont_std_filter_title_3" +msgstr "Cím/Leírás" + +msgid "cont_std_filter_title_4" +msgstr "Kulcsszó" + +msgid "cont_std_filter_title_5" +msgstr "Szerző" + +msgid "cont_std_filter_title_6" +msgstr "Szerzői jog" + +msgid "cont_std_filter_title_7" +msgstr "Oktatói támogatás" + +msgid "cont_std_filter_title_8" +msgstr "Objektumtípus" + +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +msgid "cont_std_record_title" +msgstr "Standard" + +msgid "cont_tile_size" +msgstr "Csempeméret" + +msgid "cont_tile_size_0" +msgstr "normal (1-4 csempe soronként)" + +msgid "cont_tile_size_1" +msgstr "kicsi (1-6 csempe soronként)" + +msgid "cont_tile_size_2" +msgstr "nagy (1-3 csempe soronként)" + +msgid "cont_tile_size_3" +msgstr "extra nagy (1-2 csempe soronként)" + +msgid "cont_tile_size_4" +msgstr "teljes (1 csempe soronként)" + +msgid "cont_tile_view" +msgstr "Csempék" + +msgid "cont_tile_view_info" +msgstr "Az ebben a tárolóban lévő objektumok megjelenítése mint miniatűrstílusú csempeként. Csempekép minden objektum saját beállításaiban tölthető fel." + +msgid "cont_trash_general_usage" +msgstr "Ha nagy mennyiségű régi, törölt objektumot kíván eltávolítani a rendszerből, akkor erősen tanácsos a nem tároló típusú objektumokkal kezdeni (például fájlok, fogalomtárak, tesztek), azaz célszerű először minden objektumot eltávolítani a tárolókból (kategóriákból, kurzusokból, csoportokból, tanulási sorokból stb. ). A ‘Típus\" és a ‘Törlés helye’ szűrők használata segíti ezt a folyamatot. Végül távolítsa el a tárolókat." diff --git a/components/ILIAS/Container/lang/cont_it.po b/components/ILIAS/Container/lang/cont_it.po new file mode 100644 index 000000000000..42d4bcbcc3ae --- /dev/null +++ b/components/ILIAS/Container/lang/cont_it.po @@ -0,0 +1,263 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: cont\n" + +msgid "cont_add_global_profile" +msgstr "Aggiungi Profilo Globale" + +msgid "cont_add_local_profile" +msgstr "Aggiungi Profilo Locale" + +msgid "cont_add_skill" +msgstr "Aggiungi competenze" + +msgid "cont_assign_competence" +msgstr "Assegna competenze ai membri" + +msgid "cont_assign_skills" +msgstr "Assegna competenze" + +msgid "cont_block_limit" +msgstr "Limita gli oggetti per Blocco" + +msgid "cont_block_limit_info" +msgstr "Se un blocco contiene più elementi, verrà visualizzato il pulsante \"Mostra altro\"." + +msgid "cont_cont_skills" +msgstr "Competenze assegnate dei membri" + +msgid "cont_deassign_competence" +msgstr "Annulla assegnazioni" + +msgid "cont_filter" +msgstr "Filtro" + +msgid "cont_filter_field" +msgstr "Campo" + +msgid "cont_filter_fields" +msgstr "Campi di filtro" + +msgid "cont_filter_record" +msgstr "Record" + +msgid "cont_found_objects" +msgstr "Oggetti trovati" + +msgid "cont_item_list" +msgstr "Lista" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Display content objects in a list." + +msgid "cont_list_presentation" +msgstr "Vista presentazione per contenuti" + +msgid "cont_mem_skills" +msgstr "Competenze" + +msgid "cont_news_edited" +msgstr "Modificato" + +msgid "cont_news_settings" +msgstr "Impostazioni delle notizie" + +msgid "cont_news_timeline" +msgstr "Calendario notizie" + +msgid "cont_news_timeline_auto_entries" +msgstr "Includi voci automatiche" + +msgid "cont_news_timeline_auto_entries_info" +msgstr "Includi tutte le notizie che vengono create automaticamente, ad esempio post del forum, nuovi file, ecc." + +msgid "cont_news_timeline_info" +msgstr "Attiva scheda calendario notizie" + +msgid "cont_news_timeline_landing_page" +msgstr "Pagina di destinazione" + +msgid "cont_news_timeline_landing_page_info" +msgstr "La pagina del calendario sarà la pagina di destinazione." + +msgid "cont_news_timeline_tab" +msgstr "Calendario" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +msgid "cont_page_type_cont" +msgstr "Pagina Archivio (Corsi, Gruppi, ...)" + +msgid "cont_page_type_cstr" +msgstr "Pagina iniziale del corso (visualizzazione degli obiettivi di apprendimento)" + +msgid "cont_path" +msgstr "Percorso" + +msgid "cont_publish_assignment" +msgstr "Pubblica assegnazioni" + +msgid "cont_published" +msgstr "Pubblicato" + +msgid "cont_really_deassign_skills" +msgstr "Vuoi davvero annullare le competenze da questi utenti?" + +msgid "cont_really_remove_skill_from_course" +msgstr "Vuoi davvero rimuovere queste competenze dalla lista?" + +msgid "cont_select_fields" +msgstr "Seleziona campi" + +msgid "cont_show_more" +msgstr "Mostra altro" + +msgid "cont_skill" +msgstr "Competenze" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +msgid "cont_skill_assigned_comp" +msgstr "Selezione competenze" + +msgid "cont_skill_assigned_profiles" +msgstr "Selezione del profilo" + +msgid "cont_skill_deletion_not_possible" +msgstr "Non è possibile eliminare i profili di competenza globale. Seleziona solo profili di competenza locale." + +msgid "cont_skill_do_not_set" +msgstr "Non impostare" + +msgid "cont_skill_members" +msgstr "Membri" + +msgid "cont_skill_no_profile_selected" +msgstr "Selezionare un profilo" + +msgid "cont_skill_no_skill" +msgstr "Nessun valore (Ripristina)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +msgid "cont_skill_profile" +msgstr "Profilo" + +msgid "cont_skill_profiles" +msgstr "Profilo dei membri" + +msgid "cont_skill_publish" +msgstr "Pubblica" + +msgid "cont_skill_publish_auto" +msgstr "Automatico" + +msgid "cont_skill_publish_auto_info" +msgstr "Le assegnazioni di competenze per i membri sono immediatamente visibili per i membri." + +msgid "cont_skill_publish_manual" +msgstr "Manuale" + +msgid "cont_skill_publish_manual_info" +msgstr "Le assegnazioni di competenze per i membri devono essere pubblicate prima che diventino visibili per i membri." + +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Sei sicuro di voler eliminare il profilo?" + +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Sei sicuro di voler eliminare i profili?" + +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Sei sicuro di voler eliminare il profilo dalla lista?" + +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Sei sicuro di voler eliminare i profili dalla lista?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +msgid "cont_skill_removal_not_possible" +msgstr "Non è possibile rimuovere i profili di competenza locale. Seleziona solo profili di competenza globale." + +msgid "cont_std_filter_title_1" +msgstr "Titolo" + +msgid "cont_std_filter_title_2" +msgstr "Descrizione" + +msgid "cont_std_filter_title_3" +msgstr "Titolo/Descrizione" + +msgid "cont_std_filter_title_4" +msgstr "Parola chiave" + +msgid "cont_std_filter_title_5" +msgstr "Autore" + +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +msgid "cont_std_filter_title_7" +msgstr "Supporto Tutorial" + +msgid "cont_std_filter_title_8" +msgstr "Tipo oggetto" + +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles per row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles per row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles per row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles per row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile per row)" + +msgid "cont_tile_view" +msgstr "Mattonelle" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Display content objects as thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_ja.po b/components/ILIAS/Container/lang/cont_ja.po new file mode 100644 index 000000000000..f7bf06b7602c --- /dev/null +++ b/components/ILIAS/Container/lang/cont_ja.po @@ -0,0 +1,249 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: cont\n" + +msgid "cont_add_global_profile" +msgstr "グローバルプロファイルを追加" + +msgid "cont_add_local_profile" +msgstr "ローカルプロファイルを追加" + +msgid "cont_add_skill" +msgstr "能力を追加" + +msgid "cont_assign_competence" +msgstr "メンバーへ能力を割り当てる" + +msgid "cont_assign_skills" +msgstr "能力を割り当てる" + +msgid "cont_block_limit" +msgstr "ブロック当たりのアイテムを制限" + +msgid "cont_block_limit_info" +msgstr "ブロックがさらにアイテムを含む場合は\"詳しく見る\"ボタンが表示されます。" + +msgid "cont_cont_skills" +msgstr "メンバーの能力を割り当てました" + +msgid "cont_deassign_competence" +msgstr "能力を解除" + +msgid "cont_filter" +msgstr "フィルター" + +msgid "cont_filter_field" +msgstr "フィールド" + +msgid "cont_filter_fields" +msgstr "フィルタ-フィールド" + +msgid "cont_filter_record" +msgstr "記録" + +msgid "cont_found_objects" +msgstr "見つかったオブジェクト" + +msgid "cont_item_list" +msgstr "List" + +msgid "cont_item_list_info" +msgstr "リスト内のコンテンツオブジェクトを表示" + +msgid "cont_list_presentation" +msgstr "アイテム表示形式" + +msgid "cont_mem_skills" +msgstr "能力" + +msgid "cont_news_edited" +msgstr "編集済" + +msgid "cont_news_settings" +msgstr "ニュース設定" + +msgid "cont_news_timeline" +msgstr "ニュースタイムライン" + +msgid "cont_news_timeline_auto_entries" +msgstr "自動エントリを含める" + +msgid "cont_news_timeline_auto_entries_info" +msgstr "自動的に生成される掲示板投稿や新規ファイルなどの全てのニュースを含みます。" + +msgid "cont_news_timeline_info" +msgstr "ニュースタイムラインタブを有効にする" + +msgid "cont_news_timeline_landing_page" +msgstr "ランディングページ" + +msgid "cont_news_timeline_landing_page_info" +msgstr "タイムラインページはランディングページになります。" + +msgid "cont_news_timeline_tab" +msgstr "タイムライン" + +msgid "cont_no_title" +msgstr "空のタイトル" + +msgid "cont_only_crs_grp_fold_download" +msgstr "ダウンロードできるのは、コース、グループ、フォルダー、またはファイルのみです。" + +msgid "cont_page_type_cont" +msgstr "リポジトリ;ページ(Cours, Group, ...)" + +msgid "cont_page_type_cstr" +msgstr "コース開始ページ(学習オブジェクトビュー)" + +msgid "cont_path" +msgstr "Path" + +msgid "cont_publish_assignment" +msgstr "割当を発行" + +msgid "cont_published" +msgstr "発行しました" + +msgid "cont_really_deassign_skills" +msgstr "ユーザから全ての能力を本当に解除しますか?" + +msgid "cont_really_remove_skill_from_course" +msgstr "そのリストからそれらの能力を本当に削除しますか?" + +msgid "cont_select_fields" +msgstr "フィールドを選択" + +msgid "cont_show_more" +msgstr "詳しく見る" + +msgid "cont_skill" +msgstr "能力" + +msgid "cont_skill_ass_profiles" +msgstr "メンバーの割り当てプロファイル" + +msgid "cont_skill_assigned_comp" +msgstr "能力選択" + +msgid "cont_skill_assigned_profiles" +msgstr "プロファイル選択" + +msgid "cont_skill_deletion_not_possible" +msgstr "グローバル能力プロファイルの削除できません。ローカル能力プロファイルのみを選択して下さい。" + +msgid "cont_skill_do_not_set" +msgstr "セットしてはいけません" + +msgid "cont_skill_members" +msgstr "メンバー" + +msgid "cont_skill_no_profile_selected" +msgstr "プロファイルを選択してください。" + +msgid "cont_skill_no_skill" +msgstr "値がありません(リセット)" + +msgid "cont_skill_no_skills_selected" +msgstr "まだ能力が何も選択されていません。\"能力セクション\"下の能力を一つは追加してください。" + +msgid "cont_skill_profile" +msgstr "プロファイル" + +msgid "cont_skill_profiles" +msgstr "メンバーの割当てプロファイル" + +msgid "cont_skill_publish" +msgstr "公開" + +msgid "cont_skill_publish_auto" +msgstr "自動的に" + +msgid "cont_skill_publish_auto_info" +msgstr "メンバーの能力割当はすぐにメンバーへ表示されます。" + +msgid "cont_skill_publish_manual" +msgstr "手動" + +msgid "cont_skill_publish_manual_info" +msgstr "メンバーの能力割当はメンバーへ表示されるようになる前に公開される必要があります。" + +msgid "cont_skill_really_delete_profile_from_list" +msgstr "リストからこのプロファイルを本当に削除しますか?" + +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "リストからこれらのプロファイルを本当に削除しますか?" + +msgid "cont_skill_really_remove_profile_from_list" +msgstr "リストからこのプロファイルを本当に削除しますか?" + +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "リストからこれらのプロファイルを本当に削除しますか?" + +msgid "cont_skill_records" +msgstr "Competence記録" + +msgid "cont_skill_removal_not_possible" +msgstr "ローカル能力プロファイルの削除できません。グローバル能力プロファイルのみを選択して下さい。" + +msgid "cont_std_filter_title_1" +msgstr "タイトル" + +msgid "cont_std_filter_title_2" +msgstr "説明" + +msgid "cont_std_filter_title_3" +msgstr "タイトル/説明" + +msgid "cont_std_filter_title_4" +msgstr "キーワード" + +msgid "cont_std_filter_title_5" +msgstr "著者" + +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +msgid "cont_std_filter_title_7" +msgstr "チュトリアルサポート" + +msgid "cont_std_filter_title_8" +msgstr "オブジェクトタイプ" + +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +msgid "cont_std_record_title" +msgstr "標準" + +msgid "cont_tile_size" +msgstr "タイルサイズ" + +msgid "cont_tile_size_0" +msgstr "normal (1行当たり4タイルまで)" + +msgid "cont_tile_size_1" +msgstr "small (1行当たり6タイルまで)" + +msgid "cont_tile_size_2" +msgstr "large (1行当たり3タイルまで)" + +msgid "cont_tile_size_3" +msgstr "extra large (1行当たり2タイルまで)" + +msgid "cont_tile_size_4" +msgstr "full (1行当たり1タイル)" + +msgid "cont_tile_view" +msgstr "タイル" + +msgid "cont_tile_view_info" +msgstr "サムネイルスタイルタイルでコンテンツオブジェクトを表示。このタイルのイメージは個別オブジェクト別の設定でuploadできます。" + +msgid "cont_trash_general_usage" +msgstr "システムから削除された大量の古いオブジェクトを削除したい時は、コンテナなしオブジェクト (例 ファイル、カテゴリ、用語集、テスト。。。) で開始する事を強く推奨し、その結果コンテナ(カテゴリ、コース、グループ、ラーニングシーケンス。。。)から全オブジェクトが全て削除されます。”タイプ\"と\"削除日\"フィルタを使用するとこの処理に役立ちます。最終的にコンテナを削除します。" diff --git a/components/ILIAS/Container/lang/cont_ka.po b/components/ILIAS/Container/lang/cont_ka.po new file mode 100644 index 000000000000..354c719cfb1b --- /dev/null +++ b/components/ILIAS/Container/lang/cont_ka.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +#, fuzzy +msgid "cont_add_skill" +msgstr "Add Competence" + +#, fuzzy +msgid "cont_assign_competence" +msgstr "Assign Competences to Members" + +#, fuzzy +msgid "cont_assign_skills" +msgstr "Assign Competences" + +#, fuzzy +msgid "cont_block_limit" +msgstr "Limit Items per Block" + +#, fuzzy +msgid "cont_block_limit_info" +msgstr "If a block contains more items, a \"Show more\" button will appear." + +#, fuzzy +msgid "cont_cont_skills" +msgstr "Assigned Competences of Members" + +#, fuzzy +msgid "cont_deassign_competence" +msgstr "Deassign Competences" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +#, fuzzy +msgid "cont_item_list" +msgstr "List" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +#, fuzzy +msgid "cont_list_presentation" +msgstr "Item Presentation" + +#, fuzzy +msgid "cont_mem_skills" +msgstr "Competences" + +#, fuzzy +msgid "cont_news_edited" +msgstr "Bearbeitet" + +#, fuzzy +msgid "cont_news_settings" +msgstr "News Settings" + +#, fuzzy +msgid "cont_news_timeline" +msgstr "News Timeline" + +#, fuzzy +msgid "cont_news_timeline_auto_entries" +msgstr "Include Automatic Entries" + +#, fuzzy +msgid "cont_news_timeline_auto_entries_info" +msgstr "Include all news that are created automatically, e.g. forum posts, new files, etc." + +#, fuzzy +msgid "cont_news_timeline_info" +msgstr "Activates News Timeline Tab" + +#, fuzzy +msgid "cont_news_timeline_landing_page" +msgstr "Landing Page" + +#, fuzzy +msgid "cont_news_timeline_landing_page_info" +msgstr "Timeline page will be the landing page." + +#, fuzzy +msgid "cont_news_timeline_tab" +msgstr "Timeline" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +#, fuzzy +msgid "cont_path" +msgstr "Path" + +#, fuzzy +msgid "cont_publish_assignment" +msgstr "Publish Assignments" + +#, fuzzy +msgid "cont_published" +msgstr "Published" + +#, fuzzy +msgid "cont_really_deassign_skills" +msgstr "Do you really want to deassign all competences from the users?" + +#, fuzzy +msgid "cont_really_remove_skill_from_course" +msgstr "Do you really want to remove these competences from the list?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +#, fuzzy +msgid "cont_show_more" +msgstr "Show More" + +#, fuzzy +msgid "cont_skill" +msgstr "Competence" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_assigned_comp" +msgstr "Competence Selection" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +#, fuzzy +msgid "cont_skill_do_not_set" +msgstr "Do not set" + +#, fuzzy +msgid "cont_skill_members" +msgstr "Members" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +#, fuzzy +msgid "cont_skill_no_skill" +msgstr "No value (Reset)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_publish" +msgstr "Publish" + +#, fuzzy +msgid "cont_skill_publish_auto" +msgstr "Automatic" + +#, fuzzy +msgid "cont_skill_publish_auto_info" +msgstr "Competence assignments for members are immediately visible for members." + +#, fuzzy +msgid "cont_skill_publish_manual" +msgstr "Manual" + +#, fuzzy +msgid "cont_skill_publish_manual_info" +msgstr "Competence assignments for members must be published before they become visible for members." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +#, fuzzy +msgid "cont_tile_view" +msgstr "Tiles" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_lt.po b/components/ILIAS/Container/lang/cont_lt.po new file mode 100644 index 000000000000..920622f79af1 --- /dev/null +++ b/components/ILIAS/Container/lang/cont_lt.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +#, fuzzy +msgid "cont_add_skill" +msgstr "Add Competence" + +#, fuzzy +msgid "cont_assign_competence" +msgstr "Assign Competences to Members" + +#, fuzzy +msgid "cont_assign_skills" +msgstr "Assign Competences" + +#, fuzzy +msgid "cont_block_limit" +msgstr "Limit Items per Block" + +#, fuzzy +msgid "cont_block_limit_info" +msgstr "If a block contains more items, a \"Show more\" button will appear." + +#, fuzzy +msgid "cont_cont_skills" +msgstr "Assigned Competences of Members" + +#, fuzzy +msgid "cont_deassign_competence" +msgstr "Deassign Competences" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +#, fuzzy +msgid "cont_item_list" +msgstr "List" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +#, fuzzy +msgid "cont_list_presentation" +msgstr "Item Presentation" + +#, fuzzy +msgid "cont_mem_skills" +msgstr "Competences" + +#, fuzzy +msgid "cont_news_edited" +msgstr "Bearbeitet" + +#, fuzzy +msgid "cont_news_settings" +msgstr "News Settings" + +#, fuzzy +msgid "cont_news_timeline" +msgstr "News Timeline" + +#, fuzzy +msgid "cont_news_timeline_auto_entries" +msgstr "Include Automatic Entries" + +#, fuzzy +msgid "cont_news_timeline_auto_entries_info" +msgstr "Include all news that are created automatically, e.g. forum posts, new files, etc." + +#, fuzzy +msgid "cont_news_timeline_info" +msgstr "Activates News Timeline Tab" + +#, fuzzy +msgid "cont_news_timeline_landing_page" +msgstr "Landing Page" + +#, fuzzy +msgid "cont_news_timeline_landing_page_info" +msgstr "Timeline page will be the landing page." + +#, fuzzy +msgid "cont_news_timeline_tab" +msgstr "Timeline" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +#, fuzzy +msgid "cont_path" +msgstr "Path" + +#, fuzzy +msgid "cont_publish_assignment" +msgstr "Publish Assignments" + +#, fuzzy +msgid "cont_published" +msgstr "Published" + +#, fuzzy +msgid "cont_really_deassign_skills" +msgstr "Do you really want to deassign all competences from the users?" + +#, fuzzy +msgid "cont_really_remove_skill_from_course" +msgstr "Do you really want to remove these competences from the list?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +#, fuzzy +msgid "cont_show_more" +msgstr "Show More" + +#, fuzzy +msgid "cont_skill" +msgstr "Competence" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_assigned_comp" +msgstr "Competence Selection" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +#, fuzzy +msgid "cont_skill_do_not_set" +msgstr "Do not set" + +#, fuzzy +msgid "cont_skill_members" +msgstr "Members" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +#, fuzzy +msgid "cont_skill_no_skill" +msgstr "No value (Reset)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_publish" +msgstr "Publish" + +#, fuzzy +msgid "cont_skill_publish_auto" +msgstr "Automatic" + +#, fuzzy +msgid "cont_skill_publish_auto_info" +msgstr "Competence assignments for members are immediately visible for members." + +#, fuzzy +msgid "cont_skill_publish_manual" +msgstr "Manual" + +#, fuzzy +msgid "cont_skill_publish_manual_info" +msgstr "Competence assignments for members must be published before they become visible for members." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +#, fuzzy +msgid "cont_tile_view" +msgstr "Tiles" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_nl.po b/components/ILIAS/Container/lang/cont_nl.po new file mode 100644 index 000000000000..9ac833a26efc --- /dev/null +++ b/components/ILIAS/Container/lang/cont_nl.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +#, fuzzy +msgid "cont_add_skill" +msgstr "Add Competence" + +#, fuzzy +msgid "cont_assign_competence" +msgstr "Assign Competences to Members" + +#, fuzzy +msgid "cont_assign_skills" +msgstr "Assign Competences" + +#, fuzzy +msgid "cont_block_limit" +msgstr "Limit Items per Block" + +#, fuzzy +msgid "cont_block_limit_info" +msgstr "If a block contains more items, a \"Show more\" button will appear." + +#, fuzzy +msgid "cont_cont_skills" +msgstr "Assigned Competences of Members" + +#, fuzzy +msgid "cont_deassign_competence" +msgstr "Deassign Competences" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +#, fuzzy +msgid "cont_item_list" +msgstr "List" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +#, fuzzy +msgid "cont_list_presentation" +msgstr "Item Presentation" + +#, fuzzy +msgid "cont_mem_skills" +msgstr "Competences" + +#, fuzzy +msgid "cont_news_edited" +msgstr "Bearbeitet" + +#, fuzzy +msgid "cont_news_settings" +msgstr "News Settings" + +#, fuzzy +msgid "cont_news_timeline" +msgstr "News Timeline" + +#, fuzzy +msgid "cont_news_timeline_auto_entries" +msgstr "Include Automatic Entries" + +#, fuzzy +msgid "cont_news_timeline_auto_entries_info" +msgstr "Include all news that are created automatically, e.g. forum posts, new files, etc." + +#, fuzzy +msgid "cont_news_timeline_info" +msgstr "Activates News Timeline Tab" + +#, fuzzy +msgid "cont_news_timeline_landing_page" +msgstr "Landing Page" + +#, fuzzy +msgid "cont_news_timeline_landing_page_info" +msgstr "Timeline page will be the landing page." + +#, fuzzy +msgid "cont_news_timeline_tab" +msgstr "Timeline" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +#, fuzzy +msgid "cont_path" +msgstr "Path" + +#, fuzzy +msgid "cont_publish_assignment" +msgstr "Publish Assignments" + +#, fuzzy +msgid "cont_published" +msgstr "Published" + +#, fuzzy +msgid "cont_really_deassign_skills" +msgstr "Do you really want to deassign all competences from the users?" + +#, fuzzy +msgid "cont_really_remove_skill_from_course" +msgstr "Do you really want to remove these competences from the list?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +#, fuzzy +msgid "cont_show_more" +msgstr "Show More" + +#, fuzzy +msgid "cont_skill" +msgstr "Competence" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_assigned_comp" +msgstr "Competence Selection" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +#, fuzzy +msgid "cont_skill_do_not_set" +msgstr "Do not set" + +#, fuzzy +msgid "cont_skill_members" +msgstr "Members" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +#, fuzzy +msgid "cont_skill_no_skill" +msgstr "No value (Reset)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_publish" +msgstr "Publish" + +#, fuzzy +msgid "cont_skill_publish_auto" +msgstr "Automatic" + +#, fuzzy +msgid "cont_skill_publish_auto_info" +msgstr "Competence assignments for members are immediately visible for members." + +#, fuzzy +msgid "cont_skill_publish_manual" +msgstr "Manual" + +#, fuzzy +msgid "cont_skill_publish_manual_info" +msgstr "Competence assignments for members must be published before they become visible for members." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +#, fuzzy +msgid "cont_tile_view" +msgstr "Tiles" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_pl.po b/components/ILIAS/Container/lang/cont_pl.po new file mode 100644 index 000000000000..798dfdabaded --- /dev/null +++ b/components/ILIAS/Container/lang/cont_pl.po @@ -0,0 +1,293 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +msgid "cont_add_skill" +msgstr "Dodaj kompetencje" + +msgid "cont_assign_competence" +msgstr "Przydziel kompetencje członkom" + +msgid "cont_assign_skills" +msgstr "Przydziel kompetencje" + +msgid "cont_block_limit" +msgstr "Limit Items per Block" + +msgid "cont_block_limit_info" +msgstr "If a block contains more items, a \"Show more\" button will appear." + +msgid "cont_cont_skills" +msgstr "Kompetencje członków" + +msgid "cont_deassign_competence" +msgstr "Przywróć kompetencje" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +msgid "cont_item_list" +msgstr "List" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +msgid "cont_list_presentation" +msgstr "Item Presentation" + +msgid "cont_mem_skills" +msgstr "Kompetencje" + +msgid "cont_news_edited" +msgstr "Skompletowane" + +msgid "cont_news_settings" +msgstr "Ustawienia wewnętrznych wiadomości" + +msgid "cont_news_timeline" +msgstr "Linia czasu" + +msgid "cont_news_timeline_auto_entries" +msgstr "Automatycznie wygenerowane nowości" + +msgid "cont_news_timeline_auto_entries_info" +msgstr "Wyświetlane są również wszystkie automatycznie wygenerowane nowości, np. wpisy na forum, nowe pliki itd." + +msgid "cont_news_timeline_info" +msgstr "Aktywuje zakładkę \"Linia czasu\" dla nowości." + +msgid "cont_news_timeline_landing_page" +msgstr "Strona startowa" + +msgid "cont_news_timeline_landing_page_info" +msgstr "Linia czasu jako strona startowa" + +msgid "cont_news_timeline_tab" +msgstr "Linia czasu" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +msgid "cont_path" +msgstr "Ścieżka" + +msgid "cont_publish_assignment" +msgstr "Opublikuj kompetencje" + +msgid "cont_published" +msgstr "Opublikowanie" + +msgid "cont_really_deassign_skills" +msgstr "Czy na pewno chcesz przywrócić wszystkie przydziały kompetencji użytkownika?" + +msgid "cont_really_remove_skill_from_course" +msgstr "Czy kompetencje mają zostać usunięte z listy?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +msgid "cont_show_more" +msgstr "Show More" + +msgid "cont_skill" +msgstr "Kompetencje" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +msgid "cont_skill_assigned_comp" +msgstr "Wybór kompetencji" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +msgid "cont_skill_do_not_set" +msgstr "Nie ustawiaj" + +msgid "cont_skill_members" +msgstr "Członkowie" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +msgid "cont_skill_no_skill" +msgstr "Brak wartości (przywróć)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +msgid "cont_skill_publish" +msgstr "Opublikowanie" + +msgid "cont_skill_publish_auto" +msgstr "Automatyczny" + +msgid "cont_skill_publish_auto_info" +msgstr "Przydziały poziomów kompetencji do członków są dla członków widoczne natychmiast." + +msgid "cont_skill_publish_manual" +msgstr "Ręczny" + +msgid "cont_skill_publish_manual_info" +msgstr "Przydziały poziomów kompetencji do członków są widoczne dopiero wtedy, gdy te zostaną opublikowane." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +msgid "cont_tile_view" +msgstr "Tiles" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_pt.po b/components/ILIAS/Container/lang/cont_pt.po new file mode 100644 index 000000000000..341cdf9f88f5 --- /dev/null +++ b/components/ILIAS/Container/lang/cont_pt.po @@ -0,0 +1,293 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +msgid "cont_add_skill" +msgstr "Adicionar competência" + +msgid "cont_assign_competence" +msgstr "Atribuir competências a membros" + +msgid "cont_assign_skills" +msgstr "Atribuir competências" + +msgid "cont_block_limit" +msgstr "adlcp:masteryscore" + +msgid "cont_block_limit_info" +msgstr "adlcp:maxtimeallowed" + +msgid "cont_cont_skills" +msgstr "Competências atribuídas a membros" + +msgid "cont_deassign_competence" +msgstr "Retirar a atribuição das competências" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +msgid "cont_item_list" +msgstr "Clicar e editar para inserir media" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Display content objects in a list." + +msgid "cont_list_presentation" +msgstr "Variável de media" + +msgid "cont_mem_skills" +msgstr "Competências" + +msgid "cont_news_edited" +msgstr "Processado" + +msgid "cont_news_settings" +msgstr "Definições das notícias" + +msgid "cont_news_timeline" +msgstr "Linha cronológica das notícias" + +msgid "cont_news_timeline_auto_entries" +msgstr "Incluir entradas automáticas" + +msgid "cont_news_timeline_auto_entries_info" +msgstr "Inclui todas as notícias que são criadas automaticamente, p. ex. posts de fóruns, novos ficheiros, etc." + +msgid "cont_news_timeline_info" +msgstr "Ativa separador da linha cronológica das notícias" + +msgid "cont_news_timeline_landing_page" +msgstr "Página de desembarque" + +msgid "cont_news_timeline_landing_page_info" +msgstr "A página da linha cronológica será a página de desembarque." + +msgid "cont_news_timeline_tab" +msgstr "Linha cronológica" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +msgid "cont_path" +msgstr "Caminho" + +msgid "cont_publish_assignment" +msgstr "Publicar atribuições" + +msgid "cont_published" +msgstr "Publicado" + +msgid "cont_really_deassign_skills" +msgstr "Tem a certeza que quer retirar as atribuições a todas as competências dos utilizadores?" + +msgid "cont_really_remove_skill_from_course" +msgstr "Tem a certeza que quer remover estas competências da lista?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +msgid "cont_show_more" +msgstr "Fonte de media" + +msgid "cont_skill" +msgstr "Competência" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +msgid "cont_skill_assigned_comp" +msgstr "Seleção da competência" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +msgid "cont_skill_do_not_set" +msgstr "Não definir" + +msgid "cont_skill_members" +msgstr "Membros" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +msgid "cont_skill_no_skill" +msgstr "Nenhum valor (repor)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +msgid "cont_skill_publish" +msgstr "Publicar" + +msgid "cont_skill_publish_auto" +msgstr "Automático" + +msgid "cont_skill_publish_auto_info" +msgstr "As atribuições das competências para membros fica imediatamente visíveis aos membros." + +msgid "cont_skill_publish_manual" +msgstr "Manual" + +msgid "cont_skill_publish_manual_info" +msgstr "As atribuições das competências para membros têm de ser publicadas antes de ficarem visíveis aos membros." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +msgid "cont_tile_view" +msgstr "Propriedades de instância" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Display content objects as thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_ro.po b/components/ILIAS/Container/lang/cont_ro.po new file mode 100644 index 000000000000..0da2f0468655 --- /dev/null +++ b/components/ILIAS/Container/lang/cont_ro.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +#, fuzzy +msgid "cont_add_skill" +msgstr "Add Competence" + +#, fuzzy +msgid "cont_assign_competence" +msgstr "Assign Competences to Members" + +#, fuzzy +msgid "cont_assign_skills" +msgstr "Assign Competences" + +#, fuzzy +msgid "cont_block_limit" +msgstr "Limit Items per Block" + +#, fuzzy +msgid "cont_block_limit_info" +msgstr "If a block contains more items, a \"Show more\" button will appear." + +#, fuzzy +msgid "cont_cont_skills" +msgstr "Assigned Competences of Members" + +#, fuzzy +msgid "cont_deassign_competence" +msgstr "Deassign Competences" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +#, fuzzy +msgid "cont_item_list" +msgstr "List" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +#, fuzzy +msgid "cont_list_presentation" +msgstr "Item Presentation" + +#, fuzzy +msgid "cont_mem_skills" +msgstr "Competences" + +#, fuzzy +msgid "cont_news_edited" +msgstr "Bearbeitet" + +#, fuzzy +msgid "cont_news_settings" +msgstr "News Settings" + +#, fuzzy +msgid "cont_news_timeline" +msgstr "News Timeline" + +#, fuzzy +msgid "cont_news_timeline_auto_entries" +msgstr "Include Automatic Entries" + +#, fuzzy +msgid "cont_news_timeline_auto_entries_info" +msgstr "Include all news that are created automatically, e.g. forum posts, new files, etc." + +#, fuzzy +msgid "cont_news_timeline_info" +msgstr "Activates News Timeline Tab" + +#, fuzzy +msgid "cont_news_timeline_landing_page" +msgstr "Landing Page" + +#, fuzzy +msgid "cont_news_timeline_landing_page_info" +msgstr "Timeline page will be the landing page." + +#, fuzzy +msgid "cont_news_timeline_tab" +msgstr "Timeline" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +#, fuzzy +msgid "cont_path" +msgstr "Path" + +#, fuzzy +msgid "cont_publish_assignment" +msgstr "Publish Assignments" + +#, fuzzy +msgid "cont_published" +msgstr "Published" + +#, fuzzy +msgid "cont_really_deassign_skills" +msgstr "Do you really want to deassign all competences from the users?" + +#, fuzzy +msgid "cont_really_remove_skill_from_course" +msgstr "Do you really want to remove these competences from the list?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +#, fuzzy +msgid "cont_show_more" +msgstr "Show More" + +#, fuzzy +msgid "cont_skill" +msgstr "Competence" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_assigned_comp" +msgstr "Competence Selection" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +#, fuzzy +msgid "cont_skill_do_not_set" +msgstr "Do not set" + +#, fuzzy +msgid "cont_skill_members" +msgstr "Members" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +#, fuzzy +msgid "cont_skill_no_skill" +msgstr "No value (Reset)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_publish" +msgstr "Publish" + +#, fuzzy +msgid "cont_skill_publish_auto" +msgstr "Automatic" + +#, fuzzy +msgid "cont_skill_publish_auto_info" +msgstr "Competence assignments for members are immediately visible for members." + +#, fuzzy +msgid "cont_skill_publish_manual" +msgstr "Manual" + +#, fuzzy +msgid "cont_skill_publish_manual_info" +msgstr "Competence assignments for members must be published before they become visible for members." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +#, fuzzy +msgid "cont_tile_view" +msgstr "Tiles" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_ru.po b/components/ILIAS/Container/lang/cont_ru.po new file mode 100644 index 000000000000..45feebfe1a15 --- /dev/null +++ b/components/ILIAS/Container/lang/cont_ru.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +#, fuzzy +msgid "cont_add_skill" +msgstr "Add Competence" + +#, fuzzy +msgid "cont_assign_competence" +msgstr "Assign Competences to Members" + +#, fuzzy +msgid "cont_assign_skills" +msgstr "Assign Competences" + +#, fuzzy +msgid "cont_block_limit" +msgstr "Limit Items per Block" + +#, fuzzy +msgid "cont_block_limit_info" +msgstr "If a block contains more items, a \"Show more\" button will appear." + +#, fuzzy +msgid "cont_cont_skills" +msgstr "Assigned Competences of Members" + +#, fuzzy +msgid "cont_deassign_competence" +msgstr "Deassign Competences" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +#, fuzzy +msgid "cont_item_list" +msgstr "List" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +#, fuzzy +msgid "cont_list_presentation" +msgstr "Item Presentation" + +#, fuzzy +msgid "cont_mem_skills" +msgstr "Competences" + +#, fuzzy +msgid "cont_news_edited" +msgstr "Bearbeitet" + +#, fuzzy +msgid "cont_news_settings" +msgstr "News Settings" + +#, fuzzy +msgid "cont_news_timeline" +msgstr "News Timeline" + +#, fuzzy +msgid "cont_news_timeline_auto_entries" +msgstr "Include Automatic Entries" + +#, fuzzy +msgid "cont_news_timeline_auto_entries_info" +msgstr "Include all news that are created automatically, e.g. forum posts, new files, etc." + +#, fuzzy +msgid "cont_news_timeline_info" +msgstr "Activates News Timeline Tab" + +#, fuzzy +msgid "cont_news_timeline_landing_page" +msgstr "Landing Page" + +#, fuzzy +msgid "cont_news_timeline_landing_page_info" +msgstr "Timeline page will be the landing page." + +#, fuzzy +msgid "cont_news_timeline_tab" +msgstr "Timeline" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +#, fuzzy +msgid "cont_path" +msgstr "Path" + +#, fuzzy +msgid "cont_publish_assignment" +msgstr "Publish Assignments" + +#, fuzzy +msgid "cont_published" +msgstr "Published" + +#, fuzzy +msgid "cont_really_deassign_skills" +msgstr "Do you really want to deassign all competences from the users?" + +#, fuzzy +msgid "cont_really_remove_skill_from_course" +msgstr "Do you really want to remove these competences from the list?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +#, fuzzy +msgid "cont_show_more" +msgstr "Show More" + +#, fuzzy +msgid "cont_skill" +msgstr "Competence" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_assigned_comp" +msgstr "Competence Selection" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +#, fuzzy +msgid "cont_skill_do_not_set" +msgstr "Do not set" + +#, fuzzy +msgid "cont_skill_members" +msgstr "Members" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +#, fuzzy +msgid "cont_skill_no_skill" +msgstr "No value (Reset)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_publish" +msgstr "Publish" + +#, fuzzy +msgid "cont_skill_publish_auto" +msgstr "Automatic" + +#, fuzzy +msgid "cont_skill_publish_auto_info" +msgstr "Competence assignments for members are immediately visible for members." + +#, fuzzy +msgid "cont_skill_publish_manual" +msgstr "Manual" + +#, fuzzy +msgid "cont_skill_publish_manual_info" +msgstr "Competence assignments for members must be published before they become visible for members." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +#, fuzzy +msgid "cont_tile_view" +msgstr "Tiles" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_sk.po b/components/ILIAS/Container/lang/cont_sk.po new file mode 100644 index 000000000000..fedd0b8e53ba --- /dev/null +++ b/components/ILIAS/Container/lang/cont_sk.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +#, fuzzy +msgid "cont_add_skill" +msgstr "Add Competence" + +#, fuzzy +msgid "cont_assign_competence" +msgstr "Assign Competences to Members" + +#, fuzzy +msgid "cont_assign_skills" +msgstr "Assign Competences" + +#, fuzzy +msgid "cont_block_limit" +msgstr "Limit Items per Block" + +#, fuzzy +msgid "cont_block_limit_info" +msgstr "If a block contains more items, a \"Show more\" button will appear." + +#, fuzzy +msgid "cont_cont_skills" +msgstr "Assigned Competences of Members" + +#, fuzzy +msgid "cont_deassign_competence" +msgstr "Deassign Competences" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +#, fuzzy +msgid "cont_item_list" +msgstr "List" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +#, fuzzy +msgid "cont_list_presentation" +msgstr "Item Presentation" + +#, fuzzy +msgid "cont_mem_skills" +msgstr "Competences" + +#, fuzzy +msgid "cont_news_edited" +msgstr "Bearbeitet" + +#, fuzzy +msgid "cont_news_settings" +msgstr "News Settings" + +#, fuzzy +msgid "cont_news_timeline" +msgstr "News Timeline" + +#, fuzzy +msgid "cont_news_timeline_auto_entries" +msgstr "Include Automatic Entries" + +#, fuzzy +msgid "cont_news_timeline_auto_entries_info" +msgstr "Include all news that are created automatically, e.g. forum posts, new files, etc." + +#, fuzzy +msgid "cont_news_timeline_info" +msgstr "Activates News Timeline Tab" + +#, fuzzy +msgid "cont_news_timeline_landing_page" +msgstr "Landing Page" + +#, fuzzy +msgid "cont_news_timeline_landing_page_info" +msgstr "Timeline page will be the landing page." + +#, fuzzy +msgid "cont_news_timeline_tab" +msgstr "Timeline" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +#, fuzzy +msgid "cont_path" +msgstr "Path" + +#, fuzzy +msgid "cont_publish_assignment" +msgstr "Publish Assignments" + +#, fuzzy +msgid "cont_published" +msgstr "Published" + +#, fuzzy +msgid "cont_really_deassign_skills" +msgstr "Do you really want to deassign all competences from the users?" + +#, fuzzy +msgid "cont_really_remove_skill_from_course" +msgstr "Do you really want to remove these competences from the list?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +#, fuzzy +msgid "cont_show_more" +msgstr "Show More" + +#, fuzzy +msgid "cont_skill" +msgstr "Competence" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_assigned_comp" +msgstr "Competence Selection" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +#, fuzzy +msgid "cont_skill_do_not_set" +msgstr "Do not set" + +#, fuzzy +msgid "cont_skill_members" +msgstr "Members" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +#, fuzzy +msgid "cont_skill_no_skill" +msgstr "No value (Reset)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_publish" +msgstr "Publish" + +#, fuzzy +msgid "cont_skill_publish_auto" +msgstr "Automatic" + +#, fuzzy +msgid "cont_skill_publish_auto_info" +msgstr "Competence assignments for members are immediately visible for members." + +#, fuzzy +msgid "cont_skill_publish_manual" +msgstr "Manual" + +#, fuzzy +msgid "cont_skill_publish_manual_info" +msgstr "Competence assignments for members must be published before they become visible for members." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +#, fuzzy +msgid "cont_tile_view" +msgstr "Tiles" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_sl.po b/components/ILIAS/Container/lang/cont_sl.po new file mode 100644 index 000000000000..559ca1fdc2e0 --- /dev/null +++ b/components/ILIAS/Container/lang/cont_sl.po @@ -0,0 +1,275 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +msgid "cont_add_skill" +msgstr "Dodaj kompetenco" + +msgid "cont_assign_competence" +msgstr "Članom dodeli kompetence" + +msgid "cont_assign_skills" +msgstr "Dodeli kompetence" + +msgid "cont_block_limit" +msgstr "Omeji vnose na blok" + +msgid "cont_block_limit_info" +msgstr "Če blok vsebuje več vnosov, se prikaže gumb \"Pokaži več\"." + +msgid "cont_cont_skills" +msgstr "Kompetence članov" + +msgid "cont_deassign_competence" +msgstr "Ponastavi kompetence" + +msgid "cont_filter" +msgstr "Filter" + +msgid "cont_filter_field" +msgstr "Field" + +msgid "cont_filter_fields" +msgstr "Filter Fields" + +msgid "cont_filter_record" +msgstr "Record" + +msgid "cont_found_objects" +msgstr "Found Objects" + +msgid "cont_item_list" +msgstr "Seznam" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +msgid "cont_list_presentation" +msgstr "Pogled predstavitve za vsebine" + +msgid "cont_mem_skills" +msgstr "Kompetence" + +msgid "cont_news_edited" +msgstr "Urejeno" + +msgid "cont_news_settings" +msgstr "Novosti" + +msgid "cont_news_timeline" +msgstr "Časovnica" + +msgid "cont_news_timeline_auto_entries" +msgstr "Samodejno ustvarjene novosti" + +msgid "cont_news_timeline_auto_entries_info" +msgstr "Vse samodejno ustvarjene novosti bodo prikazane, npr. objave na forumu, nove datoteke itd." + +msgid "cont_news_timeline_info" +msgstr "Aktivira zavihek \"Časovnica\" za novosti" + +msgid "cont_news_timeline_landing_page" +msgstr "Začetna stran" + +msgid "cont_news_timeline_landing_page_info" +msgstr "Časovnica kot začetna stran" + +msgid "cont_news_timeline_tab" +msgstr "Časovnica" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +msgid "cont_path" +msgstr "Pot" + +msgid "cont_publish_assignment" +msgstr "Objavi dodelitve" + +msgid "cont_published" +msgstr "Objava" + +msgid "cont_really_deassign_skills" +msgstr "Ali res želite ponastaviti vse dodeljene kompetence uporabnika?" + +msgid "cont_really_remove_skill_from_course" +msgstr "Ali res želite odstraniti kompetence s seznama?" + +msgid "cont_select_fields" +msgstr "Select Fields" + +msgid "cont_show_more" +msgstr "Prikaži več" + +msgid "cont_skill" +msgstr "Kompetenca" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +msgid "cont_skill_assigned_comp" +msgstr "Izbor kompetenc" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +msgid "cont_skill_do_not_set" +msgstr "Ne nastavi" + +msgid "cont_skill_members" +msgstr "Člani" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +msgid "cont_skill_no_skill" +msgstr "Ni vrednosti (ponastavi)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +msgid "cont_skill_publish" +msgstr "Objava" + +msgid "cont_skill_publish_auto" +msgstr "Samodejno" + +msgid "cont_skill_publish_auto_info" +msgstr "Dodeljene ravni kompetenc članom bodo tem vidne takoj." + +msgid "cont_skill_publish_manual" +msgstr "Ročno" + +msgid "cont_skill_publish_manual_info" +msgstr "Dodeljene ravni kompetenc članom bodo tem vidne šele takrat, ko bodo objavljene." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +msgid "cont_std_filter_title_1" +msgstr "Title" + +msgid "cont_std_filter_title_2" +msgstr "Description" + +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +msgid "cont_std_filter_title_5" +msgstr "Author" + +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +msgid "cont_tile_view" +msgstr "Ploščice" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_sq.po b/components/ILIAS/Container/lang/cont_sq.po new file mode 100644 index 000000000000..20313a1fe31a --- /dev/null +++ b/components/ILIAS/Container/lang/cont_sq.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +#, fuzzy +msgid "cont_add_skill" +msgstr "Add Competence" + +#, fuzzy +msgid "cont_assign_competence" +msgstr "Assign Competences to Members" + +#, fuzzy +msgid "cont_assign_skills" +msgstr "Assign Competences" + +#, fuzzy +msgid "cont_block_limit" +msgstr "Limit Items per Block" + +#, fuzzy +msgid "cont_block_limit_info" +msgstr "If a block contains more items, a \"Show more\" button will appear." + +#, fuzzy +msgid "cont_cont_skills" +msgstr "Assigned Competences of Members" + +#, fuzzy +msgid "cont_deassign_competence" +msgstr "Deassign Competences" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +#, fuzzy +msgid "cont_item_list" +msgstr "List" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +#, fuzzy +msgid "cont_list_presentation" +msgstr "Item Presentation" + +#, fuzzy +msgid "cont_mem_skills" +msgstr "Competences" + +#, fuzzy +msgid "cont_news_edited" +msgstr "Bearbeitet" + +#, fuzzy +msgid "cont_news_settings" +msgstr "News Settings" + +#, fuzzy +msgid "cont_news_timeline" +msgstr "News Timeline" + +#, fuzzy +msgid "cont_news_timeline_auto_entries" +msgstr "Include Automatic Entries" + +#, fuzzy +msgid "cont_news_timeline_auto_entries_info" +msgstr "Include all news that are created automatically, e.g. forum posts, new files, etc." + +#, fuzzy +msgid "cont_news_timeline_info" +msgstr "Activates News Timeline Tab" + +#, fuzzy +msgid "cont_news_timeline_landing_page" +msgstr "Landing Page" + +#, fuzzy +msgid "cont_news_timeline_landing_page_info" +msgstr "Timeline page will be the landing page." + +#, fuzzy +msgid "cont_news_timeline_tab" +msgstr "Timeline" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +#, fuzzy +msgid "cont_path" +msgstr "Path" + +#, fuzzy +msgid "cont_publish_assignment" +msgstr "Publish Assignments" + +#, fuzzy +msgid "cont_published" +msgstr "Published" + +#, fuzzy +msgid "cont_really_deassign_skills" +msgstr "Do you really want to deassign all competences from the users?" + +#, fuzzy +msgid "cont_really_remove_skill_from_course" +msgstr "Do you really want to remove these competences from the list?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +#, fuzzy +msgid "cont_show_more" +msgstr "Show More" + +#, fuzzy +msgid "cont_skill" +msgstr "Competence" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_assigned_comp" +msgstr "Competence Selection" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +#, fuzzy +msgid "cont_skill_do_not_set" +msgstr "Do not set" + +#, fuzzy +msgid "cont_skill_members" +msgstr "Members" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +#, fuzzy +msgid "cont_skill_no_skill" +msgstr "No value (Reset)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_publish" +msgstr "Publish" + +#, fuzzy +msgid "cont_skill_publish_auto" +msgstr "Automatic" + +#, fuzzy +msgid "cont_skill_publish_auto_info" +msgstr "Competence assignments for members are immediately visible for members." + +#, fuzzy +msgid "cont_skill_publish_manual" +msgstr "Manual" + +#, fuzzy +msgid "cont_skill_publish_manual_info" +msgstr "Competence assignments for members must be published before they become visible for members." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +#, fuzzy +msgid "cont_tile_view" +msgstr "Tiles" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_sr.po b/components/ILIAS/Container/lang/cont_sr.po new file mode 100644 index 000000000000..6c385f96dee1 --- /dev/null +++ b/components/ILIAS/Container/lang/cont_sr.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +#, fuzzy +msgid "cont_add_skill" +msgstr "Add Competence" + +#, fuzzy +msgid "cont_assign_competence" +msgstr "Assign Competences to Members" + +#, fuzzy +msgid "cont_assign_skills" +msgstr "Assign Competences" + +#, fuzzy +msgid "cont_block_limit" +msgstr "Limit Items per Block" + +#, fuzzy +msgid "cont_block_limit_info" +msgstr "If a block contains more items, a \"Show more\" button will appear." + +#, fuzzy +msgid "cont_cont_skills" +msgstr "Assigned Competences of Members" + +#, fuzzy +msgid "cont_deassign_competence" +msgstr "Deassign Competences" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +#, fuzzy +msgid "cont_item_list" +msgstr "List" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +#, fuzzy +msgid "cont_list_presentation" +msgstr "Item Presentation" + +#, fuzzy +msgid "cont_mem_skills" +msgstr "Competences" + +#, fuzzy +msgid "cont_news_edited" +msgstr "Bearbeitet" + +#, fuzzy +msgid "cont_news_settings" +msgstr "News Settings" + +#, fuzzy +msgid "cont_news_timeline" +msgstr "News Timeline" + +#, fuzzy +msgid "cont_news_timeline_auto_entries" +msgstr "Include Automatic Entries" + +#, fuzzy +msgid "cont_news_timeline_auto_entries_info" +msgstr "Include all news that are created automatically, e.g. forum posts, new files, etc." + +#, fuzzy +msgid "cont_news_timeline_info" +msgstr "Activates News Timeline Tab" + +#, fuzzy +msgid "cont_news_timeline_landing_page" +msgstr "Landing Page" + +#, fuzzy +msgid "cont_news_timeline_landing_page_info" +msgstr "Timeline page will be the landing page." + +#, fuzzy +msgid "cont_news_timeline_tab" +msgstr "Timeline" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +#, fuzzy +msgid "cont_path" +msgstr "Path" + +#, fuzzy +msgid "cont_publish_assignment" +msgstr "Publish Assignments" + +#, fuzzy +msgid "cont_published" +msgstr "Published" + +#, fuzzy +msgid "cont_really_deassign_skills" +msgstr "Do you really want to deassign all competences from the users?" + +#, fuzzy +msgid "cont_really_remove_skill_from_course" +msgstr "Do you really want to remove these competences from the list?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +#, fuzzy +msgid "cont_show_more" +msgstr "Show More" + +#, fuzzy +msgid "cont_skill" +msgstr "Competence" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_assigned_comp" +msgstr "Competence Selection" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +#, fuzzy +msgid "cont_skill_do_not_set" +msgstr "Do not set" + +#, fuzzy +msgid "cont_skill_members" +msgstr "Members" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +#, fuzzy +msgid "cont_skill_no_skill" +msgstr "No value (Reset)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_publish" +msgstr "Publish" + +#, fuzzy +msgid "cont_skill_publish_auto" +msgstr "Automatic" + +#, fuzzy +msgid "cont_skill_publish_auto_info" +msgstr "Competence assignments for members are immediately visible for members." + +#, fuzzy +msgid "cont_skill_publish_manual" +msgstr "Manual" + +#, fuzzy +msgid "cont_skill_publish_manual_info" +msgstr "Competence assignments for members must be published before they become visible for members." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +#, fuzzy +msgid "cont_tile_view" +msgstr "Tiles" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_sv.po b/components/ILIAS/Container/lang/cont_sv.po new file mode 100644 index 000000000000..a8f63f704da2 --- /dev/null +++ b/components/ILIAS/Container/lang/cont_sv.po @@ -0,0 +1,254 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cont\n" + +msgid "cont_add_global_profile" +msgstr "Lägg till global profil" + +msgid "cont_add_local_profile" +msgstr "Lägg till lokal profil" + +msgid "cont_add_skill" +msgstr "Lägg till kompetens" + +msgid "cont_assign_competence" +msgstr "Tilldela kompetens till medlemmar" + +msgid "cont_assign_skills" +msgstr "Tilldela kompetenser" + +msgid "cont_block_limit" +msgstr "Begränsa inmatningar per block" + +msgid "cont_block_limit_info" +msgstr "Om ett block innehåller fler poster visas en åtgärdsknapp \"Visa mer\"." + +msgid "cont_cont_skills" +msgstr "Medlemmarnas kompetens" + +msgid "cont_deassign_competence" +msgstr "Återställa kompetenser" + +msgid "cont_filter" +msgstr "Filter" + +msgid "cont_filter_field" +msgstr "Fält" + +msgid "cont_filter_fields" +msgstr "Filterfält" + +msgid "cont_filter_record" +msgstr "Dataset" + +msgid "cont_found_objects" +msgstr "Fundna objekt" + +msgid "cont_item_list" +msgstr "Lista" + +msgid "cont_item_list_info" +msgstr "Visa underordnade objekt i en lista." + +msgid "cont_list_presentation" +msgstr "Presentationsvy för innehåll" + +msgid "cont_mem_skills" +msgstr "Kompetens" + +msgid "cont_news_edited" +msgstr "Editerad" + +msgid "cont_news_settings" +msgstr "Nyheter" + +msgid "cont_news_timeline" +msgstr "Tidslinje" + +msgid "cont_news_timeline_auto_entries" +msgstr "Automatiskt skapade nyheter" + +msgid "cont_news_timeline_auto_entries_info" +msgstr "Alla automatiskt skapade nyheter visas också, t.ex. foruminlägg, nya filer, etc." + +msgid "cont_news_timeline_info" +msgstr "Aktiverar fliken \"Tidslinje\" för nyheter" + +msgid "cont_news_timeline_landing_page" +msgstr "Startsida" + +msgid "cont_news_timeline_landing_page_info" +msgstr "Timeline som startsida" + +msgid "cont_news_timeline_tab" +msgstr "Tidslinje" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +msgid "cont_page_type_cont" +msgstr "Magazin-sida (kurs, grupp, kategori, ...)" + +msgid "cont_page_type_cstr" +msgstr "Startpage lärande målorienterad kurs" + +msgid "cont_path" +msgstr "Stig" + +msgid "cont_publish_assignment" +msgstr "Publicera uppdrag" + +msgid "cont_published" +msgstr "Publicering" + +msgid "cont_really_deassign_skills" +msgstr "Vill du verkligen återställa alla användarens kompetenstilldelningar?" + +msgid "cont_really_remove_skill_from_course" +msgstr "Bör kompetenserna verkligen tas bort från listan?" + +msgid "cont_select_fields" +msgstr "Välj fält" + +msgid "cont_show_more" +msgstr "Visa mer" + +msgid "cont_skill" +msgstr "Kompetens" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +msgid "cont_skill_assigned_comp" +msgstr "Urval av kompetenser" + +msgid "cont_skill_assigned_profiles" +msgstr "Urval av profil" + +msgid "cont_skill_deletion_not_possible" +msgstr "Det är inte möjligt att ta bort globala kompetensprofiler. Välj endast lokala kompetensprofiler." + +msgid "cont_skill_do_not_set" +msgstr "Ställ inte in" + +msgid "cont_skill_members" +msgstr "Medlemmar" + +msgid "cont_skill_no_profile_selected" +msgstr "Vänligen välj en profil." + +msgid "cont_skill_no_skill" +msgstr "Inget värde (återställning)" + +msgid "cont_skill_no_skills_selected" +msgstr "Inga kompetenser har valts ännu. Lägg till minst en kompetens under \"Val av kompetens\" först." + +msgid "cont_skill_profile" +msgstr "Profil" + +msgid "cont_skill_profiles" +msgstr "Profiler över medlemmarna" + +msgid "cont_skill_publish" +msgstr "Publicering" + +msgid "cont_skill_publish_auto" +msgstr "Automatisk" + +msgid "cont_skill_publish_auto_info" +msgstr "Tilldelning av kompetensnivåer till medlemmar är omedelbart synliga för dem." + +msgid "cont_skill_publish_manual" +msgstr "Handbok" + +msgid "cont_skill_publish_manual_info" +msgstr "Tilldelningar av kompetensnivåer till medlemmar är endast synliga för dem när de publiceras." + +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Bör profilen verkligen raderas?" + +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Bör profilerna verkligen raderas?" + +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Bör profilen verkligen tas bort från listan?" + +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Bör profilerna verkligen tas bort från listan?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +msgid "cont_skill_removal_not_possible" +msgstr "Att ta bort lokala kompetensprofiler är inte möjligt. Vänligen välj endast globala kompetensprofiler." + +msgid "cont_std_filter_title_1" +msgstr "Titel" + +msgid "cont_std_filter_title_2" +msgstr "Beskrivning" + +msgid "cont_std_filter_title_3" +msgstr "Titel/Beskrivning" + +msgid "cont_std_filter_title_4" +msgstr " nyckelord" + +msgid "cont_std_filter_title_5" +msgstr "Författare" + +msgid "cont_std_filter_title_6" +msgstr "Upphovsrätt" + +msgid "cont_std_filter_title_7" +msgstr "Stöd för undervisning" + +msgid "cont_std_filter_title_8" +msgstr "Objekttyp" + +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +msgid "cont_std_record_title" +msgstr "Standard" + +msgid "cont_tile_size" +msgstr "Storlek på kakel" + +msgid "cont_tile_size_0" +msgstr "normal (upp till fyra brickor på en rad)" + +msgid "cont_tile_size_1" +msgstr "small (upp till sex brickor på en rad)" + +msgid "cont_tile_size_2" +msgstr "large (upp till tre brickor på en rad)" + +msgid "cont_tile_size_3" +msgstr "mycket stor (upp till två plattor på en rad)" + +msgid "cont_tile_size_4" +msgstr " full bredd (en kakelplatta på en rad)" + +msgid "cont_tile_view" +msgstr "Kakelplattor" + +msgid "cont_tile_view_info" +msgstr "Visa underordnade objekt som brickor. Bilder för dessa plattor kan laddas upp i inställningarna för varje enskilt objekt." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_tr.po b/components/ILIAS/Container/lang/cont_tr.po new file mode 100644 index 000000000000..bcc0152d94a3 --- /dev/null +++ b/components/ILIAS/Container/lang/cont_tr.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +#, fuzzy +msgid "cont_add_skill" +msgstr "Add Competence" + +#, fuzzy +msgid "cont_assign_competence" +msgstr "Assign Competences to Members" + +#, fuzzy +msgid "cont_assign_skills" +msgstr "Assign Competences" + +#, fuzzy +msgid "cont_block_limit" +msgstr "Limit Items per Block" + +#, fuzzy +msgid "cont_block_limit_info" +msgstr "If a block contains more items, a \"Show more\" button will appear." + +#, fuzzy +msgid "cont_cont_skills" +msgstr "Assigned Competences of Members" + +#, fuzzy +msgid "cont_deassign_competence" +msgstr "Deassign Competences" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +#, fuzzy +msgid "cont_item_list" +msgstr "List" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +#, fuzzy +msgid "cont_list_presentation" +msgstr "Item Presentation" + +#, fuzzy +msgid "cont_mem_skills" +msgstr "Competences" + +#, fuzzy +msgid "cont_news_edited" +msgstr "Bearbeitet" + +#, fuzzy +msgid "cont_news_settings" +msgstr "News Settings" + +#, fuzzy +msgid "cont_news_timeline" +msgstr "News Timeline" + +#, fuzzy +msgid "cont_news_timeline_auto_entries" +msgstr "Include Automatic Entries" + +#, fuzzy +msgid "cont_news_timeline_auto_entries_info" +msgstr "Include all news that are created automatically, e.g. forum posts, new files, etc." + +#, fuzzy +msgid "cont_news_timeline_info" +msgstr "Activates News Timeline Tab" + +#, fuzzy +msgid "cont_news_timeline_landing_page" +msgstr "Landing Page" + +#, fuzzy +msgid "cont_news_timeline_landing_page_info" +msgstr "Timeline page will be the landing page." + +#, fuzzy +msgid "cont_news_timeline_tab" +msgstr "Timeline" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +#, fuzzy +msgid "cont_path" +msgstr "Path" + +#, fuzzy +msgid "cont_publish_assignment" +msgstr "Publish Assignments" + +#, fuzzy +msgid "cont_published" +msgstr "Published" + +#, fuzzy +msgid "cont_really_deassign_skills" +msgstr "Do you really want to deassign all competences from the users?" + +#, fuzzy +msgid "cont_really_remove_skill_from_course" +msgstr "Do you really want to remove these competences from the list?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +#, fuzzy +msgid "cont_show_more" +msgstr "Show More" + +#, fuzzy +msgid "cont_skill" +msgstr "Competence" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_assigned_comp" +msgstr "Competence Selection" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +#, fuzzy +msgid "cont_skill_do_not_set" +msgstr "Do not set" + +#, fuzzy +msgid "cont_skill_members" +msgstr "Members" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +#, fuzzy +msgid "cont_skill_no_skill" +msgstr "No value (Reset)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_publish" +msgstr "Publish" + +#, fuzzy +msgid "cont_skill_publish_auto" +msgstr "Automatic" + +#, fuzzy +msgid "cont_skill_publish_auto_info" +msgstr "Competence assignments for members are immediately visible for members." + +#, fuzzy +msgid "cont_skill_publish_manual" +msgstr "Manual" + +#, fuzzy +msgid "cont_skill_publish_manual_info" +msgstr "Competence assignments for members must be published before they become visible for members." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +#, fuzzy +msgid "cont_tile_view" +msgstr "Tiles" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_uk.po b/components/ILIAS/Container/lang/cont_uk.po new file mode 100644 index 000000000000..b4c402d15a62 --- /dev/null +++ b/components/ILIAS/Container/lang/cont_uk.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +#, fuzzy +msgid "cont_add_skill" +msgstr "Add Competence" + +#, fuzzy +msgid "cont_assign_competence" +msgstr "Assign Competences to Members" + +#, fuzzy +msgid "cont_assign_skills" +msgstr "Assign Competences" + +#, fuzzy +msgid "cont_block_limit" +msgstr "Limit Items per Block" + +#, fuzzy +msgid "cont_block_limit_info" +msgstr "If a block contains more items, a \"Show more\" button will appear." + +#, fuzzy +msgid "cont_cont_skills" +msgstr "Assigned Competences of Members" + +#, fuzzy +msgid "cont_deassign_competence" +msgstr "Deassign Competences" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +#, fuzzy +msgid "cont_item_list" +msgstr "List" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +#, fuzzy +msgid "cont_list_presentation" +msgstr "Item Presentation" + +#, fuzzy +msgid "cont_mem_skills" +msgstr "Competences" + +#, fuzzy +msgid "cont_news_edited" +msgstr "Bearbeitet" + +#, fuzzy +msgid "cont_news_settings" +msgstr "News Settings" + +#, fuzzy +msgid "cont_news_timeline" +msgstr "News Timeline" + +#, fuzzy +msgid "cont_news_timeline_auto_entries" +msgstr "Include Automatic Entries" + +#, fuzzy +msgid "cont_news_timeline_auto_entries_info" +msgstr "Include all news that are created automatically, e.g. forum posts, new files, etc." + +#, fuzzy +msgid "cont_news_timeline_info" +msgstr "Activates News Timeline Tab" + +#, fuzzy +msgid "cont_news_timeline_landing_page" +msgstr "Landing Page" + +#, fuzzy +msgid "cont_news_timeline_landing_page_info" +msgstr "Timeline page will be the landing page." + +#, fuzzy +msgid "cont_news_timeline_tab" +msgstr "Timeline" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +#, fuzzy +msgid "cont_path" +msgstr "Path" + +#, fuzzy +msgid "cont_publish_assignment" +msgstr "Publish Assignments" + +#, fuzzy +msgid "cont_published" +msgstr "Published" + +#, fuzzy +msgid "cont_really_deassign_skills" +msgstr "Do you really want to deassign all competences from the users?" + +#, fuzzy +msgid "cont_really_remove_skill_from_course" +msgstr "Do you really want to remove these competences from the list?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +#, fuzzy +msgid "cont_show_more" +msgstr "Show More" + +#, fuzzy +msgid "cont_skill" +msgstr "Competence" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_assigned_comp" +msgstr "Competence Selection" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +#, fuzzy +msgid "cont_skill_do_not_set" +msgstr "Do not set" + +#, fuzzy +msgid "cont_skill_members" +msgstr "Members" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +#, fuzzy +msgid "cont_skill_no_skill" +msgstr "No value (Reset)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_publish" +msgstr "Publish" + +#, fuzzy +msgid "cont_skill_publish_auto" +msgstr "Automatic" + +#, fuzzy +msgid "cont_skill_publish_auto_info" +msgstr "Competence assignments for members are immediately visible for members." + +#, fuzzy +msgid "cont_skill_publish_manual" +msgstr "Manual" + +#, fuzzy +msgid "cont_skill_publish_manual_info" +msgstr "Competence assignments for members must be published before they become visible for members." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +#, fuzzy +msgid "cont_tile_view" +msgstr "Tiles" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_vi.po b/components/ILIAS/Container/lang/cont_vi.po new file mode 100644 index 000000000000..58ad867e6e3d --- /dev/null +++ b/components/ILIAS/Container/lang/cont_vi.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +#, fuzzy +msgid "cont_add_skill" +msgstr "Add Competence" + +#, fuzzy +msgid "cont_assign_competence" +msgstr "Assign Competences to Members" + +#, fuzzy +msgid "cont_assign_skills" +msgstr "Assign Competences" + +#, fuzzy +msgid "cont_block_limit" +msgstr "Limit Items per Block" + +#, fuzzy +msgid "cont_block_limit_info" +msgstr "If a block contains more items, a \"Show more\" button will appear." + +#, fuzzy +msgid "cont_cont_skills" +msgstr "Assigned Competences of Members" + +#, fuzzy +msgid "cont_deassign_competence" +msgstr "Deassign Competences" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +#, fuzzy +msgid "cont_item_list" +msgstr "List" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +#, fuzzy +msgid "cont_list_presentation" +msgstr "Item Presentation" + +#, fuzzy +msgid "cont_mem_skills" +msgstr "Competences" + +#, fuzzy +msgid "cont_news_edited" +msgstr "Bearbeitet" + +#, fuzzy +msgid "cont_news_settings" +msgstr "News Settings" + +#, fuzzy +msgid "cont_news_timeline" +msgstr "News Timeline" + +#, fuzzy +msgid "cont_news_timeline_auto_entries" +msgstr "Include Automatic Entries" + +#, fuzzy +msgid "cont_news_timeline_auto_entries_info" +msgstr "Include all news that are created automatically, e.g. forum posts, new files, etc." + +#, fuzzy +msgid "cont_news_timeline_info" +msgstr "Activates News Timeline Tab" + +#, fuzzy +msgid "cont_news_timeline_landing_page" +msgstr "Landing Page" + +#, fuzzy +msgid "cont_news_timeline_landing_page_info" +msgstr "Timeline page will be the landing page." + +#, fuzzy +msgid "cont_news_timeline_tab" +msgstr "Timeline" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +#, fuzzy +msgid "cont_path" +msgstr "Path" + +#, fuzzy +msgid "cont_publish_assignment" +msgstr "Publish Assignments" + +#, fuzzy +msgid "cont_published" +msgstr "Published" + +#, fuzzy +msgid "cont_really_deassign_skills" +msgstr "Do you really want to deassign all competences from the users?" + +#, fuzzy +msgid "cont_really_remove_skill_from_course" +msgstr "Do you really want to remove these competences from the list?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +#, fuzzy +msgid "cont_show_more" +msgstr "Show More" + +#, fuzzy +msgid "cont_skill" +msgstr "Competence" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_assigned_comp" +msgstr "Competence Selection" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +#, fuzzy +msgid "cont_skill_do_not_set" +msgstr "Do not set" + +#, fuzzy +msgid "cont_skill_members" +msgstr "Members" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +#, fuzzy +msgid "cont_skill_no_skill" +msgstr "No value (Reset)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_publish" +msgstr "Publish" + +#, fuzzy +msgid "cont_skill_publish_auto" +msgstr "Automatic" + +#, fuzzy +msgid "cont_skill_publish_auto_info" +msgstr "Competence assignments for members are immediately visible for members." + +#, fuzzy +msgid "cont_skill_publish_manual" +msgstr "Manual" + +#, fuzzy +msgid "cont_skill_publish_manual_info" +msgstr "Competence assignments for members must be published before they become visible for members." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +#, fuzzy +msgid "cont_tile_view" +msgstr "Tiles" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/Container/lang/cont_zh.po b/components/ILIAS/Container/lang/cont_zh.po new file mode 100644 index 000000000000..4155501edbe8 --- /dev/null +++ b/components/ILIAS/Container/lang/cont_zh.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: cont\n" + +#, fuzzy +msgid "cont_add_global_profile" +msgstr "Add Global Profile" + +#, fuzzy +msgid "cont_add_local_profile" +msgstr "Add Local Profile" + +#, fuzzy +msgid "cont_add_skill" +msgstr "Add Competence" + +#, fuzzy +msgid "cont_assign_competence" +msgstr "Assign Competences to Members" + +#, fuzzy +msgid "cont_assign_skills" +msgstr "Assign Competences" + +#, fuzzy +msgid "cont_block_limit" +msgstr "Limit Items per Block" + +#, fuzzy +msgid "cont_block_limit_info" +msgstr "If a block contains more items, a \"Show more\" button will appear." + +#, fuzzy +msgid "cont_cont_skills" +msgstr "Assigned Competences of Members" + +#, fuzzy +msgid "cont_deassign_competence" +msgstr "Deassign Competences" + +#, fuzzy +msgid "cont_filter" +msgstr "Filter" + +#, fuzzy +msgid "cont_filter_field" +msgstr "Field" + +#, fuzzy +msgid "cont_filter_fields" +msgstr "Filter Fields" + +#, fuzzy +msgid "cont_filter_record" +msgstr "Record" + +#, fuzzy +msgid "cont_found_objects" +msgstr "Found Objects" + +#, fuzzy +msgid "cont_item_list" +msgstr "List" + +#, fuzzy +msgid "cont_item_list_info" +msgstr "Objects located within this container are displayed in the form of a list." + +#, fuzzy +msgid "cont_list_presentation" +msgstr "Item Presentation" + +#, fuzzy +msgid "cont_mem_skills" +msgstr "Competences" + +#, fuzzy +msgid "cont_news_edited" +msgstr "Bearbeitet" + +#, fuzzy +msgid "cont_news_settings" +msgstr "News Settings" + +#, fuzzy +msgid "cont_news_timeline" +msgstr "News Timeline" + +#, fuzzy +msgid "cont_news_timeline_auto_entries" +msgstr "Include Automatic Entries" + +#, fuzzy +msgid "cont_news_timeline_auto_entries_info" +msgstr "Include all news that are created automatically, e.g. forum posts, new files, etc." + +#, fuzzy +msgid "cont_news_timeline_info" +msgstr "Activates News Timeline Tab" + +#, fuzzy +msgid "cont_news_timeline_landing_page" +msgstr "Landing Page" + +#, fuzzy +msgid "cont_news_timeline_landing_page_info" +msgstr "Timeline page will be the landing page." + +#, fuzzy +msgid "cont_news_timeline_tab" +msgstr "Timeline" + +#, fuzzy +msgid "cont_no_title" +msgstr "Empty Title" + +#, fuzzy +msgid "cont_only_crs_grp_fold_download" +msgstr "Only courses, groups, folders or files can be downloaded." + +#, fuzzy +msgid "cont_page_type_cont" +msgstr "Repository Page (Cours, Group, ...)" + +#, fuzzy +msgid "cont_page_type_cstr" +msgstr "Course Start Page (Learning Objectives View)" + +#, fuzzy +msgid "cont_path" +msgstr "Path" + +#, fuzzy +msgid "cont_publish_assignment" +msgstr "Publish Assignments" + +#, fuzzy +msgid "cont_published" +msgstr "Published" + +#, fuzzy +msgid "cont_really_deassign_skills" +msgstr "Do you really want to deassign all competences from the users?" + +#, fuzzy +msgid "cont_really_remove_skill_from_course" +msgstr "Do you really want to remove these competences from the list?" + +#, fuzzy +msgid "cont_select_fields" +msgstr "Select Fields" + +#, fuzzy +msgid "cont_show_more" +msgstr "Show More" + +#, fuzzy +msgid "cont_skill" +msgstr "Competence" + +#, fuzzy +msgid "cont_skill_ass_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_assigned_comp" +msgstr "Competence Selection" + +#, fuzzy +msgid "cont_skill_assigned_profiles" +msgstr "Profile Selection" + +#, fuzzy +msgid "cont_skill_deletion_not_possible" +msgstr "Deletion of global competence profiles is not possible. Please select only local competence profiles." + +#, fuzzy +msgid "cont_skill_do_not_set" +msgstr "Do not set" + +#, fuzzy +msgid "cont_skill_members" +msgstr "Members" + +#, fuzzy +msgid "cont_skill_no_profile_selected" +msgstr "Please select a profile." + +#, fuzzy +msgid "cont_skill_no_skill" +msgstr "No value (Reset)" + +#, fuzzy +msgid "cont_skill_no_skills_selected" +msgstr "No competences have been selected yet. Please add at least one competence first under \"Competence Selection\"." + +#, fuzzy +msgid "cont_skill_profile" +msgstr "Profile" + +#, fuzzy +msgid "cont_skill_profiles" +msgstr "Assigned Profiles of Members" + +#, fuzzy +msgid "cont_skill_publish" +msgstr "Publish" + +#, fuzzy +msgid "cont_skill_publish_auto" +msgstr "Automatic" + +#, fuzzy +msgid "cont_skill_publish_auto_info" +msgstr "Competence assignments for members are immediately visible for members." + +#, fuzzy +msgid "cont_skill_publish_manual" +msgstr "Manual" + +#, fuzzy +msgid "cont_skill_publish_manual_info" +msgstr "Competence assignments for members must be published before they become visible for members." + +#, fuzzy +msgid "cont_skill_really_delete_profile_from_list" +msgstr "Do you really want to delete this profile?" + +#, fuzzy +msgid "cont_skill_really_delete_profiles_from_list" +msgstr "Do you really want to delete these profiles?" + +#, fuzzy +msgid "cont_skill_really_remove_profile_from_list" +msgstr "Do you really want to remove this profile from the list?" + +#, fuzzy +msgid "cont_skill_really_remove_profiles_from_list" +msgstr "Do you really want to remove these profiles from the list?" + +#, fuzzy +msgid "cont_skill_records" +msgstr "Competence Records" + +#, fuzzy +msgid "cont_skill_removal_not_possible" +msgstr "Removing of local competence profiles is not possible. Please select only global competence profiles." + +#, fuzzy +msgid "cont_std_filter_title_1" +msgstr "Title" + +#, fuzzy +msgid "cont_std_filter_title_2" +msgstr "Description" + +#, fuzzy +msgid "cont_std_filter_title_3" +msgstr "Title/Description" + +#, fuzzy +msgid "cont_std_filter_title_4" +msgstr "Keyword" + +#, fuzzy +msgid "cont_std_filter_title_5" +msgstr "Author" + +#, fuzzy +msgid "cont_std_filter_title_6" +msgstr "Copyright" + +#, fuzzy +msgid "cont_std_filter_title_7" +msgstr "Tutorial Support" + +#, fuzzy +msgid "cont_std_filter_title_8" +msgstr "Object Type" + +#, fuzzy +msgid "cont_std_filter_title_9" +msgstr "Online/Offline" + +#, fuzzy +msgid "cont_std_record_title" +msgstr "Standard" + +#, fuzzy +msgid "cont_tile_size" +msgstr "Tile Size" + +#, fuzzy +msgid "cont_tile_size_0" +msgstr "normal (up to four tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_1" +msgstr "small (up to six tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_2" +msgstr "large (up to three tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_3" +msgstr "extra large (up to two tiles in a row)" + +#, fuzzy +msgid "cont_tile_size_4" +msgstr "full (one tile in a row)" + +#, fuzzy +msgid "cont_tile_view" +msgstr "Tiles" + +#, fuzzy +msgid "cont_tile_view_info" +msgstr "Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object." + +#, fuzzy +msgid "cont_trash_general_usage" +msgstr "If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters \"Type\" and \"Deleted on\" helps this process. Then finally remove the containers." diff --git a/components/ILIAS/ContainerReference/ContainerReference.php b/components/ILIAS/ContainerReference/ContainerReference.php index 2884bb99e744..608845adcd3b 100644 --- a/components/ILIAS/ContainerReference/ContainerReference.php +++ b/components/ILIAS/ContainerReference/ContainerReference.php @@ -20,6 +20,9 @@ namespace ILIAS; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; + class ContainerReference implements Component\Component { public function init( @@ -33,5 +36,9 @@ public function init( array | \ArrayAccess &$internal, ): void { // ... + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'objref' + ); } } diff --git a/components/ILIAS/ContainerReference/lang/objref.pot b/components/ILIAS/ContainerReference/lang/objref.pot new file mode 100644 index 000000000000..fdf4839bfce9 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref.pot @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "" + +msgid "objref_edit_ref" +msgstr "" + +msgid "objref_edit_title" +msgstr "" + +msgid "objref_failure_target_type" +msgstr "" + +msgid "objref_reuse_title" +msgstr "" + +msgid "objref_title_settings" +msgstr "" diff --git a/components/ILIAS/ContainerReference/lang/objref_ar.po b/components/ILIAS/ContainerReference/lang/objref_ar.po new file mode 100644 index 000000000000..81cd5150cf58 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_ar.po @@ -0,0 +1,28 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "Use Custom Title" + +msgid "objref_edit_ref" +msgstr "Target Settings" + +msgid "objref_edit_title" +msgstr "Title Settings" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +msgid "objref_reuse_title" +msgstr "Reuse Title of Reference" + +msgid "objref_title_settings" +msgstr "Edit Reference Title" diff --git a/components/ILIAS/ContainerReference/lang/objref_bg.po b/components/ILIAS/ContainerReference/lang/objref_bg.po new file mode 100644 index 000000000000..8026e1731b5a --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_bg.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: objref\n" + +#, fuzzy +msgid "objref_custom_title" +msgstr "Use Custom Title" + +#, fuzzy +msgid "objref_edit_ref" +msgstr "Target Settings" + +#, fuzzy +msgid "objref_edit_title" +msgstr "Title Settings" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +#, fuzzy +msgid "objref_reuse_title" +msgstr "Reuse Title of Reference" + +#, fuzzy +msgid "objref_title_settings" +msgstr "Edit Reference Title" diff --git a/components/ILIAS/ContainerReference/lang/objref_cs.po b/components/ILIAS/ContainerReference/lang/objref_cs.po new file mode 100644 index 000000000000..b05e26edf046 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_cs.po @@ -0,0 +1,28 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "Použít vlastní název" + +msgid "objref_edit_ref" +msgstr "Nastavení cíle" + +msgid "objref_edit_title" +msgstr "Nastavení názvu" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +msgid "objref_reuse_title" +msgstr "Opětovné použití referenčního názvu" + +msgid "objref_title_settings" +msgstr "Upravit referenční název" diff --git a/components/ILIAS/ContainerReference/lang/objref_da.po b/components/ILIAS/ContainerReference/lang/objref_da.po new file mode 100644 index 000000000000..202dca317c9e --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_da.po @@ -0,0 +1,31 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "Brugerdefineret titel" + +#, fuzzy +msgid "objref_edit_ref" +msgstr "Target Settings" + +msgid "objref_edit_title" +msgstr "Titel indstillinger" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +#, fuzzy +msgid "objref_reuse_title" +msgstr "Reuse Title of Reference" + +#, fuzzy +msgid "objref_title_settings" +msgstr "Edit Reference Title" diff --git a/components/ILIAS/ContainerReference/lang/objref_de.po b/components/ILIAS/ContainerReference/lang/objref_de.po new file mode 100644 index 000000000000..f7e6741f0ae1 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_de.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "Eigenen Titel eingeben" + +msgid "objref_edit_ref" +msgstr "Ziel des Links" + +msgid "objref_edit_title" +msgstr "Titel" + +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +msgid "objref_reuse_title" +msgstr "Titel des verlinkten Objekts übernehmen" + +msgid "objref_title_settings" +msgstr "Titel des verlinkten Objekts" diff --git a/components/ILIAS/ContainerReference/lang/objref_el.po b/components/ILIAS/ContainerReference/lang/objref_el.po new file mode 100644 index 000000000000..fb25b07a2392 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_el.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: objref\n" + +#, fuzzy +msgid "objref_custom_title" +msgstr "Use Custom Title" + +#, fuzzy +msgid "objref_edit_ref" +msgstr "Target Settings" + +#, fuzzy +msgid "objref_edit_title" +msgstr "Title Settings" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +#, fuzzy +msgid "objref_reuse_title" +msgstr "Reuse Title of Reference" + +#, fuzzy +msgid "objref_title_settings" +msgstr "Edit Reference Title" diff --git a/components/ILIAS/ContainerReference/lang/objref_en.po b/components/ILIAS/ContainerReference/lang/objref_en.po new file mode 100644 index 000000000000..a659c168e8e8 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_en.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "Use Own Title" + +msgid "objref_edit_ref" +msgstr "Link Target" + +msgid "objref_edit_title" +msgstr "Title" + +msgid "objref_failure_target_type" +msgstr "Target of link must be of following type:" + +msgid "objref_reuse_title" +msgstr "Adopt Title of Linked Object" + +msgid "objref_title_settings" +msgstr "Title of Linked Object" diff --git a/components/ILIAS/ContainerReference/lang/objref_es.po b/components/ILIAS/ContainerReference/lang/objref_es.po new file mode 100644 index 000000000000..801290222e0e --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_es.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "Usar título propio" + +msgid "objref_edit_ref" +msgstr "Destino del enlace" + +msgid "objref_edit_title" +msgstr "Título" + +msgid "objref_failure_target_type" +msgstr "El destino del enlace debe ser del siguiente tipo:" + +msgid "objref_reuse_title" +msgstr "Adoptar título del objeto enlazado" + +msgid "objref_title_settings" +msgstr "Título del objeto enlazado" diff --git a/components/ILIAS/ContainerReference/lang/objref_et.po b/components/ILIAS/ContainerReference/lang/objref_et.po new file mode 100644 index 000000000000..44222ddc8391 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_et.po @@ -0,0 +1,28 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "Use Custom Title" + +msgid "objref_edit_ref" +msgstr "Target Settings" + +msgid "objref_edit_title" +msgstr "Title Settings" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +msgid "objref_reuse_title" +msgstr "Reuse Title of Reference" + +msgid "objref_title_settings" +msgstr "Edit Reference Title" diff --git a/components/ILIAS/ContainerReference/lang/objref_fa.po b/components/ILIAS/ContainerReference/lang/objref_fa.po new file mode 100644 index 000000000000..05e2ff4295b2 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_fa.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: objref\n" + +#, fuzzy +msgid "objref_custom_title" +msgstr "Use Custom Title" + +#, fuzzy +msgid "objref_edit_ref" +msgstr "Target Settings" + +#, fuzzy +msgid "objref_edit_title" +msgstr "Title Settings" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +#, fuzzy +msgid "objref_reuse_title" +msgstr "Reuse Title of Reference" + +#, fuzzy +msgid "objref_title_settings" +msgstr "Edit Reference Title" diff --git a/components/ILIAS/ContainerReference/lang/objref_fr.po b/components/ILIAS/ContainerReference/lang/objref_fr.po new file mode 100644 index 000000000000..2ba18992f288 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_fr.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "Utiliser un Titre Personnalisé" + +msgid "objref_edit_ref" +msgstr "Réglage de la Cible" + +msgid "objref_edit_title" +msgstr "Réglage du Titre" + +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +msgid "objref_reuse_title" +msgstr "Réutiliser le Titre de la Référence" + +msgid "objref_title_settings" +msgstr "Editer le Titre de la Référence" diff --git a/components/ILIAS/ContainerReference/lang/objref_hr.po b/components/ILIAS/ContainerReference/lang/objref_hr.po new file mode 100644 index 000000000000..eec58dad3fff --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_hr.po @@ -0,0 +1,28 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "Koristi prilagođeni naslov" + +msgid "objref_edit_ref" +msgstr "Postavke cilja" + +msgid "objref_edit_title" +msgstr "Postavke naslova" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Target of link must be of following type:" + +msgid "objref_reuse_title" +msgstr "Ponovno upotrijebi naslov reference" + +msgid "objref_title_settings" +msgstr "Uredi naslov reference" diff --git a/components/ILIAS/ContainerReference/lang/objref_hu.po b/components/ILIAS/ContainerReference/lang/objref_hu.po new file mode 100644 index 000000000000..1c0be2495442 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_hu.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "Egyéni cím" + +msgid "objref_edit_ref" +msgstr "Forrás" + +msgid "objref_edit_title" +msgstr "Címbeállítások" + +msgid "objref_failure_target_type" +msgstr "A link céljának a következő típusúnak kell lennie:" + +msgid "objref_reuse_title" +msgstr "Forráskurzus címe" + +msgid "objref_title_settings" +msgstr "A linkelt objektum címe" diff --git a/components/ILIAS/ContainerReference/lang/objref_it.po b/components/ILIAS/ContainerReference/lang/objref_it.po new file mode 100644 index 000000000000..17ffc9ecb524 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_it.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "Usa il proprio titolo" + +msgid "objref_edit_ref" +msgstr "Target di riferimento" + +msgid "objref_edit_title" +msgstr "Titolo dell'oggetto" + +msgid "objref_failure_target_type" +msgstr "Il target del link deve essere del seguente tipo:" + +msgid "objref_reuse_title" +msgstr "Assumere il titolo del riferimento" + +msgid "objref_title_settings" +msgstr "Titolo del riferimento" diff --git a/components/ILIAS/ContainerReference/lang/objref_ja.po b/components/ILIAS/ContainerReference/lang/objref_ja.po new file mode 100644 index 000000000000..91f3ac8eecad --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_ja.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "カスタムタイトルを使用" + +msgid "objref_edit_ref" +msgstr "ターゲット設定" + +msgid "objref_edit_title" +msgstr "タイトル設定" + +msgid "objref_failure_target_type" +msgstr "リンクのターゲットは次のタイプである必要があります:" + +msgid "objref_reuse_title" +msgstr "参照のタイトルを再利用" + +msgid "objref_title_settings" +msgstr "リンクされたオブジェクトのタイトル" diff --git a/components/ILIAS/ContainerReference/lang/objref_ka.po b/components/ILIAS/ContainerReference/lang/objref_ka.po new file mode 100644 index 000000000000..4ca560ca2f68 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_ka.po @@ -0,0 +1,28 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "Use Custom Title" + +msgid "objref_edit_ref" +msgstr "Target Settings" + +msgid "objref_edit_title" +msgstr "Title Settings" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +msgid "objref_reuse_title" +msgstr "Reuse Title of Reference" + +msgid "objref_title_settings" +msgstr "Edit Reference Title" diff --git a/components/ILIAS/ContainerReference/lang/objref_lt.po b/components/ILIAS/ContainerReference/lang/objref_lt.po new file mode 100644 index 000000000000..b8caef4b61c6 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_lt.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: objref\n" + +#, fuzzy +msgid "objref_custom_title" +msgstr "Use Custom Title" + +#, fuzzy +msgid "objref_edit_ref" +msgstr "Target Settings" + +#, fuzzy +msgid "objref_edit_title" +msgstr "Title Settings" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +#, fuzzy +msgid "objref_reuse_title" +msgstr "Reuse Title of Reference" + +#, fuzzy +msgid "objref_title_settings" +msgstr "Edit Reference Title" diff --git a/components/ILIAS/ContainerReference/lang/objref_nl.po b/components/ILIAS/ContainerReference/lang/objref_nl.po new file mode 100644 index 000000000000..a589efaa8367 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_nl.po @@ -0,0 +1,28 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "Use Custom Title" + +msgid "objref_edit_ref" +msgstr "Target Settings" + +msgid "objref_edit_title" +msgstr "Title Settings" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +msgid "objref_reuse_title" +msgstr "Reuse Title of Reference" + +msgid "objref_title_settings" +msgstr "Edit Reference Title" diff --git a/components/ILIAS/ContainerReference/lang/objref_pl.po b/components/ILIAS/ContainerReference/lang/objref_pl.po new file mode 100644 index 000000000000..26da15274e83 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_pl.po @@ -0,0 +1,28 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "Użyj własny tytuł" + +msgid "objref_edit_ref" +msgstr "Cel linku" + +msgid "objref_edit_title" +msgstr "Tytuł" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +msgid "objref_reuse_title" +msgstr "Przejmij tytuł podlinkowanego obiektu" + +msgid "objref_title_settings" +msgstr "Tytuł podlinkowanego obiektu" diff --git a/components/ILIAS/ContainerReference/lang/objref_pt.po b/components/ILIAS/ContainerReference/lang/objref_pt.po new file mode 100644 index 000000000000..84d2179fff95 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_pt.po @@ -0,0 +1,28 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "Usar título personalizado" + +msgid "objref_edit_ref" +msgstr "Definições de destino" + +msgid "objref_edit_title" +msgstr "Definições de título" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +msgid "objref_reuse_title" +msgstr "Reutilizar título de referência" + +msgid "objref_title_settings" +msgstr "Editar título do referência" diff --git a/components/ILIAS/ContainerReference/lang/objref_ro.po b/components/ILIAS/ContainerReference/lang/objref_ro.po new file mode 100644 index 000000000000..5fcc015a59a0 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_ro.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: objref\n" + +#, fuzzy +msgid "objref_custom_title" +msgstr "Use Custom Title" + +#, fuzzy +msgid "objref_edit_ref" +msgstr "Target Settings" + +#, fuzzy +msgid "objref_edit_title" +msgstr "Title Settings" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +#, fuzzy +msgid "objref_reuse_title" +msgstr "Reuse Title of Reference" + +#, fuzzy +msgid "objref_title_settings" +msgstr "Edit Reference Title" diff --git a/components/ILIAS/ContainerReference/lang/objref_ru.po b/components/ILIAS/ContainerReference/lang/objref_ru.po new file mode 100644 index 000000000000..3d561492c344 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_ru.po @@ -0,0 +1,28 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "Use Custom Title" + +msgid "objref_edit_ref" +msgstr "Target Settings" + +msgid "objref_edit_title" +msgstr "Title Settings" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +msgid "objref_reuse_title" +msgstr "Reuse Title of Reference" + +msgid "objref_title_settings" +msgstr "Edit Reference Title" diff --git a/components/ILIAS/ContainerReference/lang/objref_sk.po b/components/ILIAS/ContainerReference/lang/objref_sk.po new file mode 100644 index 000000000000..3852b7744167 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_sk.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: objref\n" + +#, fuzzy +msgid "objref_custom_title" +msgstr "Use Custom Title" + +#, fuzzy +msgid "objref_edit_ref" +msgstr "Target Settings" + +#, fuzzy +msgid "objref_edit_title" +msgstr "Title Settings" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +#, fuzzy +msgid "objref_reuse_title" +msgstr "Reuse Title of Reference" + +#, fuzzy +msgid "objref_title_settings" +msgstr "Edit Reference Title" diff --git a/components/ILIAS/ContainerReference/lang/objref_sl.po b/components/ILIAS/ContainerReference/lang/objref_sl.po new file mode 100644 index 000000000000..565bb482be6c --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_sl.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "Uporabi naslov po meri" + +msgid "objref_edit_ref" +msgstr "Cilj povezave" + +msgid "objref_edit_title" +msgstr "Naslov" + +msgid "objref_failure_target_type" +msgstr "The target of the link must be of the following type" + +msgid "objref_reuse_title" +msgstr "Prevzemi naslov povezanega objekta" + +msgid "objref_title_settings" +msgstr "Naslov povezanega objekta" diff --git a/components/ILIAS/ContainerReference/lang/objref_sq.po b/components/ILIAS/ContainerReference/lang/objref_sq.po new file mode 100644 index 000000000000..124fd038ea89 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_sq.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: objref\n" + +#, fuzzy +msgid "objref_custom_title" +msgstr "Use Custom Title" + +#, fuzzy +msgid "objref_edit_ref" +msgstr "Target Settings" + +#, fuzzy +msgid "objref_edit_title" +msgstr "Title Settings" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +#, fuzzy +msgid "objref_reuse_title" +msgstr "Reuse Title of Reference" + +#, fuzzy +msgid "objref_title_settings" +msgstr "Edit Reference Title" diff --git a/components/ILIAS/ContainerReference/lang/objref_sr.po b/components/ILIAS/ContainerReference/lang/objref_sr.po new file mode 100644 index 000000000000..4c041f62be47 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_sr.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: objref\n" + +#, fuzzy +msgid "objref_custom_title" +msgstr "Use Custom Title" + +#, fuzzy +msgid "objref_edit_ref" +msgstr "Target Settings" + +#, fuzzy +msgid "objref_edit_title" +msgstr "Title Settings" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +#, fuzzy +msgid "objref_reuse_title" +msgstr "Reuse Title of Reference" + +#, fuzzy +msgid "objref_title_settings" +msgstr "Edit Reference Title" diff --git a/components/ILIAS/ContainerReference/lang/objref_sv.po b/components/ILIAS/ContainerReference/lang/objref_sv.po new file mode 100644 index 000000000000..1fa615f8ecf7 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_sv.po @@ -0,0 +1,27 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "Ange din egen titel" + +msgid "objref_edit_ref" +msgstr "Länkens mål" + +msgid "objref_edit_title" +msgstr "Titel" + +msgid "objref_failure_target_type" +msgstr "Målet för länken måste vara av följande typ" + +msgid "objref_reuse_title" +msgstr "Ta över titeln på det länkade objektet" + +msgid "objref_title_settings" +msgstr "Titel på det länkade objektet" diff --git a/components/ILIAS/ContainerReference/lang/objref_tr.po b/components/ILIAS/ContainerReference/lang/objref_tr.po new file mode 100644 index 000000000000..7f620b1e553e --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_tr.po @@ -0,0 +1,28 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "Özel Başlık Kullan" + +msgid "objref_edit_ref" +msgstr "Hedef Ayarları" + +msgid "objref_edit_title" +msgstr "Başlık Ayarları" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +msgid "objref_reuse_title" +msgstr "Referans Yeniden Başlığı" + +msgid "objref_title_settings" +msgstr "Edit Referans Başlığı" diff --git a/components/ILIAS/ContainerReference/lang/objref_uk.po b/components/ILIAS/ContainerReference/lang/objref_uk.po new file mode 100644 index 000000000000..897cba84bd27 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_uk.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: objref\n" + +#, fuzzy +msgid "objref_custom_title" +msgstr "Use Custom Title" + +#, fuzzy +msgid "objref_edit_ref" +msgstr "Target Settings" + +#, fuzzy +msgid "objref_edit_title" +msgstr "Title Settings" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +#, fuzzy +msgid "objref_reuse_title" +msgstr "Reuse Title of Reference" + +#, fuzzy +msgid "objref_title_settings" +msgstr "Edit Reference Title" diff --git a/components/ILIAS/ContainerReference/lang/objref_vi.po b/components/ILIAS/ContainerReference/lang/objref_vi.po new file mode 100644 index 000000000000..e454923dd5d4 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_vi.po @@ -0,0 +1,33 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: objref\n" + +#, fuzzy +msgid "objref_custom_title" +msgstr "Use Custom Title" + +#, fuzzy +msgid "objref_edit_ref" +msgstr "Target Settings" + +#, fuzzy +msgid "objref_edit_title" +msgstr "Title Settings" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +#, fuzzy +msgid "objref_reuse_title" +msgstr "Reuse Title of Reference" + +#, fuzzy +msgid "objref_title_settings" +msgstr "Edit Reference Title" diff --git a/components/ILIAS/ContainerReference/lang/objref_zh.po b/components/ILIAS/ContainerReference/lang/objref_zh.po new file mode 100644 index 000000000000..fea330c8a355 --- /dev/null +++ b/components/ILIAS/ContainerReference/lang/objref_zh.po @@ -0,0 +1,28 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: objref\n" + +msgid "objref_custom_title" +msgstr "使用自定义标题" + +msgid "objref_edit_ref" +msgstr "目标设置" + +msgid "objref_edit_title" +msgstr "标题设置" + +#, fuzzy +msgid "objref_failure_target_type" +msgstr "Das Ziel des Links muss vom folgendem Typ sein:" + +msgid "objref_reuse_title" +msgstr "重用标题参考" + +msgid "objref_title_settings" +msgstr "编辑参考标题" diff --git a/components/ILIAS/ContentPage/ContentPage.php b/components/ILIAS/ContentPage/ContentPage.php index 477681cccfb4..b2c146d55ba7 100644 --- a/components/ILIAS/ContentPage/ContentPage.php +++ b/components/ILIAS/ContentPage/ContentPage.php @@ -20,6 +20,9 @@ namespace ILIAS; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; + class ContentPage implements Component\Component { public function init( @@ -36,5 +39,9 @@ public function init( new \ilContentPageSetupAgent( $pull[\ILIAS\Refinery\Factory::class] ); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'cpad' + ); } } diff --git a/components/ILIAS/ContentPage/lang/cpad.pot b/components/ILIAS/ContentPage/lang/cpad.pot new file mode 100644 index 000000000000..0a148f2ec817 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad.pot @@ -0,0 +1,12 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: cpad\n" + +msgid "cpad_reading_time_status" +msgstr "" + +msgid "cpad_reading_time_status_desc" +msgstr "" diff --git a/components/ILIAS/ContentPage/lang/cpad_ar.po b/components/ILIAS/ContentPage/lang/cpad_ar.po new file mode 100644 index 000000000000..58cac096cc30 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_ar.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_bg.po b/components/ILIAS/ContentPage/lang/cpad_bg.po new file mode 100644 index 000000000000..8caae12a751d --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_bg.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_cs.po b/components/ILIAS/ContentPage/lang/cpad_cs.po new file mode 100644 index 000000000000..79f284d168b8 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_cs.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_da.po b/components/ILIAS/ContentPage/lang/cpad_da.po new file mode 100644 index 000000000000..e7e8ee74b569 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_da.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_de.po b/components/ILIAS/ContentPage/lang/cpad_de.po new file mode 100644 index 000000000000..2b7d79e78ce9 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_de.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cpad\n" + +msgid "cpad_reading_time_status" +msgstr "Lesezeit" + +msgid "cpad_reading_time_status_desc" +msgstr "Falls aktiviert, wird die geschätzte Lesezeit für Inhaltsseiten ermittelt und angezeigt." diff --git a/components/ILIAS/ContentPage/lang/cpad_el.po b/components/ILIAS/ContentPage/lang/cpad_el.po new file mode 100644 index 000000000000..edee677b5c2f --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_el.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_en.po b/components/ILIAS/ContentPage/lang/cpad_en.po new file mode 100644 index 000000000000..3019e8019249 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_en.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cpad\n" + +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_es.po b/components/ILIAS/ContentPage/lang/cpad_es.po new file mode 100644 index 000000000000..c88f095f2071 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_es.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: cpad\n" + +msgid "cpad_reading_time_status" +msgstr "Tiempo de lectura" + +msgid "cpad_reading_time_status_desc" +msgstr "Si se activa, se calculará y mostrará el tiempo estimado de lectura para los objetos de página de contenido." diff --git a/components/ILIAS/ContentPage/lang/cpad_et.po b/components/ILIAS/ContentPage/lang/cpad_et.po new file mode 100644 index 000000000000..5736ab045405 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_et.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_fa.po b/components/ILIAS/ContentPage/lang/cpad_fa.po new file mode 100644 index 000000000000..442b86c83926 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_fa.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_fr.po b/components/ILIAS/ContentPage/lang/cpad_fr.po new file mode 100644 index 000000000000..3633765fc4cb --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_fr.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: cpad\n" + +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_hr.po b/components/ILIAS/ContentPage/lang/cpad_hr.po new file mode 100644 index 000000000000..7deb35bd9cd0 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_hr.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_hu.po b/components/ILIAS/ContentPage/lang/cpad_hu.po new file mode 100644 index 000000000000..479d56e279b1 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_hu.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cpad\n" + +msgid "cpad_reading_time_status" +msgstr "Olvasási idő" + +msgid "cpad_reading_time_status_desc" +msgstr "A tartalomlap becsült olvasási idejét megállapítjuk és megjelenítjük." diff --git a/components/ILIAS/ContentPage/lang/cpad_it.po b/components/ILIAS/ContentPage/lang/cpad_it.po new file mode 100644 index 000000000000..2c7028353ce6 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_it.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: cpad\n" + +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_ja.po b/components/ILIAS/ContentPage/lang/cpad_ja.po new file mode 100644 index 000000000000..00346685bed8 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_ja.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: cpad\n" + +msgid "cpad_reading_time_status" +msgstr "読込み時間" + +msgid "cpad_reading_time_status_desc" +msgstr "有効にすると、コンテンツページオブジェクトの読込み予測時間が確定して表示されます。" diff --git a/components/ILIAS/ContentPage/lang/cpad_ka.po b/components/ILIAS/ContentPage/lang/cpad_ka.po new file mode 100644 index 000000000000..ac08dee65147 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_ka.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_lt.po b/components/ILIAS/ContentPage/lang/cpad_lt.po new file mode 100644 index 000000000000..f80f2f91f49b --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_lt.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_nl.po b/components/ILIAS/ContentPage/lang/cpad_nl.po new file mode 100644 index 000000000000..61e2a5b02411 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_nl.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_pl.po b/components/ILIAS/ContentPage/lang/cpad_pl.po new file mode 100644 index 000000000000..dc373c47131b --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_pl.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_pt.po b/components/ILIAS/ContentPage/lang/cpad_pt.po new file mode 100644 index 000000000000..147e29443d40 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_pt.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_ro.po b/components/ILIAS/ContentPage/lang/cpad_ro.po new file mode 100644 index 000000000000..2263cca2b312 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_ro.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_ru.po b/components/ILIAS/ContentPage/lang/cpad_ru.po new file mode 100644 index 000000000000..1cd2f66b1a95 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_ru.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_sk.po b/components/ILIAS/ContentPage/lang/cpad_sk.po new file mode 100644 index 000000000000..528a1884082d --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_sk.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_sl.po b/components/ILIAS/ContentPage/lang/cpad_sl.po new file mode 100644 index 000000000000..c5386e6e5a39 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_sl.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_sq.po b/components/ILIAS/ContentPage/lang/cpad_sq.po new file mode 100644 index 000000000000..5f3e539a7aa8 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_sq.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_sr.po b/components/ILIAS/ContentPage/lang/cpad_sr.po new file mode 100644 index 000000000000..e8a19eb3db27 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_sr.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_sv.po b/components/ILIAS/ContentPage/lang/cpad_sv.po new file mode 100644 index 000000000000..8fc9463743be --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_sv.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cpad\n" + +msgid "cpad_reading_time_status" +msgstr "Tid för läsning" + +msgid "cpad_reading_time_status_desc" +msgstr "Om den är aktiverad beräknas och visas den uppskattade lästiden för innehållssidor." diff --git a/components/ILIAS/ContentPage/lang/cpad_tr.po b/components/ILIAS/ContentPage/lang/cpad_tr.po new file mode 100644 index 000000000000..14a446ad3c02 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_tr.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_uk.po b/components/ILIAS/ContentPage/lang/cpad_uk.po new file mode 100644 index 000000000000..0fda445470ef --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_uk.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_vi.po b/components/ILIAS/ContentPage/lang/cpad_vi.po new file mode 100644 index 000000000000..83e629935b34 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_vi.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/ContentPage/lang/cpad_zh.po b/components/ILIAS/ContentPage/lang/cpad_zh.po new file mode 100644 index 000000000000..4debdc8b93d6 --- /dev/null +++ b/components/ILIAS/ContentPage/lang/cpad_zh.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: cpad\n" + +#, fuzzy +msgid "cpad_reading_time_status" +msgstr "Reading Time" + +#, fuzzy +msgid "cpad_reading_time_status_desc" +msgstr "If enabled, the estimated reading time for content page objects will be determined and displayed." diff --git a/components/ILIAS/Cron/Cron.php b/components/ILIAS/Cron/Cron.php index 86c50929a07b..7986939fe652 100644 --- a/components/ILIAS/Cron/Cron.php +++ b/components/ILIAS/Cron/Cron.php @@ -20,6 +20,9 @@ namespace ILIAS; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; + class Cron implements Component\Component { public function init( @@ -36,5 +39,9 @@ public function init( new \ILIAS\Cron\Setup\Agent( $pull[\ILIAS\Refinery\Factory::class] ); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'cron' + ); } } diff --git a/components/ILIAS/Cron/lang/cron.pot b/components/ILIAS/Cron/lang/cron.pot new file mode 100644 index 000000000000..29862a010fcb --- /dev/null +++ b/components/ILIAS/Cron/lang/cron.pot @@ -0,0 +1,159 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: cron\n" + +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "" + +msgid "cro_job_rc_job_manual_reset" +msgstr "" + +msgid "cro_job_rc_job_no_result" +msgstr "" + +msgid "cron_action_activate" +msgstr "" + +msgid "cron_action_activate_success" +msgstr "" + +msgid "cron_action_activate_sure" +msgstr "" + +msgid "cron_action_activate_sure_multi" +msgstr "" + +msgid "cron_action_deactivate" +msgstr "" + +msgid "cron_action_deactivate_success" +msgstr "" + +msgid "cron_action_deactivate_sure" +msgstr "" + +msgid "cron_action_deactivate_sure_multi" +msgstr "" + +msgid "cron_action_edit" +msgstr "" + +msgid "cron_action_edit_success" +msgstr "" + +msgid "cron_action_reset" +msgstr "" + +msgid "cron_action_reset_success" +msgstr "" + +msgid "cron_action_reset_sure" +msgstr "" + +msgid "cron_action_reset_sure_multi" +msgstr "" + +msgid "cron_action_run" +msgstr "" + +msgid "cron_action_run_fail" +msgstr "" + +msgid "cron_action_run_success" +msgstr "" + +msgid "cron_action_run_sure" +msgstr "" + +msgid "cron_changed_by_crontab" +msgstr "" + +msgid "cron_component" +msgstr "" + +msgid "cron_job_id" +msgstr "" + +msgid "cron_jobs_with_required_intervention" +msgstr "" + +msgid "cron_last_run" +msgstr "" + +msgid "cron_no_executable_job_selected" +msgstr "" + +msgid "cron_result" +msgstr "" + +msgid "cron_result_info" +msgstr "" + +msgid "cron_result_status_crashed" +msgstr "" + +msgid "cron_result_status_fail" +msgstr "" + +msgid "cron_result_status_invalid_configuration" +msgstr "" + +msgid "cron_result_status_no_action" +msgstr "" + +msgid "cron_result_status_ok" +msgstr "" + +msgid "cron_result_status_reset" +msgstr "" + +msgid "cron_running_since" +msgstr "" + +msgid "cron_schedule" +msgstr "" + +msgid "cron_schedule_daily" +msgstr "" + +msgid "cron_schedule_in_days" +msgstr "" + +msgid "cron_schedule_in_hours" +msgstr "" + +msgid "cron_schedule_in_minutes" +msgstr "" + +msgid "cron_schedule_monthly" +msgstr "" + +msgid "cron_schedule_quarterly" +msgstr "" + +msgid "cron_schedule_type" +msgstr "" + +msgid "cron_schedule_value" +msgstr "" + +msgid "cron_schedule_weekly" +msgstr "" + +msgid "cron_schedule_yearly" +msgstr "" + +msgid "cron_status" +msgstr "" + +msgid "cron_status_active" +msgstr "" + +msgid "cron_status_inactive" +msgstr "" + +msgid "cron_status_info" +msgstr "" diff --git a/components/ILIAS/Cron/lang/cron_ar.po b/components/ILIAS/Cron/lang/cron_ar.po new file mode 100644 index 000000000000..7e22ab4c2953 --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_ar.po @@ -0,0 +1,213 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: cron\n" + +#, fuzzy +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "PROBABLY CRASHED" + +#, fuzzy +msgid "cro_job_rc_job_manual_reset" +msgstr "RESET MANUALLY" + +#, fuzzy +msgid "cro_job_rc_job_no_result" +msgstr "Cron job did not return a proper result" + +#, fuzzy +msgid "cron_action_activate" +msgstr "Activate" + +#, fuzzy +msgid "cron_action_activate_success" +msgstr "Cron-Job activated." + +#, fuzzy +msgid "cron_action_activate_sure" +msgstr "Are you sure you want to activate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_activate_sure_multi" +msgstr "Are you sure you want to activate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deactivated." + +#, fuzzy +msgid "cron_action_deactivate_sure" +msgstr "Are you sure you want to deactivate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_deactivate_sure_multi" +msgstr "Are you sure you want to deactivate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_edit" +msgstr "Edit" + +#, fuzzy +msgid "cron_action_edit_success" +msgstr "Schedule updated." + +#, fuzzy +msgid "cron_action_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_action_reset_success" +msgstr "Cron-Job reset." + +#, fuzzy +msgid "cron_action_reset_sure" +msgstr "Are you sure you want to reset the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_reset_sure_multi" +msgstr "Are you sure you want to reset the following cron-jobs?" + +#, fuzzy +msgid "cron_action_run" +msgstr "Execute" + +#, fuzzy +msgid "cron_action_run_fail" +msgstr "Cron-Job failed." + +#, fuzzy +msgid "cron_action_run_success" +msgstr "Cron-Job run successfully." + +#, fuzzy +msgid "cron_action_run_sure" +msgstr "Are you sure you want to run the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_changed_by_crontab" +msgstr "SYSTEM " + +#, fuzzy +msgid "cron_component" +msgstr "Component" + +#, fuzzy +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +#, fuzzy +msgid "cron_last_run" +msgstr "Last Run" + +#, fuzzy +msgid "cron_no_executable_job_selected" +msgstr "Please select at least one executable cron-job." + +#, fuzzy +msgid "cron_result" +msgstr "Result" + +#, fuzzy +msgid "cron_result_info" +msgstr "Result Info" + +#, fuzzy +msgid "cron_result_status_crashed" +msgstr "Crashed" + +#, fuzzy +msgid "cron_result_status_fail" +msgstr "Failed" + +#, fuzzy +msgid "cron_result_status_invalid_configuration" +msgstr "Invalid Configuration" + +#, fuzzy +msgid "cron_result_status_no_action" +msgstr "Ok, no processing" + +#, fuzzy +msgid "cron_result_status_ok" +msgstr "Ok" + +#, fuzzy +msgid "cron_result_status_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_running_since" +msgstr "Running since" + +#, fuzzy +msgid "cron_schedule" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_daily" +msgstr "Daily" + +#, fuzzy +msgid "cron_schedule_in_days" +msgstr "Every %s days" + +#, fuzzy +msgid "cron_schedule_in_hours" +msgstr "Every %s hours" + +#, fuzzy +msgid "cron_schedule_in_minutes" +msgstr "Every %s minutes" + +#, fuzzy +msgid "cron_schedule_monthly" +msgstr "Monthly" + +#, fuzzy +msgid "cron_schedule_quarterly" +msgstr "Quarterly" + +#, fuzzy +msgid "cron_schedule_type" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_value" +msgstr "Interval" + +#, fuzzy +msgid "cron_schedule_weekly" +msgstr "Weekly" + +#, fuzzy +msgid "cron_schedule_yearly" +msgstr "Yearly" + +#, fuzzy +msgid "cron_status" +msgstr "Status" + +#, fuzzy +msgid "cron_status_active" +msgstr "Active" + +#, fuzzy +msgid "cron_status_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/Cron/lang/cron_bg.po b/components/ILIAS/Cron/lang/cron_bg.po new file mode 100644 index 000000000000..1efae8222a79 --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_bg.po @@ -0,0 +1,213 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cron\n" + +#, fuzzy +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "PROBABLY CRASHED" + +#, fuzzy +msgid "cro_job_rc_job_manual_reset" +msgstr "RESET MANUALLY" + +#, fuzzy +msgid "cro_job_rc_job_no_result" +msgstr "Cron job did not return a proper result" + +#, fuzzy +msgid "cron_action_activate" +msgstr "Activate" + +#, fuzzy +msgid "cron_action_activate_success" +msgstr "Cron-Job activated." + +#, fuzzy +msgid "cron_action_activate_sure" +msgstr "Are you sure you want to activate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_activate_sure_multi" +msgstr "Are you sure you want to activate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deactivated." + +#, fuzzy +msgid "cron_action_deactivate_sure" +msgstr "Are you sure you want to deactivate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_deactivate_sure_multi" +msgstr "Are you sure you want to deactivate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_edit" +msgstr "Edit" + +#, fuzzy +msgid "cron_action_edit_success" +msgstr "Schedule updated." + +#, fuzzy +msgid "cron_action_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_action_reset_success" +msgstr "Cron-Job reset." + +#, fuzzy +msgid "cron_action_reset_sure" +msgstr "Are you sure you want to reset the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_reset_sure_multi" +msgstr "Are you sure you want to reset the following cron-jobs?" + +#, fuzzy +msgid "cron_action_run" +msgstr "Execute" + +#, fuzzy +msgid "cron_action_run_fail" +msgstr "Cron-Job failed." + +#, fuzzy +msgid "cron_action_run_success" +msgstr "Cron-Job run successfully." + +#, fuzzy +msgid "cron_action_run_sure" +msgstr "Are you sure you want to run the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_changed_by_crontab" +msgstr "SYSTEM " + +#, fuzzy +msgid "cron_component" +msgstr "Component" + +#, fuzzy +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +#, fuzzy +msgid "cron_last_run" +msgstr "Last Run" + +#, fuzzy +msgid "cron_no_executable_job_selected" +msgstr "Please select at least one executable cron-job." + +#, fuzzy +msgid "cron_result" +msgstr "Result" + +#, fuzzy +msgid "cron_result_info" +msgstr "Result Info" + +#, fuzzy +msgid "cron_result_status_crashed" +msgstr "Crashed" + +#, fuzzy +msgid "cron_result_status_fail" +msgstr "Failed" + +#, fuzzy +msgid "cron_result_status_invalid_configuration" +msgstr "Invalid Configuration" + +#, fuzzy +msgid "cron_result_status_no_action" +msgstr "Ok, no processing" + +#, fuzzy +msgid "cron_result_status_ok" +msgstr "Ok" + +#, fuzzy +msgid "cron_result_status_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_running_since" +msgstr "Running since" + +#, fuzzy +msgid "cron_schedule" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_daily" +msgstr "Daily" + +#, fuzzy +msgid "cron_schedule_in_days" +msgstr "Every %s days" + +#, fuzzy +msgid "cron_schedule_in_hours" +msgstr "Every %s hours" + +#, fuzzy +msgid "cron_schedule_in_minutes" +msgstr "Every %s minutes" + +#, fuzzy +msgid "cron_schedule_monthly" +msgstr "Monthly" + +#, fuzzy +msgid "cron_schedule_quarterly" +msgstr "Quarterly" + +#, fuzzy +msgid "cron_schedule_type" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_value" +msgstr "Interval" + +#, fuzzy +msgid "cron_schedule_weekly" +msgstr "Weekly" + +#, fuzzy +msgid "cron_schedule_yearly" +msgstr "Yearly" + +#, fuzzy +msgid "cron_status" +msgstr "Status" + +#, fuzzy +msgid "cron_status_active" +msgstr "Active" + +#, fuzzy +msgid "cron_status_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/Cron/lang/cron_cs.po b/components/ILIAS/Cron/lang/cron_cs.po new file mode 100644 index 000000000000..2b0feefa755d --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_cs.po @@ -0,0 +1,163 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: cron\n" + +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "PRAVDĚPODOBNĚ DOŠLO K PÁDU" + +msgid "cro_job_rc_job_manual_reset" +msgstr "MANUÁLNĚ RESETOVAT" + +msgid "cro_job_rc_job_no_result" +msgstr "Cronová úloha nevrátila správný výsledek" + +msgid "cron_action_activate" +msgstr "Aktivovat" + +msgid "cron_action_activate_success" +msgstr "Cron-Job aktivován." + +msgid "cron_action_activate_sure" +msgstr "Skutečně chcete aktivovat cron-job \"%s\"?" + +msgid "cron_action_activate_sure_multi" +msgstr "Opravdu chcete aktivovat následující cronové úlohy?" + +msgid "cron_action_deactivate" +msgstr "Deaktivovat" + +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deaktivován." + +msgid "cron_action_deactivate_sure" +msgstr "Skutečně chcete deaktivovat cron-job \"%s\"?" + +msgid "cron_action_deactivate_sure_multi" +msgstr "Opravdu chcete deaktivovat následující cronové úlohy?" + +msgid "cron_action_edit" +msgstr "Upravit" + +msgid "cron_action_edit_success" +msgstr "Rozvrh aktualizován." + +msgid "cron_action_reset" +msgstr "Resetovat" + +msgid "cron_action_reset_success" +msgstr "Cron-Job resetován." + +msgid "cron_action_reset_sure" +msgstr "Skutečně chcete resetovat cron-job \"%s\"?" + +msgid "cron_action_reset_sure_multi" +msgstr "Opravdu chcete obnovit následující cronové úlohy?" + +msgid "cron_action_run" +msgstr "Vykonat" + +msgid "cron_action_run_fail" +msgstr "Cron-Job selhal." + +msgid "cron_action_run_success" +msgstr "Cron-Job běží úspěšně." + +msgid "cron_action_run_sure" +msgstr "Skutečně chcete spustit cron-job \"%s\"?" + +msgid "cron_changed_by_crontab" +msgstr "SYSTEM" + +msgid "cron_component" +msgstr "Komponenta" + +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +msgid "cron_last_run" +msgstr "Poslední chod" + +msgid "cron_no_executable_job_selected" +msgstr "Vyberte alespoň jednu proveditelnou cronovou úlohu." + +msgid "cron_result" +msgstr "Výsledek" + +msgid "cron_result_info" +msgstr "Info výsledku" + +msgid "cron_result_status_crashed" +msgstr "Havaroval" + +msgid "cron_result_status_fail" +msgstr "Nepodařilo se" + +msgid "cron_result_status_invalid_configuration" +msgstr "Chybná konfigurace" + +msgid "cron_result_status_no_action" +msgstr "Ok, nepracuje" + +msgid "cron_result_status_ok" +msgstr "Ok" + +msgid "cron_result_status_reset" +msgstr "Reset" + +msgid "cron_running_since" +msgstr "Běží od" + +msgid "cron_schedule" +msgstr "Rozvrh" + +msgid "cron_schedule_daily" +msgstr "Denně" + +msgid "cron_schedule_in_days" +msgstr "Každých %s dnů" + +msgid "cron_schedule_in_hours" +msgstr "Každých %s hdin" + +msgid "cron_schedule_in_minutes" +msgstr "Každých %s minut" + +msgid "cron_schedule_monthly" +msgstr "Měsíčně" + +msgid "cron_schedule_quarterly" +msgstr "Čtvrtletně" + +msgid "cron_schedule_type" +msgstr "Rozvrh" + +msgid "cron_schedule_value" +msgstr "Interval" + +msgid "cron_schedule_weekly" +msgstr "Týdně" + +msgid "cron_schedule_yearly" +msgstr "Ročně" + +msgid "cron_status" +msgstr "Status" + +msgid "cron_status_active" +msgstr "Aktivní" + +msgid "cron_status_inactive" +msgstr "Neaktivní" + +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/Cron/lang/cron_da.po b/components/ILIAS/Cron/lang/cron_da.po new file mode 100644 index 000000000000..4a1a747f807d --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_da.po @@ -0,0 +1,213 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cron\n" + +#, fuzzy +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "PROBABLY CRASHED" + +#, fuzzy +msgid "cro_job_rc_job_manual_reset" +msgstr "RESET MANUALLY" + +#, fuzzy +msgid "cro_job_rc_job_no_result" +msgstr "Cron job did not return a proper result" + +#, fuzzy +msgid "cron_action_activate" +msgstr "Activate" + +#, fuzzy +msgid "cron_action_activate_success" +msgstr "Cron-Job activated." + +#, fuzzy +msgid "cron_action_activate_sure" +msgstr "Are you sure you want to activate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_activate_sure_multi" +msgstr "Are you sure you want to activate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deactivated." + +#, fuzzy +msgid "cron_action_deactivate_sure" +msgstr "Are you sure you want to deactivate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_deactivate_sure_multi" +msgstr "Are you sure you want to deactivate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_edit" +msgstr "Edit" + +#, fuzzy +msgid "cron_action_edit_success" +msgstr "Schedule updated." + +#, fuzzy +msgid "cron_action_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_action_reset_success" +msgstr "Cron-Job reset." + +#, fuzzy +msgid "cron_action_reset_sure" +msgstr "Are you sure you want to reset the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_reset_sure_multi" +msgstr "Are you sure you want to reset the following cron-jobs?" + +#, fuzzy +msgid "cron_action_run" +msgstr "Execute" + +#, fuzzy +msgid "cron_action_run_fail" +msgstr "Cron-Job failed." + +#, fuzzy +msgid "cron_action_run_success" +msgstr "Cron-Job run successfully." + +#, fuzzy +msgid "cron_action_run_sure" +msgstr "Are you sure you want to run the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_changed_by_crontab" +msgstr "SYSTEM " + +#, fuzzy +msgid "cron_component" +msgstr "Component" + +#, fuzzy +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +#, fuzzy +msgid "cron_last_run" +msgstr "Last Run" + +#, fuzzy +msgid "cron_no_executable_job_selected" +msgstr "Please select at least one executable cron-job." + +#, fuzzy +msgid "cron_result" +msgstr "Result" + +#, fuzzy +msgid "cron_result_info" +msgstr "Result Info" + +#, fuzzy +msgid "cron_result_status_crashed" +msgstr "Crashed" + +#, fuzzy +msgid "cron_result_status_fail" +msgstr "Failed" + +#, fuzzy +msgid "cron_result_status_invalid_configuration" +msgstr "Invalid Configuration" + +#, fuzzy +msgid "cron_result_status_no_action" +msgstr "Ok, no processing" + +#, fuzzy +msgid "cron_result_status_ok" +msgstr "Ok" + +#, fuzzy +msgid "cron_result_status_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_running_since" +msgstr "Running since" + +#, fuzzy +msgid "cron_schedule" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_daily" +msgstr "Daily" + +#, fuzzy +msgid "cron_schedule_in_days" +msgstr "Every %s days" + +#, fuzzy +msgid "cron_schedule_in_hours" +msgstr "Every %s hours" + +#, fuzzy +msgid "cron_schedule_in_minutes" +msgstr "Every %s minutes" + +#, fuzzy +msgid "cron_schedule_monthly" +msgstr "Monthly" + +#, fuzzy +msgid "cron_schedule_quarterly" +msgstr "Quarterly" + +#, fuzzy +msgid "cron_schedule_type" +msgstr "Schedule Type" + +#, fuzzy +msgid "cron_schedule_value" +msgstr "Interval" + +#, fuzzy +msgid "cron_schedule_weekly" +msgstr "Weekly" + +#, fuzzy +msgid "cron_schedule_yearly" +msgstr "Yearly" + +#, fuzzy +msgid "cron_status" +msgstr "Status" + +#, fuzzy +msgid "cron_status_active" +msgstr "Active" + +#, fuzzy +msgid "cron_status_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/Cron/lang/cron_de.po b/components/ILIAS/Cron/lang/cron_de.po new file mode 100644 index 000000000000..162f84f1cd90 --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_de.po @@ -0,0 +1,162 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cron\n" + +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "Der Cron-Job wurde deaktiviert, da er länger als 3 Stunden inaktiv war." + +msgid "cro_job_rc_job_manual_reset" +msgstr "Der Cron-Job wurde von der ILIAS-Administration zurückgesetzt." + +msgid "cro_job_rc_job_no_result" +msgstr "Vom Cron-Job wurde kein sauberes Resultat übermittelt." + +msgid "cron_action_activate" +msgstr "Aktivieren" + +msgid "cron_action_activate_success" +msgstr "Cron-Job aktiviert." + +msgid "cron_action_activate_sure" +msgstr "Wollen Sie wirklich den Cron-Job „%s“ aktivieren?" + +msgid "cron_action_activate_sure_multi" +msgstr "Wollen Sie wirklich die folgenden Cron-Jobs aktivieren?" + +msgid "cron_action_deactivate" +msgstr "Deaktivieren" + +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deaktiviert." + +msgid "cron_action_deactivate_sure" +msgstr "Wollen Sie wirklich den Cron-Job „%s“ deaktivieren?" + +msgid "cron_action_deactivate_sure_multi" +msgstr "Wollen Sie wirklich die folgenden Cron-Jobs deaktivieren?" + +msgid "cron_action_edit" +msgstr "Bearbeiten" + +msgid "cron_action_edit_success" +msgstr "Zeitplan aktualisiert." + +msgid "cron_action_reset" +msgstr "Zurücksetzen" + +msgid "cron_action_reset_success" +msgstr "Cron-Job zurückgesetzt." + +msgid "cron_action_reset_sure" +msgstr "Wollen Sie wirklich den Cron-Job „%s“ zurücksetzen?" + +msgid "cron_action_reset_sure_multi" +msgstr "Wollen Sie wirklich die folgenden Cron-Jobs zurücksetzen?" + +msgid "cron_action_run" +msgstr "Cron-Job ausführen" + +msgid "cron_action_run_fail" +msgstr "Ausführung gescheitert" + +msgid "cron_action_run_success" +msgstr "Cron-Job erfolgreich ausgeführt" + +msgid "cron_action_run_sure" +msgstr "Wollen Sie wirklich den Cron-Job „%s“ ausführen?" + +msgid "cron_changed_by_crontab" +msgstr "SYSTEM" + +msgid "cron_component" +msgstr "Komponente" + +msgid "cron_job_id" +msgstr "ID" + +msgid "cron_jobs_with_required_intervention" +msgstr "Folgende Cron-Jobs benötigen möglicherweise eine Begutachtung." + +msgid "cron_last_run" +msgstr "Letzter Durchlauf" + +msgid "cron_no_executable_job_selected" +msgstr "Bitte wählen Sie mindestens einen ausführbaren Cron-Job." + +msgid "cron_result" +msgstr "Ergebnis" + +msgid "cron_result_info" +msgstr "Ergebnisdetails" + +msgid "cron_result_status_crashed" +msgstr "Abbruch" + +msgid "cron_result_status_fail" +msgstr "Fehler" + +msgid "cron_result_status_invalid_configuration" +msgstr "Ungültige Konfiguration" + +msgid "cron_result_status_no_action" +msgstr "Ausgeführt. Keine Änderungen" + +msgid "cron_result_status_ok" +msgstr "Ok" + +msgid "cron_result_status_reset" +msgstr "Zurücksetzen" + +msgid "cron_running_since" +msgstr "Läuft seit" + +msgid "cron_schedule" +msgstr "Zeitplan" + +msgid "cron_schedule_daily" +msgstr "Täglich" + +msgid "cron_schedule_in_days" +msgstr "Alle %s Tage" + +msgid "cron_schedule_in_hours" +msgstr "Alle %s Stunden" + +msgid "cron_schedule_in_minutes" +msgstr "Alle %s Minuten" + +msgid "cron_schedule_monthly" +msgstr "Monatlich" + +msgid "cron_schedule_quarterly" +msgstr "Vierteljährlich" + +msgid "cron_schedule_type" +msgstr "Zeitplan" + +msgid "cron_schedule_value" +msgstr "Intervall" + +msgid "cron_schedule_weekly" +msgstr "Wöchentlich" + +msgid "cron_schedule_yearly" +msgstr "Jährlich" + +msgid "cron_status" +msgstr "Status" + +msgid "cron_status_active" +msgstr "Aktiv" + +msgid "cron_status_inactive" +msgstr "Inaktiv" + +msgid "cron_status_info" +msgstr "Statusänderung" diff --git a/components/ILIAS/Cron/lang/cron_el.po b/components/ILIAS/Cron/lang/cron_el.po new file mode 100644 index 000000000000..78ec55224d2c --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_el.po @@ -0,0 +1,213 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cron\n" + +#, fuzzy +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "PROBABLY CRASHED" + +#, fuzzy +msgid "cro_job_rc_job_manual_reset" +msgstr "RESET MANUALLY" + +#, fuzzy +msgid "cro_job_rc_job_no_result" +msgstr "Cron job did not return a proper result" + +#, fuzzy +msgid "cron_action_activate" +msgstr "Activate" + +#, fuzzy +msgid "cron_action_activate_success" +msgstr "Cron-Job activated." + +#, fuzzy +msgid "cron_action_activate_sure" +msgstr "Are you sure you want to activate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_activate_sure_multi" +msgstr "Are you sure you want to activate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deactivated." + +#, fuzzy +msgid "cron_action_deactivate_sure" +msgstr "Are you sure you want to deactivate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_deactivate_sure_multi" +msgstr "Are you sure you want to deactivate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_edit" +msgstr "Edit" + +#, fuzzy +msgid "cron_action_edit_success" +msgstr "Schedule updated." + +#, fuzzy +msgid "cron_action_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_action_reset_success" +msgstr "Cron-Job reset." + +#, fuzzy +msgid "cron_action_reset_sure" +msgstr "Are you sure you want to reset the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_reset_sure_multi" +msgstr "Are you sure you want to reset the following cron-jobs?" + +#, fuzzy +msgid "cron_action_run" +msgstr "Execute" + +#, fuzzy +msgid "cron_action_run_fail" +msgstr "Cron-Job failed." + +#, fuzzy +msgid "cron_action_run_success" +msgstr "Cron-Job run successfully." + +#, fuzzy +msgid "cron_action_run_sure" +msgstr "Are you sure you want to run the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_changed_by_crontab" +msgstr "SYSTEM " + +#, fuzzy +msgid "cron_component" +msgstr "Component" + +#, fuzzy +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +#, fuzzy +msgid "cron_last_run" +msgstr "Last Run" + +#, fuzzy +msgid "cron_no_executable_job_selected" +msgstr "Please select at least one executable cron-job." + +#, fuzzy +msgid "cron_result" +msgstr "Result" + +#, fuzzy +msgid "cron_result_info" +msgstr "Result Info" + +#, fuzzy +msgid "cron_result_status_crashed" +msgstr "Crashed" + +#, fuzzy +msgid "cron_result_status_fail" +msgstr "Failed" + +#, fuzzy +msgid "cron_result_status_invalid_configuration" +msgstr "Invalid Configuration" + +#, fuzzy +msgid "cron_result_status_no_action" +msgstr "Ok, no processing" + +#, fuzzy +msgid "cron_result_status_ok" +msgstr "Ok" + +#, fuzzy +msgid "cron_result_status_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_running_since" +msgstr "Running since" + +#, fuzzy +msgid "cron_schedule" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_daily" +msgstr "Daily" + +#, fuzzy +msgid "cron_schedule_in_days" +msgstr "Every %s days" + +#, fuzzy +msgid "cron_schedule_in_hours" +msgstr "Every %s hours" + +#, fuzzy +msgid "cron_schedule_in_minutes" +msgstr "Every %s minutes" + +#, fuzzy +msgid "cron_schedule_monthly" +msgstr "Monthly" + +#, fuzzy +msgid "cron_schedule_quarterly" +msgstr "Quarterly" + +#, fuzzy +msgid "cron_schedule_type" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_value" +msgstr "Interval" + +#, fuzzy +msgid "cron_schedule_weekly" +msgstr "Weekly" + +#, fuzzy +msgid "cron_schedule_yearly" +msgstr "Yearly" + +#, fuzzy +msgid "cron_status" +msgstr "Status" + +#, fuzzy +msgid "cron_status_active" +msgstr "Active" + +#, fuzzy +msgid "cron_status_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/Cron/lang/cron_en.po b/components/ILIAS/Cron/lang/cron_en.po new file mode 100644 index 000000000000..20e82e8928aa --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_en.po @@ -0,0 +1,162 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cron\n" + +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "Cron job deactivated because it has been inactive for 3 hours" + +msgid "cro_job_rc_job_manual_reset" +msgstr "Cron job re-activated by admin" + +msgid "cro_job_rc_job_no_result" +msgstr "Cron job did not return a proper result" + +msgid "cron_action_activate" +msgstr "Activate" + +msgid "cron_action_activate_success" +msgstr "Cron job activated." + +msgid "cron_action_activate_sure" +msgstr "Are you sure you want to activate the cron job \"%s\"?" + +msgid "cron_action_activate_sure_multi" +msgstr "Are you sure you want to activate the following cron jobs?" + +msgid "cron_action_deactivate" +msgstr "Deactivate" + +msgid "cron_action_deactivate_success" +msgstr "Cron job deactivated." + +msgid "cron_action_deactivate_sure" +msgstr "Are you sure you want to deactivate the cron job \"%s\"?" + +msgid "cron_action_deactivate_sure_multi" +msgstr "Are you sure you want to deactivate the following cron jobs?" + +msgid "cron_action_edit" +msgstr "Edit" + +msgid "cron_action_edit_success" +msgstr "Schedule updated." + +msgid "cron_action_reset" +msgstr "Reset" + +msgid "cron_action_reset_success" +msgstr "Cron job reset." + +msgid "cron_action_reset_sure" +msgstr "Are you sure you want to reset the cron job \"%s\"?" + +msgid "cron_action_reset_sure_multi" +msgstr "Are you sure you want to reset the following cron jobs?" + +msgid "cron_action_run" +msgstr "Run Cron Job" + +msgid "cron_action_run_fail" +msgstr "Cron Job failed." + +msgid "cron_action_run_success" +msgstr "Cron Job run successfully." + +msgid "cron_action_run_sure" +msgstr "Are you sure you want to run the cron job \"%s\"?" + +msgid "cron_changed_by_crontab" +msgstr "SYSTEM" + +msgid "cron_component" +msgstr "Component" + +msgid "cron_job_id" +msgstr "ID" + +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +msgid "cron_last_run" +msgstr "Last Run" + +msgid "cron_no_executable_job_selected" +msgstr "Please select at least one executable cron job." + +msgid "cron_result" +msgstr "Result" + +msgid "cron_result_info" +msgstr "Result Info" + +msgid "cron_result_status_crashed" +msgstr "Crashed" + +msgid "cron_result_status_fail" +msgstr "Failed" + +msgid "cron_result_status_invalid_configuration" +msgstr "Invalid Configuration" + +msgid "cron_result_status_no_action" +msgstr "Ok, no processing" + +msgid "cron_result_status_ok" +msgstr "Ok" + +msgid "cron_result_status_reset" +msgstr "Reset" + +msgid "cron_running_since" +msgstr "Running since" + +msgid "cron_schedule" +msgstr "Schedule" + +msgid "cron_schedule_daily" +msgstr "Daily" + +msgid "cron_schedule_in_days" +msgstr "Every %s days" + +msgid "cron_schedule_in_hours" +msgstr "Every %s hours" + +msgid "cron_schedule_in_minutes" +msgstr "Every %s minutes" + +msgid "cron_schedule_monthly" +msgstr "Monthly" + +msgid "cron_schedule_quarterly" +msgstr "Quarterly" + +msgid "cron_schedule_type" +msgstr "Schedule" + +msgid "cron_schedule_value" +msgstr "Interval" + +msgid "cron_schedule_weekly" +msgstr "Weekly" + +msgid "cron_schedule_yearly" +msgstr "Yearly" + +msgid "cron_status" +msgstr "Status" + +msgid "cron_status_active" +msgstr "Active" + +msgid "cron_status_inactive" +msgstr "Inactive" + +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/Cron/lang/cron_es.po b/components/ILIAS/Cron/lang/cron_es.po new file mode 100644 index 000000000000..2d09d29b92fc --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_es.po @@ -0,0 +1,162 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: cron\n" + +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "Tarea programada desactivada porque ha estado inactiva durante 3 horas" + +msgid "cro_job_rc_job_manual_reset" +msgstr "Tarea programada reactivada por el administrador" + +msgid "cro_job_rc_job_no_result" +msgstr "La tarea programada no devolvió un resultado adecuado" + +msgid "cron_action_activate" +msgstr "Activar" + +msgid "cron_action_activate_success" +msgstr "Tarea programada activada." + +msgid "cron_action_activate_sure" +msgstr "¿Está seguro de que desea activar la tarea programada \"%s\"?" + +msgid "cron_action_activate_sure_multi" +msgstr "¿Está seguro de que desea activar las siguientes tareas programadas?" + +msgid "cron_action_deactivate" +msgstr "Desactivar" + +msgid "cron_action_deactivate_success" +msgstr "Tarea programada desactivada." + +msgid "cron_action_deactivate_sure" +msgstr "¿Está seguro de que desea desactivar la tarea programada \"%s\"?" + +msgid "cron_action_deactivate_sure_multi" +msgstr "¿Está seguro de que desea desactivar las siguientes tareas programadas?" + +msgid "cron_action_edit" +msgstr "Editar" + +msgid "cron_action_edit_success" +msgstr "Programación actualizada." + +msgid "cron_action_reset" +msgstr "Reiniciar" + +msgid "cron_action_reset_success" +msgstr "Tarea programada reiniciada." + +msgid "cron_action_reset_sure" +msgstr "¿Está seguro de que desea reiniciar la tarea programada \"%s\"?" + +msgid "cron_action_reset_sure_multi" +msgstr "¿Está seguro de que desea reiniciar las siguientes tareas programadas?" + +msgid "cron_action_run" +msgstr "Ejecutar tarea programada" + +msgid "cron_action_run_fail" +msgstr "La tarea programada falló." + +msgid "cron_action_run_success" +msgstr "La tarea programada se ejecutó con éxito." + +msgid "cron_action_run_sure" +msgstr "¿Está seguro de que desea ejecutar la tarea programada \"%s\"?" + +msgid "cron_changed_by_crontab" +msgstr "SISTEMA" + +msgid "cron_component" +msgstr "Componente" + +msgid "cron_job_id" +msgstr "ID" + +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +msgid "cron_last_run" +msgstr "Última ejecución" + +msgid "cron_no_executable_job_selected" +msgstr "Por favor, seleccione al menos una tarea programada ejecutable." + +msgid "cron_result" +msgstr "Resultado" + +msgid "cron_result_info" +msgstr "Información del resultado" + +msgid "cron_result_status_crashed" +msgstr "Colapsado" + +msgid "cron_result_status_fail" +msgstr "Fallido" + +msgid "cron_result_status_invalid_configuration" +msgstr "Configuración no válida" + +msgid "cron_result_status_no_action" +msgstr "Ok, sin procesamiento" + +msgid "cron_result_status_ok" +msgstr "Ok" + +msgid "cron_result_status_reset" +msgstr "Restablecer" + +msgid "cron_running_since" +msgstr "En ejecución desde" + +msgid "cron_schedule" +msgstr "Programación" + +msgid "cron_schedule_daily" +msgstr "Diario" + +msgid "cron_schedule_in_days" +msgstr "Cada %s días" + +msgid "cron_schedule_in_hours" +msgstr "Cada %s horas" + +msgid "cron_schedule_in_minutes" +msgstr "Cada %s minutos" + +msgid "cron_schedule_monthly" +msgstr "Mensual" + +msgid "cron_schedule_quarterly" +msgstr "Trimestral" + +msgid "cron_schedule_type" +msgstr "Tipo de programación" + +msgid "cron_schedule_value" +msgstr "Intervalo" + +msgid "cron_schedule_weekly" +msgstr "Semanal" + +msgid "cron_schedule_yearly" +msgstr "Anual" + +msgid "cron_status" +msgstr "Estado" + +msgid "cron_status_active" +msgstr "Activo" + +msgid "cron_status_inactive" +msgstr "Inactivo" + +msgid "cron_status_info" +msgstr "Información del estado" diff --git a/components/ILIAS/Cron/lang/cron_et.po b/components/ILIAS/Cron/lang/cron_et.po new file mode 100644 index 000000000000..bc9d1d8fcbe7 --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_et.po @@ -0,0 +1,168 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cron\n" + +#, fuzzy +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "PROBABLY CRASHED" + +#, fuzzy +msgid "cro_job_rc_job_manual_reset" +msgstr "RESET MANUALLY" + +#, fuzzy +msgid "cro_job_rc_job_no_result" +msgstr "Cron job did not return a proper result" + +msgid "cron_action_activate" +msgstr "Activate" + +msgid "cron_action_activate_success" +msgstr "Cron-Job activated." + +msgid "cron_action_activate_sure" +msgstr "Are you sure you want to activate the cron-job \"%s\"?" + +msgid "cron_action_activate_sure_multi" +msgstr "Are you sure you want to activate the following cron-jobs?" + +msgid "cron_action_deactivate" +msgstr "Deactivate" + +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deactivated." + +msgid "cron_action_deactivate_sure" +msgstr "Are you sure you want to deactivate the cron-job \"%s\"?" + +msgid "cron_action_deactivate_sure_multi" +msgstr "Are you sure you want to deactivate the following cron-jobs?" + +msgid "cron_action_edit" +msgstr "Edit" + +msgid "cron_action_edit_success" +msgstr "Schedule updated." + +msgid "cron_action_reset" +msgstr "Reset" + +msgid "cron_action_reset_success" +msgstr "Cron-Job reset." + +msgid "cron_action_reset_sure" +msgstr "Are you sure you want to reset the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_reset_sure_multi" +msgstr "Are you sure you want to reset the following cron-jobs?" + +msgid "cron_action_run" +msgstr "Execute" + +msgid "cron_action_run_fail" +msgstr "Cron-Job failed." + +msgid "cron_action_run_success" +msgstr "Cron-Job run successfully." + +msgid "cron_action_run_sure" +msgstr "Are you sure you want to run the cron-job \"%s\"?" + +msgid "cron_changed_by_crontab" +msgstr "SYSTEM" + +msgid "cron_component" +msgstr "Component" + +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +msgid "cron_last_run" +msgstr "Last Run" + +msgid "cron_no_executable_job_selected" +msgstr "Please select at least one executable cron-job." + +msgid "cron_result" +msgstr "Result" + +msgid "cron_result_info" +msgstr "Result Info" + +msgid "cron_result_status_crashed" +msgstr "Crashed" + +#, fuzzy +msgid "cron_result_status_fail" +msgstr "Failed" + +msgid "cron_result_status_invalid_configuration" +msgstr "Invalid Configuration" + +msgid "cron_result_status_no_action" +msgstr "Ok, no processing" + +msgid "cron_result_status_ok" +msgstr "Ok" + +msgid "cron_result_status_reset" +msgstr "Reset" + +msgid "cron_running_since" +msgstr "Running since" + +msgid "cron_schedule" +msgstr "Schedule" + +msgid "cron_schedule_daily" +msgstr "Daily" + +msgid "cron_schedule_in_days" +msgstr "Every %s days" + +msgid "cron_schedule_in_hours" +msgstr "Every %s hours" + +msgid "cron_schedule_in_minutes" +msgstr "Every %s minutes" + +msgid "cron_schedule_monthly" +msgstr "Monthly" + +msgid "cron_schedule_quarterly" +msgstr "Quarterly" + +msgid "cron_schedule_type" +msgstr "Schedule" + +msgid "cron_schedule_value" +msgstr "Interval" + +msgid "cron_schedule_weekly" +msgstr "Weekly" + +msgid "cron_schedule_yearly" +msgstr "Yearly" + +msgid "cron_status" +msgstr "Status" + +msgid "cron_status_active" +msgstr "Active" + +msgid "cron_status_inactive" +msgstr "Inactive" + +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/Cron/lang/cron_fa.po b/components/ILIAS/Cron/lang/cron_fa.po new file mode 100644 index 000000000000..7871dd08b623 --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_fa.po @@ -0,0 +1,213 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: cron\n" + +#, fuzzy +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "PROBABLY CRASHED" + +#, fuzzy +msgid "cro_job_rc_job_manual_reset" +msgstr "RESET MANUALLY" + +#, fuzzy +msgid "cro_job_rc_job_no_result" +msgstr "Cron job did not return a proper result" + +#, fuzzy +msgid "cron_action_activate" +msgstr "Activate" + +#, fuzzy +msgid "cron_action_activate_success" +msgstr "Cron-Job activated." + +#, fuzzy +msgid "cron_action_activate_sure" +msgstr "Are you sure you want to activate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_activate_sure_multi" +msgstr "Are you sure you want to activate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deactivated." + +#, fuzzy +msgid "cron_action_deactivate_sure" +msgstr "Are you sure you want to deactivate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_deactivate_sure_multi" +msgstr "Are you sure you want to deactivate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_edit" +msgstr "Edit" + +#, fuzzy +msgid "cron_action_edit_success" +msgstr "Schedule updated." + +#, fuzzy +msgid "cron_action_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_action_reset_success" +msgstr "Cron-Job reset." + +#, fuzzy +msgid "cron_action_reset_sure" +msgstr "Are you sure you want to reset the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_reset_sure_multi" +msgstr "Are you sure you want to reset the following cron-jobs?" + +#, fuzzy +msgid "cron_action_run" +msgstr "Execute" + +#, fuzzy +msgid "cron_action_run_fail" +msgstr "Cron-Job failed." + +#, fuzzy +msgid "cron_action_run_success" +msgstr "Cron-Job run successfully." + +#, fuzzy +msgid "cron_action_run_sure" +msgstr "Are you sure you want to run the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_changed_by_crontab" +msgstr "SYSTEM " + +#, fuzzy +msgid "cron_component" +msgstr "Component" + +#, fuzzy +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +#, fuzzy +msgid "cron_last_run" +msgstr "Last Run" + +#, fuzzy +msgid "cron_no_executable_job_selected" +msgstr "Please select at least one executable cron-job." + +#, fuzzy +msgid "cron_result" +msgstr "Result" + +#, fuzzy +msgid "cron_result_info" +msgstr "Result Info" + +#, fuzzy +msgid "cron_result_status_crashed" +msgstr "Crashed" + +#, fuzzy +msgid "cron_result_status_fail" +msgstr "Failed" + +#, fuzzy +msgid "cron_result_status_invalid_configuration" +msgstr "Invalid Configuration" + +#, fuzzy +msgid "cron_result_status_no_action" +msgstr "Ok, no processing" + +#, fuzzy +msgid "cron_result_status_ok" +msgstr "Ok" + +#, fuzzy +msgid "cron_result_status_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_running_since" +msgstr "Running since" + +#, fuzzy +msgid "cron_schedule" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_daily" +msgstr "Daily" + +#, fuzzy +msgid "cron_schedule_in_days" +msgstr "Every %s days" + +#, fuzzy +msgid "cron_schedule_in_hours" +msgstr "Every %s hours" + +#, fuzzy +msgid "cron_schedule_in_minutes" +msgstr "Every %s minutes" + +#, fuzzy +msgid "cron_schedule_monthly" +msgstr "Monthly" + +#, fuzzy +msgid "cron_schedule_quarterly" +msgstr "Quarterly" + +#, fuzzy +msgid "cron_schedule_type" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_value" +msgstr "Interval" + +#, fuzzy +msgid "cron_schedule_weekly" +msgstr "Weekly" + +#, fuzzy +msgid "cron_schedule_yearly" +msgstr "Yearly" + +#, fuzzy +msgid "cron_status" +msgstr "Status" + +#, fuzzy +msgid "cron_status_active" +msgstr "Active" + +#, fuzzy +msgid "cron_status_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/Cron/lang/cron_fr.po b/components/ILIAS/Cron/lang/cron_fr.po new file mode 100644 index 000000000000..6d291cfee6c3 --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_fr.po @@ -0,0 +1,163 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: cron\n" + +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "PROBABLY CRASHED" + +msgid "cro_job_rc_job_manual_reset" +msgstr "RESET MANUALLY" + +msgid "cro_job_rc_job_no_result" +msgstr "NO RESULT" + +msgid "cron_action_activate" +msgstr "Activer" + +msgid "cron_action_activate_success" +msgstr "Tâche Cron activée." + +msgid "cron_action_activate_sure" +msgstr "Etes-vous sûr de vouloir activer la tâche Cron \"%s\"?" + +msgid "cron_action_activate_sure_multi" +msgstr "Etes-vous sûr de vouloir activer les tâches CRON suivantes ?" + +msgid "cron_action_deactivate" +msgstr "Désactiver" + +msgid "cron_action_deactivate_success" +msgstr "Tâche Cron désactivée." + +msgid "cron_action_deactivate_sure" +msgstr "Etes-vous sûr de vouloir désactiver la tâche Cron \"%s\"?" + +msgid "cron_action_deactivate_sure_multi" +msgstr "Etes-vous sûr de vouloir désactiver les tâches CRON suivantes ?" + +msgid "cron_action_edit" +msgstr "Editer" + +msgid "cron_action_edit_success" +msgstr "Planification mise à jour." + +msgid "cron_action_reset" +msgstr "Réinitialisation" + +msgid "cron_action_reset_success" +msgstr "Tâche Cron réinitialisée." + +msgid "cron_action_reset_sure" +msgstr "Etes-vous sûr de vouloir réinitialiser la tâche Cron \"%s\"?" + +msgid "cron_action_reset_sure_multi" +msgstr "Êtes-vous sûr de vouloir réinitialiser les tâches cron suivantes?" + +msgid "cron_action_run" +msgstr "Exécuter" + +msgid "cron_action_run_fail" +msgstr "Tâche Cron échouée." + +msgid "cron_action_run_success" +msgstr "Tâche Cron effectuée avec succès." + +msgid "cron_action_run_sure" +msgstr "Etes-vous sûr de vouloir exécuter la tâche Cron \"%s\"?" + +msgid "cron_changed_by_crontab" +msgstr "SYSTEME" + +msgid "cron_component" +msgstr "Composant" + +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +msgid "cron_last_run" +msgstr "Dernière Exécution" + +msgid "cron_no_executable_job_selected" +msgstr "Veuillez sélectionner au moins une tache cron." + +msgid "cron_result" +msgstr "Resultat" + +msgid "cron_result_info" +msgstr "Info de Résultat" + +msgid "cron_result_status_crashed" +msgstr "Crashé" + +msgid "cron_result_status_fail" +msgstr "Échec" + +msgid "cron_result_status_invalid_configuration" +msgstr "Configuration non Valide" + +msgid "cron_result_status_no_action" +msgstr "Ok, pas de traitement" + +msgid "cron_result_status_ok" +msgstr "Ok" + +msgid "cron_result_status_reset" +msgstr "Réinitialisation" + +msgid "cron_running_since" +msgstr "Exécuté depuis" + +msgid "cron_schedule" +msgstr "Planification" + +msgid "cron_schedule_daily" +msgstr "Quotidien" + +msgid "cron_schedule_in_days" +msgstr "Tous les %s jours" + +msgid "cron_schedule_in_hours" +msgstr "Toutes les %s heures" + +msgid "cron_schedule_in_minutes" +msgstr "Toutes les %s minutes" + +msgid "cron_schedule_monthly" +msgstr "Mensuel" + +msgid "cron_schedule_quarterly" +msgstr "Par Trimestre" + +msgid "cron_schedule_type" +msgstr "Planification" + +msgid "cron_schedule_value" +msgstr "Intervalle" + +msgid "cron_schedule_weekly" +msgstr "Hebdomadaire" + +msgid "cron_schedule_yearly" +msgstr "Annuel" + +msgid "cron_status" +msgstr "Statut" + +msgid "cron_status_active" +msgstr "Actif" + +msgid "cron_status_inactive" +msgstr "Désactivé" + +msgid "cron_status_info" +msgstr "Info de Statut" diff --git a/components/ILIAS/Cron/lang/cron_hr.po b/components/ILIAS/Cron/lang/cron_hr.po new file mode 100644 index 000000000000..5e90f087c01d --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_hr.po @@ -0,0 +1,163 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cron\n" + +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "Cron job deactivated because it has been inactive for 3 hours" + +msgid "cro_job_rc_job_manual_reset" +msgstr "Cron job re-activated by admin" + +msgid "cro_job_rc_job_no_result" +msgstr "Cron job did not return a proper result" + +msgid "cron_action_activate" +msgstr "Activate" + +msgid "cron_action_activate_success" +msgstr "Cron-Job activated." + +msgid "cron_action_activate_sure" +msgstr "Are you sure you want to activate the cron-job \"%s\"?" + +msgid "cron_action_activate_sure_multi" +msgstr "Are you sure you want to activate the following cron-jobs?" + +msgid "cron_action_deactivate" +msgstr "Deactivate" + +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deactivated." + +msgid "cron_action_deactivate_sure" +msgstr "Are you sure you want to deactivate the cron-job \"%s\"?" + +msgid "cron_action_deactivate_sure_multi" +msgstr "Are you sure you want to deactivate the following cron-jobs?" + +msgid "cron_action_edit" +msgstr "Edit" + +msgid "cron_action_edit_success" +msgstr "Schedule updated." + +msgid "cron_action_reset" +msgstr "Reset" + +msgid "cron_action_reset_success" +msgstr "Cron-Job reset." + +msgid "cron_action_reset_sure" +msgstr "Are you sure you want to reset the cron-job \"%s\"?" + +msgid "cron_action_reset_sure_multi" +msgstr "Are you sure you want to reset the following cron-jobs?" + +msgid "cron_action_run" +msgstr "Execute" + +msgid "cron_action_run_fail" +msgstr "Cron-Job failed." + +msgid "cron_action_run_success" +msgstr "Cron-Job run successfully." + +msgid "cron_action_run_sure" +msgstr "Are you sure you want to run the cron-job \"%s\"?" + +msgid "cron_changed_by_crontab" +msgstr "SYSTEM" + +msgid "cron_component" +msgstr "Component" + +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +msgid "cron_last_run" +msgstr "Last Run" + +msgid "cron_no_executable_job_selected" +msgstr "Please select at least one executable cron-job." + +msgid "cron_result" +msgstr "Result" + +msgid "cron_result_info" +msgstr "Result Info" + +msgid "cron_result_status_crashed" +msgstr "Crashed" + +msgid "cron_result_status_fail" +msgstr "Failed" + +msgid "cron_result_status_invalid_configuration" +msgstr "Invalid Configuration" + +msgid "cron_result_status_no_action" +msgstr "Ok, no processing" + +msgid "cron_result_status_ok" +msgstr "Ok" + +msgid "cron_result_status_reset" +msgstr "Reset" + +msgid "cron_running_since" +msgstr "Running since" + +msgid "cron_schedule" +msgstr "Schedule" + +msgid "cron_schedule_daily" +msgstr "Daily" + +msgid "cron_schedule_in_days" +msgstr "Every %s days" + +msgid "cron_schedule_in_hours" +msgstr "Every %s hours" + +msgid "cron_schedule_in_minutes" +msgstr "Every %s minutes" + +msgid "cron_schedule_monthly" +msgstr "Monthly" + +msgid "cron_schedule_quarterly" +msgstr "Quarterly" + +msgid "cron_schedule_type" +msgstr "Schedule" + +msgid "cron_schedule_value" +msgstr "Interval" + +msgid "cron_schedule_weekly" +msgstr "Weekly" + +msgid "cron_schedule_yearly" +msgstr "Yearly" + +msgid "cron_status" +msgstr "Status" + +msgid "cron_status_active" +msgstr "Active" + +msgid "cron_status_inactive" +msgstr "Inactive" + +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/Cron/lang/cron_hu.po b/components/ILIAS/Cron/lang/cron_hu.po new file mode 100644 index 000000000000..60df0470d7fb --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_hu.po @@ -0,0 +1,162 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cron\n" + +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "Az ütemezett feladatot deaktiváltuk, mert több, mint 3 órája inaktív" + +msgid "cro_job_rc_job_manual_reset" +msgstr "Az üzemeltető újraaktiválta az ütemezett feladatot." + +msgid "cro_job_rc_job_no_result" +msgstr "Az ütemezett feladat nem megfelelő eredményt adott vissza" + +msgid "cron_action_activate" +msgstr "Bekapcsolás" + +msgid "cron_action_activate_success" +msgstr "Ütemezett feladatot sikeresen bekapcsolta." + +msgid "cron_action_activate_sure" +msgstr "Biztos, hogy bekapcsolja az ütemezett feladatot: ‘%s’?" + +msgid "cron_action_activate_sure_multi" +msgstr "Biztos, hogy bekapcsolja az alábbi ütemezett feladatot?" + +msgid "cron_action_deactivate" +msgstr "Kikapcsolás" + +msgid "cron_action_deactivate_success" +msgstr "Ütemezett feladatot sikeresen kikapcsolta." + +msgid "cron_action_deactivate_sure" +msgstr "Biztos, hogy kikapcsolja az ütemezett feladatot: ‘%s’?" + +msgid "cron_action_deactivate_sure_multi" +msgstr "Biztos, hogy kikapcsolja az alábbi ütemezett feladatot?" + +msgid "cron_action_edit" +msgstr "Ütemezés módosítása" + +msgid "cron_action_edit_success" +msgstr "Az ütemezést sikeresen frissítette." + +msgid "cron_action_reset" +msgstr "Reszetelés" + +msgid "cron_action_reset_success" +msgstr "Az ütemezett feladatot sikeresen alapértékre állította." + +msgid "cron_action_reset_sure" +msgstr "Biztos, hogy megállítja az ütemezett feladatot: ‘%s’?" + +msgid "cron_action_reset_sure_multi" +msgstr "Biztos, hogy alapértékre állítja az alábbi ütemezett feladatot?" + +msgid "cron_action_run" +msgstr "Futtatás" + +msgid "cron_action_run_fail" +msgstr "Ütemezett feladat futása sikertelen." + +msgid "cron_action_run_success" +msgstr "Az ütemezett feladata sikeresen lefutott." + +msgid "cron_action_run_sure" +msgstr "Biztos, hogy futtatja az ütemezett feladatot: ‘%s’?" + +msgid "cron_changed_by_crontab" +msgstr "RENDSZER" + +msgid "cron_component" +msgstr "Komponens" + +msgid "cron_job_id" +msgstr "Azonosító" + +msgid "cron_jobs_with_required_intervention" +msgstr "A következő feladatok igényelhetnek beavatkozást." + +msgid "cron_last_run" +msgstr "Utolsó futás" + +msgid "cron_no_executable_job_selected" +msgstr "Legalább egy ütemezett feladatok jelöljön ki!" + +msgid "cron_result" +msgstr "Eredmény" + +msgid "cron_result_info" +msgstr "Eredményinformáció" + +msgid "cron_result_status_crashed" +msgstr "Összeomlott" + +msgid "cron_result_status_fail" +msgstr "Sikertelen" + +msgid "cron_result_status_invalid_configuration" +msgstr "Helytelen beállítás" + +msgid "cron_result_status_no_action" +msgstr "Ok, semmi nem kerül feldolgozásra" + +msgid "cron_result_status_ok" +msgstr "Ok" + +msgid "cron_result_status_reset" +msgstr "Reszetelés" + +msgid "cron_running_since" +msgstr "Mióta fut" + +msgid "cron_schedule" +msgstr "Ütemezés" + +msgid "cron_schedule_daily" +msgstr "Naponta" + +msgid "cron_schedule_in_days" +msgstr "Minden %s. napon" + +msgid "cron_schedule_in_hours" +msgstr "Minden %s. órában" + +msgid "cron_schedule_in_minutes" +msgstr "Minden %s. percben" + +msgid "cron_schedule_monthly" +msgstr "Havonta" + +msgid "cron_schedule_quarterly" +msgstr "Negyedévente" + +msgid "cron_schedule_type" +msgstr "Ütemezés típusa" + +msgid "cron_schedule_value" +msgstr "Intervallum" + +msgid "cron_schedule_weekly" +msgstr "Hetente" + +msgid "cron_schedule_yearly" +msgstr "Évente" + +msgid "cron_status" +msgstr "Állapot" + +msgid "cron_status_active" +msgstr "Bekapcsolt" + +msgid "cron_status_inactive" +msgstr "Kikapcsolt" + +msgid "cron_status_info" +msgstr "Állapotinformáció" diff --git a/components/ILIAS/Cron/lang/cron_it.po b/components/ILIAS/Cron/lang/cron_it.po new file mode 100644 index 000000000000..4b7406153ce3 --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_it.po @@ -0,0 +1,163 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: cron\n" + +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "PROBABILE CRASH" + +msgid "cro_job_rc_job_manual_reset" +msgstr "RESET MANUALE" + +msgid "cro_job_rc_job_no_result" +msgstr "Cron job non ha restituito un risultato corretto" + +msgid "cron_action_activate" +msgstr "Attiva" + +msgid "cron_action_activate_success" +msgstr "Cron job attivato." + +msgid "cron_action_activate_sure" +msgstr "Sei sicuro di voler attivare il cron job \"%s\"?" + +msgid "cron_action_activate_sure_multi" +msgstr "Sei sicuro di voler attivare il seguente cron job?" + +msgid "cron_action_deactivate" +msgstr "Disattiva" + +msgid "cron_action_deactivate_success" +msgstr "Cron job disattivato." + +msgid "cron_action_deactivate_sure" +msgstr "Sei sicuro di voler disattivare il cron job \"%s\"?" + +msgid "cron_action_deactivate_sure_multi" +msgstr "Sei sicuro di voler disattivare il seguente cron job?" + +msgid "cron_action_edit" +msgstr "Modifica" + +msgid "cron_action_edit_success" +msgstr "Programma aggiornato." + +msgid "cron_action_reset" +msgstr "Resetta" + +msgid "cron_action_reset_success" +msgstr "Cron job ripristinato." + +msgid "cron_action_reset_sure" +msgstr "Se sicuro di voler ripristinare il cron job \"%s\"?" + +msgid "cron_action_reset_sure_multi" +msgstr "Se sicuro di voler ripristinare il seguente cron job?" + +msgid "cron_action_run" +msgstr "Esecuzione" + +msgid "cron_action_run_fail" +msgstr "Cron job non riuscito." + +msgid "cron_action_run_success" +msgstr "Esecuzione del cron job con successo." + +msgid "cron_action_run_sure" +msgstr "Se sicuro di voler eseguire il cron job \"%s\"?" + +msgid "cron_changed_by_crontab" +msgstr "SISTEMA" + +msgid "cron_component" +msgstr "Componente" + +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +msgid "cron_last_run" +msgstr "Ultimo funzionamento" + +msgid "cron_no_executable_job_selected" +msgstr "Si prega di selezionare almeno un cron job eseguibile." + +msgid "cron_result" +msgstr "Risultato" + +msgid "cron_result_info" +msgstr "Informazioni risultato" + +msgid "cron_result_status_crashed" +msgstr "Bloccato" + +msgid "cron_result_status_fail" +msgstr "Non riuscito" + +msgid "cron_result_status_invalid_configuration" +msgstr "Configurazione non valida" + +msgid "cron_result_status_no_action" +msgstr "Ok, nessuna elaborazione" + +msgid "cron_result_status_ok" +msgstr "OK" + +msgid "cron_result_status_reset" +msgstr "Resetta" + +msgid "cron_running_since" +msgstr "Funzionamento da" + +msgid "cron_schedule" +msgstr "Programma" + +msgid "cron_schedule_daily" +msgstr "Quotidiano" + +msgid "cron_schedule_in_days" +msgstr "Ogni %s giorno" + +msgid "cron_schedule_in_hours" +msgstr "Ogni %s ora" + +msgid "cron_schedule_in_minutes" +msgstr "Ogni %s minuto" + +msgid "cron_schedule_monthly" +msgstr "Mensile" + +msgid "cron_schedule_quarterly" +msgstr "Trimestrale" + +msgid "cron_schedule_type" +msgstr "Programma" + +msgid "cron_schedule_value" +msgstr "Intervallo" + +msgid "cron_schedule_weekly" +msgstr "Settimanale" + +msgid "cron_schedule_yearly" +msgstr "Annuo" + +msgid "cron_status" +msgstr "Stato" + +msgid "cron_status_active" +msgstr "Attiva" + +msgid "cron_status_inactive" +msgstr "Disattiva" + +msgid "cron_status_info" +msgstr "Informazioni stato" diff --git a/components/ILIAS/Cron/lang/cron_ja.po b/components/ILIAS/Cron/lang/cron_ja.po new file mode 100644 index 000000000000..d2b1ee01a970 --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_ja.po @@ -0,0 +1,162 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: cron\n" + +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "クラッシュの可能性" + +msgid "cro_job_rc_job_manual_reset" +msgstr "管理者操作でCron jobを再有効化" + +msgid "cro_job_rc_job_no_result" +msgstr "Cron jobは正しい結果を返しませんでした。" + +msgid "cron_action_activate" +msgstr "アクティブにする" + +msgid "cron_action_activate_success" +msgstr "クローンジョブはアクティブ化されました。" + +msgid "cron_action_activate_sure" +msgstr "本当にクローンジョブ\"%s\"をアクティブにしますか?" + +msgid "cron_action_activate_sure_multi" +msgstr "本当に次のcron-jobを有効にしますか?" + +msgid "cron_action_deactivate" +msgstr "アクティブ解除" + +msgid "cron_action_deactivate_success" +msgstr "クローンジョブのアクティブを解除しました。" + +msgid "cron_action_deactivate_sure" +msgstr "本当にクローンジョブ\"%s\"を解除しますか?" + +msgid "cron_action_deactivate_sure_multi" +msgstr "本当に次のcron-jobを無効にしますか?" + +msgid "cron_action_edit" +msgstr "編集" + +msgid "cron_action_edit_success" +msgstr "予定を更新しました。" + +msgid "cron_action_reset" +msgstr "リセット" + +msgid "cron_action_reset_success" +msgstr "クローンジョブはリセットしました。" + +msgid "cron_action_reset_sure" +msgstr "本当にクローンジョブ\"%s\"をリセットしますか?" + +msgid "cron_action_reset_sure_multi" +msgstr "次のcro-jobを本当にリセットしますか?" + +msgid "cron_action_run" +msgstr "実行" + +msgid "cron_action_run_fail" +msgstr "クローンジョブは失敗しました。" + +msgid "cron_action_run_success" +msgstr "クローンジョブは成功しました。" + +msgid "cron_action_run_sure" +msgstr "本当にクローンジョブ\"%s\"を実行しますか?" + +msgid "cron_changed_by_crontab" +msgstr "システム" + +msgid "cron_component" +msgstr "コンポーネント" + +msgid "cron_job_id" +msgstr "ID" + +msgid "cron_jobs_with_required_intervention" +msgstr "次の作業には介入が必要な場合があります。" + +msgid "cron_last_run" +msgstr "最終試行" + +msgid "cron_no_executable_job_selected" +msgstr "実行可能なクローンジョブを一つは選択してください。" + +msgid "cron_result" +msgstr "結果" + +msgid "cron_result_info" +msgstr "結果情報" + +msgid "cron_result_status_crashed" +msgstr "クラッシュしました。" + +msgid "cron_result_status_fail" +msgstr "失敗しました" + +msgid "cron_result_status_invalid_configuration" +msgstr "不正な構成" + +msgid "cron_result_status_no_action" +msgstr "Ok, 処理中なし" + +msgid "cron_result_status_ok" +msgstr "Ok" + +msgid "cron_result_status_reset" +msgstr "リセット" + +msgid "cron_running_since" +msgstr "開始時間" + +msgid "cron_schedule" +msgstr "予定" + +msgid "cron_schedule_daily" +msgstr "毎日" + +msgid "cron_schedule_in_days" +msgstr "%s日間隔" + +msgid "cron_schedule_in_hours" +msgstr "%s時間間隔" + +msgid "cron_schedule_in_minutes" +msgstr "%s分間隔" + +msgid "cron_schedule_monthly" +msgstr "月" + +msgid "cron_schedule_quarterly" +msgstr "4半期" + +msgid "cron_schedule_type" +msgstr "予定" + +msgid "cron_schedule_value" +msgstr "間隔" + +msgid "cron_schedule_weekly" +msgstr "週間" + +msgid "cron_schedule_yearly" +msgstr "年間" + +msgid "cron_status" +msgstr "ステータス" + +msgid "cron_status_active" +msgstr "アクティブ" + +msgid "cron_status_inactive" +msgstr "非アクティブ" + +msgid "cron_status_info" +msgstr "ステータス情報" diff --git a/components/ILIAS/Cron/lang/cron_ka.po b/components/ILIAS/Cron/lang/cron_ka.po new file mode 100644 index 000000000000..71b4f03de968 --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_ka.po @@ -0,0 +1,213 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cron\n" + +#, fuzzy +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "PROBABLY CRASHED" + +#, fuzzy +msgid "cro_job_rc_job_manual_reset" +msgstr "RESET MANUALLY" + +#, fuzzy +msgid "cro_job_rc_job_no_result" +msgstr "Cron job did not return a proper result" + +#, fuzzy +msgid "cron_action_activate" +msgstr "Activate" + +#, fuzzy +msgid "cron_action_activate_success" +msgstr "Cron-Job activated." + +#, fuzzy +msgid "cron_action_activate_sure" +msgstr "Are you sure you want to activate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_activate_sure_multi" +msgstr "Are you sure you want to activate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deactivated." + +#, fuzzy +msgid "cron_action_deactivate_sure" +msgstr "Are you sure you want to deactivate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_deactivate_sure_multi" +msgstr "Are you sure you want to deactivate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_edit" +msgstr "Edit" + +#, fuzzy +msgid "cron_action_edit_success" +msgstr "Schedule updated." + +#, fuzzy +msgid "cron_action_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_action_reset_success" +msgstr "Cron-Job reset." + +#, fuzzy +msgid "cron_action_reset_sure" +msgstr "Are you sure you want to reset the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_reset_sure_multi" +msgstr "Are you sure you want to reset the following cron-jobs?" + +#, fuzzy +msgid "cron_action_run" +msgstr "Execute" + +#, fuzzy +msgid "cron_action_run_fail" +msgstr "Cron-Job failed." + +#, fuzzy +msgid "cron_action_run_success" +msgstr "Cron-Job run successfully." + +#, fuzzy +msgid "cron_action_run_sure" +msgstr "Are you sure you want to run the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_changed_by_crontab" +msgstr "SYSTEM " + +#, fuzzy +msgid "cron_component" +msgstr "Component" + +#, fuzzy +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +#, fuzzy +msgid "cron_last_run" +msgstr "Last Run" + +#, fuzzy +msgid "cron_no_executable_job_selected" +msgstr "Please select at least one executable cron-job." + +#, fuzzy +msgid "cron_result" +msgstr "Result" + +#, fuzzy +msgid "cron_result_info" +msgstr "Result Info" + +#, fuzzy +msgid "cron_result_status_crashed" +msgstr "Crashed" + +#, fuzzy +msgid "cron_result_status_fail" +msgstr "Failed" + +#, fuzzy +msgid "cron_result_status_invalid_configuration" +msgstr "Invalid Configuration" + +#, fuzzy +msgid "cron_result_status_no_action" +msgstr "Ok, no processing" + +#, fuzzy +msgid "cron_result_status_ok" +msgstr "Ok" + +#, fuzzy +msgid "cron_result_status_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_running_since" +msgstr "Running since" + +#, fuzzy +msgid "cron_schedule" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_daily" +msgstr "Daily" + +#, fuzzy +msgid "cron_schedule_in_days" +msgstr "Every %s days" + +#, fuzzy +msgid "cron_schedule_in_hours" +msgstr "Every %s hours" + +#, fuzzy +msgid "cron_schedule_in_minutes" +msgstr "Every %s minutes" + +#, fuzzy +msgid "cron_schedule_monthly" +msgstr "Monthly" + +#, fuzzy +msgid "cron_schedule_quarterly" +msgstr "Quarterly" + +#, fuzzy +msgid "cron_schedule_type" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_value" +msgstr "Interval" + +#, fuzzy +msgid "cron_schedule_weekly" +msgstr "Weekly" + +#, fuzzy +msgid "cron_schedule_yearly" +msgstr "Yearly" + +#, fuzzy +msgid "cron_status" +msgstr "Status" + +#, fuzzy +msgid "cron_status_active" +msgstr "Active" + +#, fuzzy +msgid "cron_status_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/Cron/lang/cron_lt.po b/components/ILIAS/Cron/lang/cron_lt.po new file mode 100644 index 000000000000..406ae8e398af --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_lt.po @@ -0,0 +1,213 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: cron\n" + +#, fuzzy +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "PROBABLY CRASHED" + +#, fuzzy +msgid "cro_job_rc_job_manual_reset" +msgstr "RESET MANUALLY" + +#, fuzzy +msgid "cro_job_rc_job_no_result" +msgstr "Cron job did not return a proper result" + +#, fuzzy +msgid "cron_action_activate" +msgstr "Activate" + +#, fuzzy +msgid "cron_action_activate_success" +msgstr "Cron-Job activated." + +#, fuzzy +msgid "cron_action_activate_sure" +msgstr "Are you sure you want to activate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_activate_sure_multi" +msgstr "Are you sure you want to activate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deactivated." + +#, fuzzy +msgid "cron_action_deactivate_sure" +msgstr "Are you sure you want to deactivate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_deactivate_sure_multi" +msgstr "Are you sure you want to deactivate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_edit" +msgstr "Edit" + +#, fuzzy +msgid "cron_action_edit_success" +msgstr "Schedule updated." + +#, fuzzy +msgid "cron_action_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_action_reset_success" +msgstr "Cron-Job reset." + +#, fuzzy +msgid "cron_action_reset_sure" +msgstr "Are you sure you want to reset the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_reset_sure_multi" +msgstr "Are you sure you want to reset the following cron-jobs?" + +#, fuzzy +msgid "cron_action_run" +msgstr "Execute" + +#, fuzzy +msgid "cron_action_run_fail" +msgstr "Cron-Job failed." + +#, fuzzy +msgid "cron_action_run_success" +msgstr "Cron-Job run successfully." + +#, fuzzy +msgid "cron_action_run_sure" +msgstr "Are you sure you want to run the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_changed_by_crontab" +msgstr "SYSTEM " + +#, fuzzy +msgid "cron_component" +msgstr "Component" + +#, fuzzy +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +#, fuzzy +msgid "cron_last_run" +msgstr "Last Run" + +#, fuzzy +msgid "cron_no_executable_job_selected" +msgstr "Please select at least one executable cron-job." + +#, fuzzy +msgid "cron_result" +msgstr "Result" + +#, fuzzy +msgid "cron_result_info" +msgstr "Result Info" + +#, fuzzy +msgid "cron_result_status_crashed" +msgstr "Crashed" + +#, fuzzy +msgid "cron_result_status_fail" +msgstr "Failed" + +#, fuzzy +msgid "cron_result_status_invalid_configuration" +msgstr "Invalid Configuration" + +#, fuzzy +msgid "cron_result_status_no_action" +msgstr "Ok, no processing" + +#, fuzzy +msgid "cron_result_status_ok" +msgstr "Ok" + +#, fuzzy +msgid "cron_result_status_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_running_since" +msgstr "Running since" + +#, fuzzy +msgid "cron_schedule" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_daily" +msgstr "Daily" + +#, fuzzy +msgid "cron_schedule_in_days" +msgstr "Every %s days" + +#, fuzzy +msgid "cron_schedule_in_hours" +msgstr "Every %s hours" + +#, fuzzy +msgid "cron_schedule_in_minutes" +msgstr "Every %s minutes" + +#, fuzzy +msgid "cron_schedule_monthly" +msgstr "Monthly" + +#, fuzzy +msgid "cron_schedule_quarterly" +msgstr "Quarterly" + +#, fuzzy +msgid "cron_schedule_type" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_value" +msgstr "Interval" + +#, fuzzy +msgid "cron_schedule_weekly" +msgstr "Weekly" + +#, fuzzy +msgid "cron_schedule_yearly" +msgstr "Yearly" + +#, fuzzy +msgid "cron_status" +msgstr "Status" + +#, fuzzy +msgid "cron_status_active" +msgstr "Active" + +#, fuzzy +msgid "cron_status_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/Cron/lang/cron_nl.po b/components/ILIAS/Cron/lang/cron_nl.po new file mode 100644 index 000000000000..41a29a07b333 --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_nl.po @@ -0,0 +1,168 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cron\n" + +#, fuzzy +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "PROBABLY CRASHED" + +#, fuzzy +msgid "cro_job_rc_job_manual_reset" +msgstr "RESET MANUALLY" + +#, fuzzy +msgid "cro_job_rc_job_no_result" +msgstr "Cron job did not return a proper result" + +msgid "cron_action_activate" +msgstr "Activate" + +msgid "cron_action_activate_success" +msgstr "Cron-Job activated." + +msgid "cron_action_activate_sure" +msgstr "Are you sure you want to activate the cron-job \"%s\"?" + +msgid "cron_action_activate_sure_multi" +msgstr "Weet je zeker dat je de volgende cron-job wilt uitschakelen?" + +msgid "cron_action_deactivate" +msgstr "Deactivate" + +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deactivated." + +msgid "cron_action_deactivate_sure" +msgstr "Are you sure you want to deactivate the cron-job \"%s\"?" + +msgid "cron_action_deactivate_sure_multi" +msgstr "Weet je zeker dat je de volgende cron-jobs wilt uitschakelen?" + +msgid "cron_action_edit" +msgstr "Edit" + +msgid "cron_action_edit_success" +msgstr "Schedule updated." + +msgid "cron_action_reset" +msgstr "Reset" + +msgid "cron_action_reset_success" +msgstr "Cron-Job reset." + +msgid "cron_action_reset_sure" +msgstr "Are you sure you want to reset the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_reset_sure_multi" +msgstr "Are you sure you want to reset the following cron-jobs?" + +msgid "cron_action_run" +msgstr "Execute" + +msgid "cron_action_run_fail" +msgstr "Cron-Job failed." + +msgid "cron_action_run_success" +msgstr "Cron-Job run successfully." + +msgid "cron_action_run_sure" +msgstr "Are you sure you want to run the cron-job \"%s\"?" + +msgid "cron_changed_by_crontab" +msgstr "SYSTEM" + +msgid "cron_component" +msgstr "Component" + +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +msgid "cron_last_run" +msgstr "Last Run" + +msgid "cron_no_executable_job_selected" +msgstr "Selecteer tenminste één executeerbare cron-job." + +msgid "cron_result" +msgstr "Result" + +msgid "cron_result_info" +msgstr "Result Info" + +msgid "cron_result_status_crashed" +msgstr "Crashed" + +#, fuzzy +msgid "cron_result_status_fail" +msgstr "Failed" + +msgid "cron_result_status_invalid_configuration" +msgstr "Invalid Configuration" + +msgid "cron_result_status_no_action" +msgstr "Ok, no processing" + +msgid "cron_result_status_ok" +msgstr "Ok" + +msgid "cron_result_status_reset" +msgstr "Reset" + +msgid "cron_running_since" +msgstr "Running since" + +msgid "cron_schedule" +msgstr "Schedule" + +msgid "cron_schedule_daily" +msgstr "Daily" + +msgid "cron_schedule_in_days" +msgstr "Every %s days" + +msgid "cron_schedule_in_hours" +msgstr "Every %s hours" + +msgid "cron_schedule_in_minutes" +msgstr "Every %s minutes" + +msgid "cron_schedule_monthly" +msgstr "Monthly" + +msgid "cron_schedule_quarterly" +msgstr "Quarterly" + +msgid "cron_schedule_type" +msgstr "Schedule" + +msgid "cron_schedule_value" +msgstr "Interval" + +msgid "cron_schedule_weekly" +msgstr "Weekly" + +msgid "cron_schedule_yearly" +msgstr "Yearly" + +msgid "cron_status" +msgstr "Status" + +msgid "cron_status_active" +msgstr "Active" + +msgid "cron_status_inactive" +msgstr "Inactive" + +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/Cron/lang/cron_pl.po b/components/ILIAS/Cron/lang/cron_pl.po new file mode 100644 index 000000000000..89d912bb4f79 --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_pl.po @@ -0,0 +1,163 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cron\n" + +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "Zadanie Cron zostało wyłączone, ponieważ było nieaktywne dłużej niż 3 godziny" + +msgid "cro_job_rc_job_manual_reset" +msgstr "Reset manualny" + +msgid "cro_job_rc_job_no_result" +msgstr "W ramach zadania Cron nie udało się przekazać prawidłowego wyniku" + +msgid "cron_action_activate" +msgstr "Aktywuj" + +msgid "cron_action_activate_success" +msgstr "Aktywowano zadanie Cron." + +msgid "cron_action_activate_sure" +msgstr "Czy naprawdę chcesz aktywować zadanie Cron \"%s\"?" + +msgid "cron_action_activate_sure_multi" +msgstr "Czy naprawdę chcesz aktywować następujące zadania Cron?" + +msgid "cron_action_deactivate" +msgstr "Deaktywuj" + +msgid "cron_action_deactivate_success" +msgstr "Wyłączono zadanie Cron." + +msgid "cron_action_deactivate_sure" +msgstr "Czy naprawdę chcesz wyłączyć zadanie Cron \"%s\"?" + +msgid "cron_action_deactivate_sure_multi" +msgstr "Czy naprawdę chcesz wyłączyć następujące zadania Cron?" + +msgid "cron_action_edit" +msgstr "Edytuj" + +msgid "cron_action_edit_success" +msgstr "Zaktualizowano harmonogram." + +msgid "cron_action_reset" +msgstr "Resetuj" + +msgid "cron_action_reset_success" +msgstr "Zresetowano zadanie Cron." + +msgid "cron_action_reset_sure" +msgstr "Czy naprawdę chcesz zresetować zadanie Cron \"%s\"?" + +msgid "cron_action_reset_sure_multi" +msgstr "Czy naprawdę chcesz zresetować następujące zadania Cron?" + +msgid "cron_action_run" +msgstr "Wykonaj" + +msgid "cron_action_run_fail" +msgstr "Wykonanie nie udało się." + +msgid "cron_action_run_success" +msgstr "Zadanie Cron zostało z powodzeniem wykonane." + +msgid "cron_action_run_sure" +msgstr "Czy naprawdę chcesz wykonać zadanie Cron \"%s\"?" + +msgid "cron_changed_by_crontab" +msgstr "SYSTEM" + +msgid "cron_component" +msgstr "Element" + +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +msgid "cron_last_run" +msgstr "Ostatni przebieg" + +msgid "cron_no_executable_job_selected" +msgstr "Wybierz co najmniej jedno możliwe do wykonania zadanie Cron." + +msgid "cron_result" +msgstr "Wynik" + +msgid "cron_result_info" +msgstr "Informacja o wyniku" + +msgid "cron_result_status_crashed" +msgstr "Przerwanie" + +msgid "cron_result_status_fail" +msgstr "Błędy" + +msgid "cron_result_status_invalid_configuration" +msgstr "Nieważna konfiguracja" + +msgid "cron_result_status_no_action" +msgstr "Ok, brak edycji" + +msgid "cron_result_status_ok" +msgstr "Ok" + +msgid "cron_result_status_reset" +msgstr "Reset" + +msgid "cron_running_since" +msgstr "Działa od" + +msgid "cron_schedule" +msgstr "Harmonogram" + +msgid "cron_schedule_daily" +msgstr "Co dzień" + +msgid "cron_schedule_in_days" +msgstr "Co %s dni" + +msgid "cron_schedule_in_hours" +msgstr "Co %s godzin" + +msgid "cron_schedule_in_minutes" +msgstr "Co %s minut" + +msgid "cron_schedule_monthly" +msgstr "Co miesiąc" + +msgid "cron_schedule_quarterly" +msgstr "Co kwartał" + +msgid "cron_schedule_type" +msgstr "Harmonogram" + +msgid "cron_schedule_value" +msgstr "Interwał" + +msgid "cron_schedule_weekly" +msgstr "Co tydzień" + +msgid "cron_schedule_yearly" +msgstr "Co rok" + +msgid "cron_status" +msgstr "Status" + +msgid "cron_status_active" +msgstr "Aktywny" + +msgid "cron_status_inactive" +msgstr "Nieaktywny" + +msgid "cron_status_info" +msgstr "Informacja o statusie" diff --git a/components/ILIAS/Cron/lang/cron_pt.po b/components/ILIAS/Cron/lang/cron_pt.po new file mode 100644 index 000000000000..e3b71badc3e8 --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_pt.po @@ -0,0 +1,163 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: cron\n" + +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "Data e hora" + +msgid "cro_job_rc_job_manual_reset" +msgstr "O tempo para acabar é anterior ao tempo para começar. Insira um intervalo de tempo válido." + +msgid "cro_job_rc_job_no_result" +msgstr "Ficheiros atribuídos" + +msgid "cron_action_activate" +msgstr "Ativar" + +msgid "cron_action_activate_success" +msgstr "Cron-Job ativado." + +msgid "cron_action_activate_sure" +msgstr "Tem a certeza que quer ativar o cron job \"%s\"?" + +msgid "cron_action_activate_sure_multi" +msgstr "Tem a certeza que quer ativar os seguintes cron jobs?" + +msgid "cron_action_deactivate" +msgstr "Desativar" + +msgid "cron_action_deactivate_success" +msgstr "Cron-Job desativado." + +msgid "cron_action_deactivate_sure" +msgstr "Tem a certeza que quer desativar o cron job \"%s\"?" + +msgid "cron_action_deactivate_sure_multi" +msgstr "Tem a certeza que quer desativar os seguintes cron jobs?" + +msgid "cron_action_edit" +msgstr "Editar" + +msgid "cron_action_edit_success" +msgstr "Marcação atualizada." + +msgid "cron_action_reset" +msgstr "Repor" + +msgid "cron_action_reset_success" +msgstr "Cron-Job reposto." + +msgid "cron_action_reset_sure" +msgstr "Tem a certeza que quer repor o cron job \"%s\"?" + +msgid "cron_action_reset_sure_multi" +msgstr "Tem a certeza que quer repor os seguintes cron jobs?" + +msgid "cron_action_run" +msgstr "Executar" + +msgid "cron_action_run_fail" +msgstr "Cron-Job falhou." + +msgid "cron_action_run_success" +msgstr "Cron-Job executado com sucesso." + +msgid "cron_action_run_sure" +msgstr "Tem a certeza que quer executar o cron job \"%s\"?" + +msgid "cron_changed_by_crontab" +msgstr "SISTEMA" + +msgid "cron_component" +msgstr "Componente" + +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +msgid "cron_last_run" +msgstr "Última execução" + +msgid "cron_no_executable_job_selected" +msgstr "Selecione pelo menos um cron job executável." + +msgid "cron_result" +msgstr "Resultado" + +msgid "cron_result_info" +msgstr "Informação do resultado" + +msgid "cron_result_status_crashed" +msgstr "Caiu" + +msgid "cron_result_status_fail" +msgstr "Falhou" + +msgid "cron_result_status_invalid_configuration" +msgstr "Configuração inválida" + +msgid "cron_result_status_no_action" +msgstr "Ok, nenhum processamento" + +msgid "cron_result_status_ok" +msgstr "Ok" + +msgid "cron_result_status_reset" +msgstr "Repor" + +msgid "cron_running_since" +msgstr "A funcionar desde" + +msgid "cron_schedule" +msgstr "Marcação" + +msgid "cron_schedule_daily" +msgstr "Diariamente" + +msgid "cron_schedule_in_days" +msgstr "A cada %s dias" + +msgid "cron_schedule_in_hours" +msgstr "A cada %s horas" + +msgid "cron_schedule_in_minutes" +msgstr "A cada %s minutos" + +msgid "cron_schedule_monthly" +msgstr "Mensalmente" + +msgid "cron_schedule_quarterly" +msgstr "Semestralmente" + +msgid "cron_schedule_type" +msgstr "Marcação" + +msgid "cron_schedule_value" +msgstr "Intervalo" + +msgid "cron_schedule_weekly" +msgstr "Semanal" + +msgid "cron_schedule_yearly" +msgstr "Anual" + +msgid "cron_status" +msgstr "Estado" + +msgid "cron_status_active" +msgstr "Ativo" + +msgid "cron_status_inactive" +msgstr "Inativo" + +msgid "cron_status_info" +msgstr "Informação do estado" diff --git a/components/ILIAS/Cron/lang/cron_ro.po b/components/ILIAS/Cron/lang/cron_ro.po new file mode 100644 index 000000000000..3ee062847223 --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_ro.po @@ -0,0 +1,213 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: cron\n" + +#, fuzzy +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "PROBABLY CRASHED" + +#, fuzzy +msgid "cro_job_rc_job_manual_reset" +msgstr "RESET MANUALLY" + +#, fuzzy +msgid "cro_job_rc_job_no_result" +msgstr "Cron job did not return a proper result" + +#, fuzzy +msgid "cron_action_activate" +msgstr "Activate" + +#, fuzzy +msgid "cron_action_activate_success" +msgstr "Cron-Job activated." + +#, fuzzy +msgid "cron_action_activate_sure" +msgstr "Are you sure you want to activate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_activate_sure_multi" +msgstr "Are you sure you want to activate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deactivated." + +#, fuzzy +msgid "cron_action_deactivate_sure" +msgstr "Are you sure you want to deactivate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_deactivate_sure_multi" +msgstr "Are you sure you want to deactivate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_edit" +msgstr "Edit" + +#, fuzzy +msgid "cron_action_edit_success" +msgstr "Schedule updated." + +#, fuzzy +msgid "cron_action_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_action_reset_success" +msgstr "Cron-Job reset." + +#, fuzzy +msgid "cron_action_reset_sure" +msgstr "Are you sure you want to reset the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_reset_sure_multi" +msgstr "Are you sure you want to reset the following cron-jobs?" + +#, fuzzy +msgid "cron_action_run" +msgstr "Execute" + +#, fuzzy +msgid "cron_action_run_fail" +msgstr "Cron-Job failed." + +#, fuzzy +msgid "cron_action_run_success" +msgstr "Cron-Job run successfully." + +#, fuzzy +msgid "cron_action_run_sure" +msgstr "Are you sure you want to run the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_changed_by_crontab" +msgstr "SYSTEM " + +#, fuzzy +msgid "cron_component" +msgstr "Component" + +#, fuzzy +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +#, fuzzy +msgid "cron_last_run" +msgstr "Last Run" + +#, fuzzy +msgid "cron_no_executable_job_selected" +msgstr "Please select at least one executable cron-job." + +#, fuzzy +msgid "cron_result" +msgstr "Result" + +#, fuzzy +msgid "cron_result_info" +msgstr "Result Info" + +#, fuzzy +msgid "cron_result_status_crashed" +msgstr "Crashed" + +#, fuzzy +msgid "cron_result_status_fail" +msgstr "Failed" + +#, fuzzy +msgid "cron_result_status_invalid_configuration" +msgstr "Invalid Configuration" + +#, fuzzy +msgid "cron_result_status_no_action" +msgstr "Ok, no processing" + +#, fuzzy +msgid "cron_result_status_ok" +msgstr "Ok" + +#, fuzzy +msgid "cron_result_status_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_running_since" +msgstr "Running since" + +#, fuzzy +msgid "cron_schedule" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_daily" +msgstr "Daily" + +#, fuzzy +msgid "cron_schedule_in_days" +msgstr "Every %s days" + +#, fuzzy +msgid "cron_schedule_in_hours" +msgstr "Every %s hours" + +#, fuzzy +msgid "cron_schedule_in_minutes" +msgstr "Every %s minutes" + +#, fuzzy +msgid "cron_schedule_monthly" +msgstr "Monthly" + +#, fuzzy +msgid "cron_schedule_quarterly" +msgstr "Quarterly" + +#, fuzzy +msgid "cron_schedule_type" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_value" +msgstr "Interval" + +#, fuzzy +msgid "cron_schedule_weekly" +msgstr "Weekly" + +#, fuzzy +msgid "cron_schedule_yearly" +msgstr "Yearly" + +#, fuzzy +msgid "cron_status" +msgstr "Status" + +#, fuzzy +msgid "cron_status_active" +msgstr "Active" + +#, fuzzy +msgid "cron_status_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/Cron/lang/cron_ru.po b/components/ILIAS/Cron/lang/cron_ru.po new file mode 100644 index 000000000000..38ea492fd91e --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_ru.po @@ -0,0 +1,169 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cron\n" + +#, fuzzy +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "PROBABLY CRASHED" + +#, fuzzy +msgid "cro_job_rc_job_manual_reset" +msgstr "RESET MANUALLY" + +#, fuzzy +msgid "cro_job_rc_job_no_result" +msgstr "Cron job did not return a proper result" + +msgid "cron_action_activate" +msgstr "Activate" + +msgid "cron_action_activate_success" +msgstr "Cron-Job activated." + +msgid "cron_action_activate_sure" +msgstr "Are you sure you want to activate the cron-job \"%s\"?" + +msgid "cron_action_activate_sure_multi" +msgstr "Are you sure you want to activate the following cron-jobs?" + +msgid "cron_action_deactivate" +msgstr "Deactivate" + +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deactivated." + +msgid "cron_action_deactivate_sure" +msgstr "Are you sure you want to deactivate the cron-job \"%s\"?" + +msgid "cron_action_deactivate_sure_multi" +msgstr "Are you sure you want to deactivate the following cron-jobs?" + +msgid "cron_action_edit" +msgstr "Edit" + +msgid "cron_action_edit_success" +msgstr "Schedule updated." + +msgid "cron_action_reset" +msgstr "Reset" + +msgid "cron_action_reset_success" +msgstr "Cron-Job reset." + +msgid "cron_action_reset_sure" +msgstr "Are you sure you want to reset the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_reset_sure_multi" +msgstr "Are you sure you want to reset the following cron-jobs?" + +msgid "cron_action_run" +msgstr "Execute" + +msgid "cron_action_run_fail" +msgstr "Cron-Job failed." + +msgid "cron_action_run_success" +msgstr "Cron-Job run successfully." + +msgid "cron_action_run_sure" +msgstr "Are you sure you want to run the cron-job \"%s\"?" + +msgid "cron_changed_by_crontab" +msgstr "SYSTEM" + +msgid "cron_component" +msgstr "Component" + +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +msgid "cron_last_run" +msgstr "Last Run" + +#, fuzzy +msgid "cron_no_executable_job_selected" +msgstr "Please select at least one executable cron-job." + +msgid "cron_result" +msgstr "Result" + +msgid "cron_result_info" +msgstr "Result Info" + +msgid "cron_result_status_crashed" +msgstr "Crashed" + +#, fuzzy +msgid "cron_result_status_fail" +msgstr "Failed" + +msgid "cron_result_status_invalid_configuration" +msgstr "Invalid Configuration" + +msgid "cron_result_status_no_action" +msgstr "Ok, no processing" + +msgid "cron_result_status_ok" +msgstr "Ok" + +msgid "cron_result_status_reset" +msgstr "Reset" + +msgid "cron_running_since" +msgstr "Running since" + +msgid "cron_schedule" +msgstr "Schedule" + +msgid "cron_schedule_daily" +msgstr "Daily" + +msgid "cron_schedule_in_days" +msgstr "Every %s days" + +msgid "cron_schedule_in_hours" +msgstr "Every %s hours" + +msgid "cron_schedule_in_minutes" +msgstr "Every %s minutes" + +msgid "cron_schedule_monthly" +msgstr "Monthly" + +msgid "cron_schedule_quarterly" +msgstr "Quarterly" + +msgid "cron_schedule_type" +msgstr "Schedule" + +msgid "cron_schedule_value" +msgstr "Interval" + +msgid "cron_schedule_weekly" +msgstr "Weekly" + +msgid "cron_schedule_yearly" +msgstr "Yearly" + +msgid "cron_status" +msgstr "Status" + +msgid "cron_status_active" +msgstr "Active" + +msgid "cron_status_inactive" +msgstr "Inactive" + +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/Cron/lang/cron_sk.po b/components/ILIAS/Cron/lang/cron_sk.po new file mode 100644 index 000000000000..fe180aa7a1e4 --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_sk.po @@ -0,0 +1,213 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: cron\n" + +#, fuzzy +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "PROBABLY CRASHED" + +#, fuzzy +msgid "cro_job_rc_job_manual_reset" +msgstr "RESET MANUALLY" + +#, fuzzy +msgid "cro_job_rc_job_no_result" +msgstr "Cron job did not return a proper result" + +#, fuzzy +msgid "cron_action_activate" +msgstr "Activate" + +#, fuzzy +msgid "cron_action_activate_success" +msgstr "Cron-Job activated." + +#, fuzzy +msgid "cron_action_activate_sure" +msgstr "Are you sure you want to activate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_activate_sure_multi" +msgstr "Are you sure you want to activate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deactivated." + +#, fuzzy +msgid "cron_action_deactivate_sure" +msgstr "Are you sure you want to deactivate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_deactivate_sure_multi" +msgstr "Are you sure you want to deactivate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_edit" +msgstr "Edit" + +#, fuzzy +msgid "cron_action_edit_success" +msgstr "Schedule updated." + +#, fuzzy +msgid "cron_action_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_action_reset_success" +msgstr "Cron-Job reset." + +#, fuzzy +msgid "cron_action_reset_sure" +msgstr "Are you sure you want to reset the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_reset_sure_multi" +msgstr "Are you sure you want to reset the following cron-jobs?" + +#, fuzzy +msgid "cron_action_run" +msgstr "Execute" + +#, fuzzy +msgid "cron_action_run_fail" +msgstr "Cron-Job failed." + +#, fuzzy +msgid "cron_action_run_success" +msgstr "Cron-Job run successfully." + +#, fuzzy +msgid "cron_action_run_sure" +msgstr "Are you sure you want to run the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_changed_by_crontab" +msgstr "SYSTEM " + +#, fuzzy +msgid "cron_component" +msgstr "Component" + +#, fuzzy +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +#, fuzzy +msgid "cron_last_run" +msgstr "Last Run" + +#, fuzzy +msgid "cron_no_executable_job_selected" +msgstr "Please select at least one executable cron-job." + +#, fuzzy +msgid "cron_result" +msgstr "Result" + +#, fuzzy +msgid "cron_result_info" +msgstr "Result Info" + +#, fuzzy +msgid "cron_result_status_crashed" +msgstr "Crashed" + +#, fuzzy +msgid "cron_result_status_fail" +msgstr "Failed" + +#, fuzzy +msgid "cron_result_status_invalid_configuration" +msgstr "Invalid Configuration" + +#, fuzzy +msgid "cron_result_status_no_action" +msgstr "Ok, no processing" + +#, fuzzy +msgid "cron_result_status_ok" +msgstr "Ok" + +#, fuzzy +msgid "cron_result_status_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_running_since" +msgstr "Running since" + +#, fuzzy +msgid "cron_schedule" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_daily" +msgstr "Daily" + +#, fuzzy +msgid "cron_schedule_in_days" +msgstr "Every %s days" + +#, fuzzy +msgid "cron_schedule_in_hours" +msgstr "Every %s hours" + +#, fuzzy +msgid "cron_schedule_in_minutes" +msgstr "Every %s minutes" + +#, fuzzy +msgid "cron_schedule_monthly" +msgstr "Monthly" + +#, fuzzy +msgid "cron_schedule_quarterly" +msgstr "Quarterly" + +#, fuzzy +msgid "cron_schedule_type" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_value" +msgstr "Interval" + +#, fuzzy +msgid "cron_schedule_weekly" +msgstr "Weekly" + +#, fuzzy +msgid "cron_schedule_yearly" +msgstr "Yearly" + +#, fuzzy +msgid "cron_status" +msgstr "Status" + +#, fuzzy +msgid "cron_status_active" +msgstr "Active" + +#, fuzzy +msgid "cron_status_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/Cron/lang/cron_sl.po b/components/ILIAS/Cron/lang/cron_sl.po new file mode 100644 index 000000000000..0535f7841016 --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_sl.po @@ -0,0 +1,163 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: cron\n" + +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "Cron job deactivated because it has been inactive for 3 hours" + +msgid "cro_job_rc_job_manual_reset" +msgstr "Cron job re-activated by admin" + +msgid "cro_job_rc_job_no_result" +msgstr "Cron job did not return a proper result" + +msgid "cron_action_activate" +msgstr "Activate" + +msgid "cron_action_activate_success" +msgstr "Cron-Job activated." + +msgid "cron_action_activate_sure" +msgstr "Are you sure you want to activate the cron-job \"%s\"?" + +msgid "cron_action_activate_sure_multi" +msgstr "Are you sure you want to activate the following cron-jobs?" + +msgid "cron_action_deactivate" +msgstr "Deactivate" + +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deactivated." + +msgid "cron_action_deactivate_sure" +msgstr "Are you sure you want to deactivate the cron-job \"%s\"?" + +msgid "cron_action_deactivate_sure_multi" +msgstr "Are you sure you want to deactivate the following cron-jobs?" + +msgid "cron_action_edit" +msgstr "Edit" + +msgid "cron_action_edit_success" +msgstr "Schedule updated." + +msgid "cron_action_reset" +msgstr "Reset" + +msgid "cron_action_reset_success" +msgstr "Cron-Job reset." + +msgid "cron_action_reset_sure" +msgstr "Are you sure you want to reset the cron-job \"%s\"?" + +msgid "cron_action_reset_sure_multi" +msgstr "Are you sure you want to reset the following cron-jobs?" + +msgid "cron_action_run" +msgstr "Execute" + +msgid "cron_action_run_fail" +msgstr "Cron-Job failed." + +msgid "cron_action_run_success" +msgstr "Cron-Job run successfully." + +msgid "cron_action_run_sure" +msgstr "Are you sure you want to run the cron-job \"%s\"?" + +msgid "cron_changed_by_crontab" +msgstr "SYSTEM" + +msgid "cron_component" +msgstr "Component" + +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +msgid "cron_last_run" +msgstr "Last Run" + +msgid "cron_no_executable_job_selected" +msgstr "Please select at least one executable cron-job." + +msgid "cron_result" +msgstr "Result" + +msgid "cron_result_info" +msgstr "Result Info" + +msgid "cron_result_status_crashed" +msgstr "Crashed" + +msgid "cron_result_status_fail" +msgstr "Failed" + +msgid "cron_result_status_invalid_configuration" +msgstr "Invalid Configuration" + +msgid "cron_result_status_no_action" +msgstr "Ok, no processing" + +msgid "cron_result_status_ok" +msgstr "Ok" + +msgid "cron_result_status_reset" +msgstr "Reset" + +msgid "cron_running_since" +msgstr "Running since" + +msgid "cron_schedule" +msgstr "Schedule" + +msgid "cron_schedule_daily" +msgstr "Daily" + +msgid "cron_schedule_in_days" +msgstr "Every %s days" + +msgid "cron_schedule_in_hours" +msgstr "Every %s hours" + +msgid "cron_schedule_in_minutes" +msgstr "Every %s minutes" + +msgid "cron_schedule_monthly" +msgstr "Monthly" + +msgid "cron_schedule_quarterly" +msgstr "Quarterly" + +msgid "cron_schedule_type" +msgstr "Schedule" + +msgid "cron_schedule_value" +msgstr "Interval" + +msgid "cron_schedule_weekly" +msgstr "Weekly" + +msgid "cron_schedule_yearly" +msgstr "Yearly" + +msgid "cron_status" +msgstr "Status" + +msgid "cron_status_active" +msgstr "Active" + +msgid "cron_status_inactive" +msgstr "Inactive" + +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/Cron/lang/cron_sq.po b/components/ILIAS/Cron/lang/cron_sq.po new file mode 100644 index 000000000000..a2e543399f11 --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_sq.po @@ -0,0 +1,213 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cron\n" + +#, fuzzy +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "PROBABLY CRASHED" + +#, fuzzy +msgid "cro_job_rc_job_manual_reset" +msgstr "RESET MANUALLY" + +#, fuzzy +msgid "cro_job_rc_job_no_result" +msgstr "Cron job did not return a proper result" + +#, fuzzy +msgid "cron_action_activate" +msgstr "Activate" + +#, fuzzy +msgid "cron_action_activate_success" +msgstr "Cron-Job activated." + +#, fuzzy +msgid "cron_action_activate_sure" +msgstr "Are you sure you want to activate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_activate_sure_multi" +msgstr "Are you sure you want to activate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deactivated." + +#, fuzzy +msgid "cron_action_deactivate_sure" +msgstr "Are you sure you want to deactivate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_deactivate_sure_multi" +msgstr "Are you sure you want to deactivate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_edit" +msgstr "Edit" + +#, fuzzy +msgid "cron_action_edit_success" +msgstr "Schedule updated." + +#, fuzzy +msgid "cron_action_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_action_reset_success" +msgstr "Cron-Job reset." + +#, fuzzy +msgid "cron_action_reset_sure" +msgstr "Are you sure you want to reset the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_reset_sure_multi" +msgstr "Are you sure you want to reset the following cron-jobs?" + +#, fuzzy +msgid "cron_action_run" +msgstr "Execute" + +#, fuzzy +msgid "cron_action_run_fail" +msgstr "Cron-Job failed." + +#, fuzzy +msgid "cron_action_run_success" +msgstr "Cron-Job run successfully." + +#, fuzzy +msgid "cron_action_run_sure" +msgstr "Are you sure you want to run the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_changed_by_crontab" +msgstr "SYSTEM " + +#, fuzzy +msgid "cron_component" +msgstr "Component" + +#, fuzzy +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +#, fuzzy +msgid "cron_last_run" +msgstr "Last Run" + +#, fuzzy +msgid "cron_no_executable_job_selected" +msgstr "Please select at least one executable cron-job." + +#, fuzzy +msgid "cron_result" +msgstr "Result" + +#, fuzzy +msgid "cron_result_info" +msgstr "Result Info" + +#, fuzzy +msgid "cron_result_status_crashed" +msgstr "Crashed" + +#, fuzzy +msgid "cron_result_status_fail" +msgstr "Failed" + +#, fuzzy +msgid "cron_result_status_invalid_configuration" +msgstr "Invalid Configuration" + +#, fuzzy +msgid "cron_result_status_no_action" +msgstr "Ok, no processing" + +#, fuzzy +msgid "cron_result_status_ok" +msgstr "Ok" + +#, fuzzy +msgid "cron_result_status_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_running_since" +msgstr "Running since" + +#, fuzzy +msgid "cron_schedule" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_daily" +msgstr "Daily" + +#, fuzzy +msgid "cron_schedule_in_days" +msgstr "Every %s days" + +#, fuzzy +msgid "cron_schedule_in_hours" +msgstr "Every %s hours" + +#, fuzzy +msgid "cron_schedule_in_minutes" +msgstr "Every %s minutes" + +#, fuzzy +msgid "cron_schedule_monthly" +msgstr "Monthly" + +#, fuzzy +msgid "cron_schedule_quarterly" +msgstr "Quarterly" + +#, fuzzy +msgid "cron_schedule_type" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_value" +msgstr "Interval" + +#, fuzzy +msgid "cron_schedule_weekly" +msgstr "Weekly" + +#, fuzzy +msgid "cron_schedule_yearly" +msgstr "Yearly" + +#, fuzzy +msgid "cron_status" +msgstr "Status" + +#, fuzzy +msgid "cron_status_active" +msgstr "Active" + +#, fuzzy +msgid "cron_status_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/Cron/lang/cron_sr.po b/components/ILIAS/Cron/lang/cron_sr.po new file mode 100644 index 000000000000..07801a1d1eec --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_sr.po @@ -0,0 +1,213 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cron\n" + +#, fuzzy +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "PROBABLY CRASHED" + +#, fuzzy +msgid "cro_job_rc_job_manual_reset" +msgstr "RESET MANUALLY" + +#, fuzzy +msgid "cro_job_rc_job_no_result" +msgstr "Cron job did not return a proper result" + +#, fuzzy +msgid "cron_action_activate" +msgstr "Activate" + +#, fuzzy +msgid "cron_action_activate_success" +msgstr "Cron-Job activated." + +#, fuzzy +msgid "cron_action_activate_sure" +msgstr "Are you sure you want to activate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_activate_sure_multi" +msgstr "Are you sure you want to activate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deactivated." + +#, fuzzy +msgid "cron_action_deactivate_sure" +msgstr "Are you sure you want to deactivate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_deactivate_sure_multi" +msgstr "Are you sure you want to deactivate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_edit" +msgstr "Edit" + +#, fuzzy +msgid "cron_action_edit_success" +msgstr "Schedule updated." + +#, fuzzy +msgid "cron_action_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_action_reset_success" +msgstr "Cron-Job reset." + +#, fuzzy +msgid "cron_action_reset_sure" +msgstr "Are you sure you want to reset the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_reset_sure_multi" +msgstr "Are you sure you want to reset the following cron-jobs?" + +#, fuzzy +msgid "cron_action_run" +msgstr "Execute" + +#, fuzzy +msgid "cron_action_run_fail" +msgstr "Cron-Job failed." + +#, fuzzy +msgid "cron_action_run_success" +msgstr "Cron-Job run successfully." + +#, fuzzy +msgid "cron_action_run_sure" +msgstr "Are you sure you want to run the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_changed_by_crontab" +msgstr "SYSTEM " + +#, fuzzy +msgid "cron_component" +msgstr "Component" + +#, fuzzy +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +#, fuzzy +msgid "cron_last_run" +msgstr "Last Run" + +#, fuzzy +msgid "cron_no_executable_job_selected" +msgstr "Please select at least one executable cron-job." + +#, fuzzy +msgid "cron_result" +msgstr "Result" + +#, fuzzy +msgid "cron_result_info" +msgstr "Result Info" + +#, fuzzy +msgid "cron_result_status_crashed" +msgstr "Crashed" + +#, fuzzy +msgid "cron_result_status_fail" +msgstr "Failed" + +#, fuzzy +msgid "cron_result_status_invalid_configuration" +msgstr "Invalid Configuration" + +#, fuzzy +msgid "cron_result_status_no_action" +msgstr "Ok, no processing" + +#, fuzzy +msgid "cron_result_status_ok" +msgstr "Ok" + +#, fuzzy +msgid "cron_result_status_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_running_since" +msgstr "Running since" + +#, fuzzy +msgid "cron_schedule" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_daily" +msgstr "Daily" + +#, fuzzy +msgid "cron_schedule_in_days" +msgstr "Every %s days" + +#, fuzzy +msgid "cron_schedule_in_hours" +msgstr "Every %s hours" + +#, fuzzy +msgid "cron_schedule_in_minutes" +msgstr "Every %s minutes" + +#, fuzzy +msgid "cron_schedule_monthly" +msgstr "Monthly" + +#, fuzzy +msgid "cron_schedule_quarterly" +msgstr "Quarterly" + +#, fuzzy +msgid "cron_schedule_type" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_value" +msgstr "Interval" + +#, fuzzy +msgid "cron_schedule_weekly" +msgstr "Weekly" + +#, fuzzy +msgid "cron_schedule_yearly" +msgstr "Yearly" + +#, fuzzy +msgid "cron_status" +msgstr "Status" + +#, fuzzy +msgid "cron_status_active" +msgstr "Active" + +#, fuzzy +msgid "cron_status_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/Cron/lang/cron_sv.po b/components/ILIAS/Cron/lang/cron_sv.po new file mode 100644 index 000000000000..0d02d84e87d3 --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_sv.po @@ -0,0 +1,163 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cron\n" + +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "Cronjobbet avaktiverades eftersom det var inaktivt i mer än 3 timmar." + +msgid "cro_job_rc_job_manual_reset" +msgstr "Cronjobbet har återaktiverats av en administratör" + +msgid "cro_job_rc_job_no_result" +msgstr "Inget rent resultat överfördes av cron-jobbet" + +msgid "cron_action_activate" +msgstr "Aktivera" + +msgid "cron_action_activate_success" +msgstr "Cron-jobbet aktiverat." + +msgid "cron_action_activate_sure" +msgstr "Vill du verkligen aktivera cron-jobbet \"%s\"?" + +msgid "cron_action_activate_sure_multi" +msgstr "Vill du verkligen aktivera följande cron-jobb?" + +msgid "cron_action_deactivate" +msgstr "Avaktivera" + +msgid "cron_action_deactivate_success" +msgstr "Cron-jobbet avaktiverat." + +msgid "cron_action_deactivate_sure" +msgstr "Vill du verkligen avaktivera cron-jobbet \"%s\"?" + +msgid "cron_action_deactivate_sure_multi" +msgstr "Vill du verkligen inaktivera följande cron-jobb?" + +msgid "cron_action_edit" +msgstr "Redigera" + +msgid "cron_action_edit_success" +msgstr "Tidtabellen uppdaterad." + +msgid "cron_action_reset" +msgstr "Återställ" + +msgid "cron_action_reset_success" +msgstr "Återställning av kronjobb." + +msgid "cron_action_reset_sure" +msgstr "Vill du verkligen återställa cron-jobbet \"%s\"?" + +msgid "cron_action_reset_sure_multi" +msgstr "Vill du verkligen återställa följande cron-jobb?" + +msgid "cron_action_run" +msgstr "Utför" + +msgid "cron_action_run_fail" +msgstr "Exekveringen misslyckades." + +msgid "cron_action_run_success" +msgstr "Cron-jobbet har utförts framgångsrikt." + +msgid "cron_action_run_sure" +msgstr "Vill du verkligen köra cron-jobbet \"%s\"?" + +msgid "cron_changed_by_crontab" +msgstr "SYSTEM" + +msgid "cron_component" +msgstr "Komponent" + +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +msgid "cron_last_run" +msgstr "Sista körningen" + +msgid "cron_no_executable_job_selected" +msgstr "Välj minst ett körbart cron-jobb." + +msgid "cron_result" +msgstr "Resultat" + +msgid "cron_result_info" +msgstr "Info om resultat" + +msgid "cron_result_status_crashed" +msgstr "Avbryt" + +msgid "cron_result_status_fail" +msgstr "Fel" + +msgid "cron_result_status_invalid_configuration" +msgstr " Ogiltig konfiguration" + +msgid "cron_result_status_no_action" +msgstr "Okej, ingen redigering" + +msgid "cron_result_status_ok" +msgstr "Ok" + +msgid "cron_result_status_reset" +msgstr "Återställ" + +msgid "cron_running_since" +msgstr "Running sedan" + +msgid "cron_schedule" +msgstr "Tidtabell" + +msgid "cron_schedule_daily" +msgstr "Dagligen" + +msgid "cron_schedule_in_days" +msgstr "Alla %s dagar" + +msgid "cron_schedule_in_hours" +msgstr "Alla %s timmar" + +msgid "cron_schedule_in_minutes" +msgstr "Alla %s minuter" + +msgid "cron_schedule_monthly" +msgstr "Månadsvis" + +msgid "cron_schedule_quarterly" +msgstr "Kvartalsvis" + +msgid "cron_schedule_type" +msgstr "Tidtabell" + +msgid "cron_schedule_value" +msgstr "Intervall" + +msgid "cron_schedule_weekly" +msgstr "Veckovis" + +msgid "cron_schedule_yearly" +msgstr "Årlig" + +msgid "cron_status" +msgstr "Status" + +msgid "cron_status_active" +msgstr "Aktiv" + +msgid "cron_status_inactive" +msgstr "Inaktiv" + +msgid "cron_status_info" +msgstr "Status info" diff --git a/components/ILIAS/Cron/lang/cron_tr.po b/components/ILIAS/Cron/lang/cron_tr.po new file mode 100644 index 000000000000..e4142c0c7bb6 --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_tr.po @@ -0,0 +1,213 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: cron\n" + +#, fuzzy +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "PROBABLY CRASHED" + +#, fuzzy +msgid "cro_job_rc_job_manual_reset" +msgstr "RESET MANUALLY" + +#, fuzzy +msgid "cro_job_rc_job_no_result" +msgstr "Cron job did not return a proper result" + +#, fuzzy +msgid "cron_action_activate" +msgstr "Activate" + +#, fuzzy +msgid "cron_action_activate_success" +msgstr "Cron-Job activated." + +#, fuzzy +msgid "cron_action_activate_sure" +msgstr "Are you sure you want to activate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_activate_sure_multi" +msgstr "Are you sure you want to activate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deactivated." + +#, fuzzy +msgid "cron_action_deactivate_sure" +msgstr "Are you sure you want to deactivate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_deactivate_sure_multi" +msgstr "Are you sure you want to deactivate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_edit" +msgstr "Edit" + +#, fuzzy +msgid "cron_action_edit_success" +msgstr "Schedule updated." + +#, fuzzy +msgid "cron_action_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_action_reset_success" +msgstr "Cron-Job reset." + +#, fuzzy +msgid "cron_action_reset_sure" +msgstr "Are you sure you want to reset the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_reset_sure_multi" +msgstr "Are you sure you want to reset the following cron-jobs?" + +#, fuzzy +msgid "cron_action_run" +msgstr "Execute" + +#, fuzzy +msgid "cron_action_run_fail" +msgstr "Cron-Job failed." + +#, fuzzy +msgid "cron_action_run_success" +msgstr "Cron-Job run successfully." + +#, fuzzy +msgid "cron_action_run_sure" +msgstr "Are you sure you want to run the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_changed_by_crontab" +msgstr "SYSTEM " + +#, fuzzy +msgid "cron_component" +msgstr "Component" + +#, fuzzy +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +#, fuzzy +msgid "cron_last_run" +msgstr "Last Run" + +#, fuzzy +msgid "cron_no_executable_job_selected" +msgstr "Please select at least one executable cron-job." + +#, fuzzy +msgid "cron_result" +msgstr "Result" + +#, fuzzy +msgid "cron_result_info" +msgstr "Result Info" + +#, fuzzy +msgid "cron_result_status_crashed" +msgstr "Crashed" + +#, fuzzy +msgid "cron_result_status_fail" +msgstr "Failed" + +#, fuzzy +msgid "cron_result_status_invalid_configuration" +msgstr "Invalid Configuration" + +#, fuzzy +msgid "cron_result_status_no_action" +msgstr "Ok, no processing" + +#, fuzzy +msgid "cron_result_status_ok" +msgstr "Ok" + +#, fuzzy +msgid "cron_result_status_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_running_since" +msgstr "Running since" + +#, fuzzy +msgid "cron_schedule" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_daily" +msgstr "Daily" + +#, fuzzy +msgid "cron_schedule_in_days" +msgstr "Every %s days" + +#, fuzzy +msgid "cron_schedule_in_hours" +msgstr "Every %s hours" + +#, fuzzy +msgid "cron_schedule_in_minutes" +msgstr "Every %s minutes" + +#, fuzzy +msgid "cron_schedule_monthly" +msgstr "Monthly" + +#, fuzzy +msgid "cron_schedule_quarterly" +msgstr "Quarterly" + +#, fuzzy +msgid "cron_schedule_type" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_value" +msgstr "Interval" + +#, fuzzy +msgid "cron_schedule_weekly" +msgstr "Weekly" + +#, fuzzy +msgid "cron_schedule_yearly" +msgstr "Yearly" + +#, fuzzy +msgid "cron_status" +msgstr "Status" + +#, fuzzy +msgid "cron_status_active" +msgstr "Active" + +#, fuzzy +msgid "cron_status_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/Cron/lang/cron_uk.po b/components/ILIAS/Cron/lang/cron_uk.po new file mode 100644 index 000000000000..238a4ab25e22 --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_uk.po @@ -0,0 +1,213 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: cron\n" + +#, fuzzy +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "PROBABLY CRASHED" + +#, fuzzy +msgid "cro_job_rc_job_manual_reset" +msgstr "RESET MANUALLY" + +#, fuzzy +msgid "cro_job_rc_job_no_result" +msgstr "Cron job did not return a proper result" + +#, fuzzy +msgid "cron_action_activate" +msgstr "Activate" + +#, fuzzy +msgid "cron_action_activate_success" +msgstr "Cron-Job activated." + +#, fuzzy +msgid "cron_action_activate_sure" +msgstr "Are you sure you want to activate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_activate_sure_multi" +msgstr "Are you sure you want to activate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deactivated." + +#, fuzzy +msgid "cron_action_deactivate_sure" +msgstr "Are you sure you want to deactivate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_deactivate_sure_multi" +msgstr "Are you sure you want to deactivate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_edit" +msgstr "Edit" + +#, fuzzy +msgid "cron_action_edit_success" +msgstr "Schedule updated." + +#, fuzzy +msgid "cron_action_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_action_reset_success" +msgstr "Cron-Job reset." + +#, fuzzy +msgid "cron_action_reset_sure" +msgstr "Are you sure you want to reset the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_reset_sure_multi" +msgstr "Are you sure you want to reset the following cron-jobs?" + +#, fuzzy +msgid "cron_action_run" +msgstr "Execute" + +#, fuzzy +msgid "cron_action_run_fail" +msgstr "Cron-Job failed." + +#, fuzzy +msgid "cron_action_run_success" +msgstr "Cron-Job run successfully." + +#, fuzzy +msgid "cron_action_run_sure" +msgstr "Are you sure you want to run the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_changed_by_crontab" +msgstr "SYSTEM " + +#, fuzzy +msgid "cron_component" +msgstr "Component" + +#, fuzzy +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +#, fuzzy +msgid "cron_last_run" +msgstr "Last Run" + +#, fuzzy +msgid "cron_no_executable_job_selected" +msgstr "Please select at least one executable cron-job." + +#, fuzzy +msgid "cron_result" +msgstr "Result" + +#, fuzzy +msgid "cron_result_info" +msgstr "Result Info" + +#, fuzzy +msgid "cron_result_status_crashed" +msgstr "Crashed" + +#, fuzzy +msgid "cron_result_status_fail" +msgstr "Failed" + +#, fuzzy +msgid "cron_result_status_invalid_configuration" +msgstr "Invalid Configuration" + +#, fuzzy +msgid "cron_result_status_no_action" +msgstr "Ok, no processing" + +#, fuzzy +msgid "cron_result_status_ok" +msgstr "Ok" + +#, fuzzy +msgid "cron_result_status_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_running_since" +msgstr "Running since" + +#, fuzzy +msgid "cron_schedule" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_daily" +msgstr "Daily" + +#, fuzzy +msgid "cron_schedule_in_days" +msgstr "Every %s days" + +#, fuzzy +msgid "cron_schedule_in_hours" +msgstr "Every %s hours" + +#, fuzzy +msgid "cron_schedule_in_minutes" +msgstr "Every %s minutes" + +#, fuzzy +msgid "cron_schedule_monthly" +msgstr "Monthly" + +#, fuzzy +msgid "cron_schedule_quarterly" +msgstr "Quarterly" + +#, fuzzy +msgid "cron_schedule_type" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_value" +msgstr "Interval" + +#, fuzzy +msgid "cron_schedule_weekly" +msgstr "Weekly" + +#, fuzzy +msgid "cron_schedule_yearly" +msgstr "Yearly" + +#, fuzzy +msgid "cron_status" +msgstr "Status" + +#, fuzzy +msgid "cron_status_active" +msgstr "Active" + +#, fuzzy +msgid "cron_status_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/Cron/lang/cron_vi.po b/components/ILIAS/Cron/lang/cron_vi.po new file mode 100644 index 000000000000..bec34a198355 --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_vi.po @@ -0,0 +1,213 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: cron\n" + +#, fuzzy +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "PROBABLY CRASHED" + +#, fuzzy +msgid "cro_job_rc_job_manual_reset" +msgstr "RESET MANUALLY" + +#, fuzzy +msgid "cro_job_rc_job_no_result" +msgstr "Cron job did not return a proper result" + +#, fuzzy +msgid "cron_action_activate" +msgstr "Activate" + +#, fuzzy +msgid "cron_action_activate_success" +msgstr "Cron-Job activated." + +#, fuzzy +msgid "cron_action_activate_sure" +msgstr "Are you sure you want to activate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_activate_sure_multi" +msgstr "Are you sure you want to activate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deactivated." + +#, fuzzy +msgid "cron_action_deactivate_sure" +msgstr "Are you sure you want to deactivate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_deactivate_sure_multi" +msgstr "Are you sure you want to deactivate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_edit" +msgstr "Edit" + +#, fuzzy +msgid "cron_action_edit_success" +msgstr "Schedule updated." + +#, fuzzy +msgid "cron_action_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_action_reset_success" +msgstr "Cron-Job reset." + +#, fuzzy +msgid "cron_action_reset_sure" +msgstr "Are you sure you want to reset the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_reset_sure_multi" +msgstr "Are you sure you want to reset the following cron-jobs?" + +#, fuzzy +msgid "cron_action_run" +msgstr "Execute" + +#, fuzzy +msgid "cron_action_run_fail" +msgstr "Cron-Job failed." + +#, fuzzy +msgid "cron_action_run_success" +msgstr "Cron-Job run successfully." + +#, fuzzy +msgid "cron_action_run_sure" +msgstr "Are you sure you want to run the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_changed_by_crontab" +msgstr "SYSTEM " + +#, fuzzy +msgid "cron_component" +msgstr "Component" + +#, fuzzy +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +#, fuzzy +msgid "cron_last_run" +msgstr "Last Run" + +#, fuzzy +msgid "cron_no_executable_job_selected" +msgstr "Please select at least one executable cron-job." + +#, fuzzy +msgid "cron_result" +msgstr "Result" + +#, fuzzy +msgid "cron_result_info" +msgstr "Result Info" + +#, fuzzy +msgid "cron_result_status_crashed" +msgstr "Crashed" + +#, fuzzy +msgid "cron_result_status_fail" +msgstr "Failed" + +#, fuzzy +msgid "cron_result_status_invalid_configuration" +msgstr "Invalid Configuration" + +#, fuzzy +msgid "cron_result_status_no_action" +msgstr "Ok, no processing" + +#, fuzzy +msgid "cron_result_status_ok" +msgstr "Ok" + +#, fuzzy +msgid "cron_result_status_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_running_since" +msgstr "Running since" + +#, fuzzy +msgid "cron_schedule" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_daily" +msgstr "Daily" + +#, fuzzy +msgid "cron_schedule_in_days" +msgstr "Every %s days" + +#, fuzzy +msgid "cron_schedule_in_hours" +msgstr "Every %s hours" + +#, fuzzy +msgid "cron_schedule_in_minutes" +msgstr "Every %s minutes" + +#, fuzzy +msgid "cron_schedule_monthly" +msgstr "Monthly" + +#, fuzzy +msgid "cron_schedule_quarterly" +msgstr "Quarterly" + +#, fuzzy +msgid "cron_schedule_type" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_value" +msgstr "Interval" + +#, fuzzy +msgid "cron_schedule_weekly" +msgstr "Weekly" + +#, fuzzy +msgid "cron_schedule_yearly" +msgstr "Yearly" + +#, fuzzy +msgid "cron_status" +msgstr "Status" + +#, fuzzy +msgid "cron_status_active" +msgstr "Active" + +#, fuzzy +msgid "cron_status_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/Cron/lang/cron_zh.po b/components/ILIAS/Cron/lang/cron_zh.po new file mode 100644 index 000000000000..7531419e4b8c --- /dev/null +++ b/components/ILIAS/Cron/lang/cron_zh.po @@ -0,0 +1,213 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: cron\n" + +#, fuzzy +msgid "cro_job_rc_job_auto_deactivation_time_limit" +msgstr "PROBABLY CRASHED" + +#, fuzzy +msgid "cro_job_rc_job_manual_reset" +msgstr "RESET MANUALLY" + +#, fuzzy +msgid "cro_job_rc_job_no_result" +msgstr "Cron job did not return a proper result" + +#, fuzzy +msgid "cron_action_activate" +msgstr "Activate" + +#, fuzzy +msgid "cron_action_activate_success" +msgstr "Cron-Job activated." + +#, fuzzy +msgid "cron_action_activate_sure" +msgstr "Are you sure you want to activate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_activate_sure_multi" +msgstr "Are you sure you want to activate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_deactivate" +msgstr "Deactivate" + +#, fuzzy +msgid "cron_action_deactivate_success" +msgstr "Cron-Job deactivated." + +#, fuzzy +msgid "cron_action_deactivate_sure" +msgstr "Are you sure you want to deactivate the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_deactivate_sure_multi" +msgstr "Are you sure you want to deactivate the following cron-jobs?" + +#, fuzzy +msgid "cron_action_edit" +msgstr "Edit" + +#, fuzzy +msgid "cron_action_edit_success" +msgstr "Schedule updated." + +#, fuzzy +msgid "cron_action_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_action_reset_success" +msgstr "Cron-Job reset." + +#, fuzzy +msgid "cron_action_reset_sure" +msgstr "Are you sure you want to reset the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_action_reset_sure_multi" +msgstr "Are you sure you want to reset the following cron-jobs?" + +#, fuzzy +msgid "cron_action_run" +msgstr "Execute" + +#, fuzzy +msgid "cron_action_run_fail" +msgstr "Cron-Job failed." + +#, fuzzy +msgid "cron_action_run_success" +msgstr "Cron-Job run successfully." + +#, fuzzy +msgid "cron_action_run_sure" +msgstr "Are you sure you want to run the cron-job \"%s\"?" + +#, fuzzy +msgid "cron_changed_by_crontab" +msgstr "SYSTEM " + +#, fuzzy +msgid "cron_component" +msgstr "Component" + +#, fuzzy +msgid "cron_job_id" +msgstr "Id" + +#, fuzzy +msgid "cron_jobs_with_required_intervention" +msgstr "The following jobs may require an intervention." + +#, fuzzy +msgid "cron_last_run" +msgstr "Last Run" + +#, fuzzy +msgid "cron_no_executable_job_selected" +msgstr "Please select at least one executable cron-job." + +#, fuzzy +msgid "cron_result" +msgstr "Result" + +#, fuzzy +msgid "cron_result_info" +msgstr "Result Info" + +#, fuzzy +msgid "cron_result_status_crashed" +msgstr "Crashed" + +#, fuzzy +msgid "cron_result_status_fail" +msgstr "Failed" + +#, fuzzy +msgid "cron_result_status_invalid_configuration" +msgstr "Invalid Configuration" + +#, fuzzy +msgid "cron_result_status_no_action" +msgstr "Ok, no processing" + +#, fuzzy +msgid "cron_result_status_ok" +msgstr "Ok" + +#, fuzzy +msgid "cron_result_status_reset" +msgstr "Reset" + +#, fuzzy +msgid "cron_running_since" +msgstr "Running since" + +#, fuzzy +msgid "cron_schedule" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_daily" +msgstr "Daily" + +#, fuzzy +msgid "cron_schedule_in_days" +msgstr "Every %s days" + +#, fuzzy +msgid "cron_schedule_in_hours" +msgstr "Every %s hours" + +#, fuzzy +msgid "cron_schedule_in_minutes" +msgstr "Every %s minutes" + +#, fuzzy +msgid "cron_schedule_monthly" +msgstr "Monthly" + +#, fuzzy +msgid "cron_schedule_quarterly" +msgstr "Quarterly" + +#, fuzzy +msgid "cron_schedule_type" +msgstr "Schedule" + +#, fuzzy +msgid "cron_schedule_value" +msgstr "Interval" + +#, fuzzy +msgid "cron_schedule_weekly" +msgstr "Weekly" + +#, fuzzy +msgid "cron_schedule_yearly" +msgstr "Yearly" + +#, fuzzy +msgid "cron_status" +msgstr "Status" + +#, fuzzy +msgid "cron_status_active" +msgstr "Active" + +#, fuzzy +msgid "cron_status_inactive" +msgstr "Inactive" + +#, fuzzy +msgid "cron_status_info" +msgstr "Status Info" diff --git a/components/ILIAS/DataProtection/DataProtection.php b/components/ILIAS/DataProtection/DataProtection.php index 59228837ba4c..d6eb13988da2 100644 --- a/components/ILIAS/DataProtection/DataProtection.php +++ b/components/ILIAS/DataProtection/DataProtection.php @@ -20,6 +20,9 @@ namespace ILIAS; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; + class DataProtection implements Component\Component { public function init( @@ -36,5 +39,9 @@ public function init( new \ILIAS\DataProtection\Setup\Agent( $pull[\ILIAS\Refinery\Factory::class] ); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'dpro' + ); } } diff --git a/components/ILIAS/DataProtection/lang/dpro.pot b/components/ILIAS/DataProtection/lang/dpro.pot new file mode 100644 index 000000000000..b759dbb798cd --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro.pot @@ -0,0 +1,57 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: dpro\n" + +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "" + +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "" + +msgid "dpro_account_reg_not_possible" +msgstr "" + +msgid "dpro_agree_date" +msgstr "" + +msgid "dpro_last_reset_date" +msgstr "" + +msgid "dpro_mode" +msgstr "" + +msgid "dpro_mode_desc" +msgstr "" + +msgid "dpro_no_acceptance" +msgstr "" + +msgid "dpro_no_documents_exist" +msgstr "" + +msgid "dpro_no_documents_exist_cant_save" +msgstr "" + +msgid "dpro_once" +msgstr "" + +msgid "dpro_reset_for_all_users" +msgstr "" + +msgid "dpro_status_enable" +msgstr "" + +msgid "dpro_status_enable_desc" +msgstr "" + +msgid "dpro_sure_reset_tos" +msgstr "" + +msgid "dpro_withdrawal_usr_deletion" +msgstr "" + +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "" diff --git a/components/ILIAS/DataProtection/lang/dpro_ar.po b/components/ILIAS/DataProtection/lang/dpro_ar.po new file mode 100644 index 000000000000..566b92ea272a --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_ar.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_bg.po b/components/ILIAS/DataProtection/lang/dpro_bg.po new file mode 100644 index 000000000000..0e603bf2a213 --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_bg.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_cs.po b/components/ILIAS/DataProtection/lang/dpro_cs.po new file mode 100644 index 000000000000..72bb13b3d4a0 --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_cs.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_da.po b/components/ILIAS/DataProtection/lang/dpro_da.po new file mode 100644 index 000000000000..3c7f1c201398 --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_da.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_de.po b/components/ILIAS/DataProtection/lang/dpro_de.po new file mode 100644 index 000000000000..17ca8a113671 --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_de.po @@ -0,0 +1,60 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: dpro\n" + +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Datenschutzerklärung" + +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Bevor Sie zu ILIAS wechseln, akzeptieren Sie die folgende Datenschutzerklärung." + +msgid "dpro_account_reg_not_possible" +msgstr "Eine Selbstregistrierung ist aktuell nicht möglich, da in dieser Installation keine Datenschutzerklärung angeboten wird. Bitte kontaktieren Sie die technische Betreuung für weitere Informationen." + +msgid "dpro_agree_date" +msgstr "Datenschutzerklärung zugestimmt am" + +msgid "dpro_last_reset_date" +msgstr "Die Datenschutzerklärung wurde zuletzt am %s zurückgesetzt. Setzen Sie die Datenschutzerklärung nur zurück, wenn sich die Dokumente in der Zwischenzeit geändert haben und eine Zustimmung zu dieser geänderten Vereinbarung gewünscht ist." + +msgid "dpro_mode" +msgstr "Zustimmungsmodus" + +msgid "dpro_mode_desc" +msgstr "Stellen Sie hier ein wann und wie die Datenschutzerklärung akzeptiert werden muss." + +msgid "dpro_no_acceptance" +msgstr "Bereitstellung der Dokumente ohne Zustimmung" + +msgid "dpro_no_documents_exist" +msgstr "Aktuell liegen keine Dokumente der Datenschutzerklärung vor." + +msgid "dpro_no_documents_exist_cant_save" +msgstr "Aktuell liegen keine Dokumente der Datenschutzerklärung vor. Bitte erstellen Sie mindestens ein Dokument um den Service zu aktivieren." + +msgid "dpro_once" +msgstr "Einmaliges Akzeptieren des Dokumentes" + +msgid "dpro_reset_for_all_users" +msgstr "Datenschutzerklärung zurücksetzen" + +msgid "dpro_status_enable" +msgstr "Datenschutzerklärung aktivieren" + +msgid "dpro_status_enable_desc" +msgstr "Benutzer werden zum Unterzeichnen der Datenschutzerklärung aufgefordert, bevor sie ILIAS nutzen können." + +msgid "dpro_sure_reset_tos" +msgstr "Sind Sie sicher, dass die Datenschutzerklärung für alle Benutzer im System zurückgesetzt werden sollen? Dies betrifft auch jene Anmeldekonten, die z.B. für die SOAP Web-Services genutzt werden." + +msgid "dpro_withdrawal_usr_deletion" +msgstr "Löschung des ILIAS-Kontos beim Widerruf der Datenschutzerklärung" + +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "Wird die Zustimmung zur Datenschutzerklärung widerrufen, erfolgt automatisch die Löschung des ILIAS-Kontos." diff --git a/components/ILIAS/DataProtection/lang/dpro_el.po b/components/ILIAS/DataProtection/lang/dpro_el.po new file mode 100644 index 000000000000..8a53890a6c3c --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_el.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_en.po b/components/ILIAS/DataProtection/lang/dpro_en.po new file mode 100644 index 000000000000..32789214576e --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_en.po @@ -0,0 +1,60 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: dpro\n" + +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +msgid "dpro_mode" +msgstr "Agreement Mode" + +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +msgid "dpro_once" +msgstr "Accept once" + +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_es.po b/components/ILIAS/DataProtection/lang/dpro_es.po new file mode 100644 index 000000000000..ba728f8de485 --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_es.po @@ -0,0 +1,60 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: dpro\n" + +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaración de Protección de Datos" + +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Antes de proceder a ILIAS debe aceptar la siguiente Declaración de Protección de Datos." + +msgid "dpro_account_reg_not_possible" +msgstr "El registro autónomo no es posible actualmente porque no hay ninguna Declaración de Protección de Datos disponible. Por favor, contacte con su administrador del sistema para más información." + +msgid "dpro_agree_date" +msgstr "Declaración de Protección de Datos aceptada el" + +msgid "dpro_last_reset_date" +msgstr "La Declaración de Protección de Datos se reinició el %s. Solo reinicie la Declaración si se han realizado cambios en los documentos y requiere que todos los usuarios acepten los documentos de nuevo." + +msgid "dpro_mode" +msgstr "Modo de Aceptación" + +msgid "dpro_mode_desc" +msgstr "Por favor, configure cuándo y cómo debe aceptarse la Declaración de Protección de Datos." + +msgid "dpro_no_acceptance" +msgstr "Nunca, solo informativa" + +msgid "dpro_no_documents_exist" +msgstr "Actualmente no hay documentos de Declaración de Protección de Datos disponibles." + +msgid "dpro_no_documents_exist_cant_save" +msgstr "Actualmente no hay documentos de Declaración de Protección de Datos disponibles. Por favor, añada al menos un documento para activar este servicio." + +msgid "dpro_once" +msgstr "Aceptar una vez" + +msgid "dpro_reset_for_all_users" +msgstr "Reiniciar la Declaración de Protección de Datos" + +msgid "dpro_status_enable" +msgstr "Activar la Declaración de Protección de Datos" + +msgid "dpro_status_enable_desc" +msgstr "Muestra los documentos de la Declaración de Protección de Datos correspondientes al idioma al final del formulario de registro para nuevos usuarios y, si procede, tras el primer inicio de sesión del usuario. Los usuarios deben aceptar la Declaración de Protección de Datos antes de poder entrar en ILIAS." + +msgid "dpro_sure_reset_tos" +msgstr "¿Está seguro de que desea restablecer la Declaración de Protección de Datos para todos los usuarios del sistema? Esto también se aplica, por ejemplo, a aquellas cuentas que se utilizan para los servicios web SOAP." + +msgid "dpro_withdrawal_usr_deletion" +msgstr "Eliminación de la cuenta tras la revocación de la Declaración de Protección de Datos" + +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "Si un usuario revoca su aceptación de un documento de Declaración de Protección de Datos previamente aceptado, esto resultará en la eliminación de la cuenta del usuario." diff --git a/components/ILIAS/DataProtection/lang/dpro_et.po b/components/ILIAS/DataProtection/lang/dpro_et.po new file mode 100644 index 000000000000..e568efb2d5f9 --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_et.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_fa.po b/components/ILIAS/DataProtection/lang/dpro_fa.po new file mode 100644 index 000000000000..48526d14661c --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_fa.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_fr.po b/components/ILIAS/DataProtection/lang/dpro_fr.po new file mode 100644 index 000000000000..038d9b88c62c --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_fr.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Data Protection were reset on %s. Only reset the Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_hr.po b/components/ILIAS/DataProtection/lang/dpro_hr.po new file mode 100644 index 000000000000..64c2a0de5e95 --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_hr.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_hu.po b/components/ILIAS/DataProtection/lang/dpro_hu.po new file mode 100644 index 000000000000..a92efca4ef38 --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_hu.po @@ -0,0 +1,60 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: dpro\n" + +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Adatvédelmi Nyilatkozat" + +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Mielőtt továbblép az ILIAS-hoz, elfogadja az alábbi Adatvédelmi Nyilatkozatot." + +msgid "dpro_account_reg_not_possible" +msgstr "A regisztráció jelenleg nem lehetséges, mert nincs Adatvédelmi Nyilatkozat. Kérem, további információért keresse a rendszer üzemeltetőjét." + +msgid "dpro_agree_date" +msgstr "Adatvédelmi Nyilatkozat elfogadása" + +msgid "dpro_last_reset_date" +msgstr "Az Adatvédelmi Nyilatkozatot elfogadásait törölték (%s). Csak akkor tegye ezt meg újra, ha módosult az Adatvédelmi Nyilatkozat tartalma és ezért azt újra el kell fogadtatni a felhasználókkal." + +msgid "dpro_mode" +msgstr "Elfogadás módja" + +msgid "dpro_mode_desc" +msgstr "Kérem, adja meg, hogy az Adatvédelmi Nyilatkozatot mikor és hogyan fogadják el." + +msgid "dpro_no_acceptance" +msgstr "Soha, csak informatív" + +msgid "dpro_no_documents_exist" +msgstr "Jelenleg nincs beállítva Adatvdelmi Nyilatkozat." + +msgid "dpro_no_documents_exist_cant_save" +msgstr "A szolgáltatás jelenleg nem kapcsolható be, mert nincs beállítva Adatvdelmi Nyilatkozat. Leaglább egyet adjon hozzá" + +msgid "dpro_once" +msgstr "Egyszer" + +msgid "dpro_reset_for_all_users" +msgstr "Adatvédelem Nyilatkozat elfogadásainak törlése" + +msgid "dpro_status_enable" +msgstr "Adatvédelem bekapcsolása" + +msgid "dpro_status_enable_desc" +msgstr "A nyelvfüggő Adatvédelmi Nyilatkozat megjelenítése az új felhasználó regisztrációs űrlapján, illetve az első bejelentkezéskor. Az Adatvédelmi Nyilatkozatot el kell fogadni a bejelentkezéskor." + +msgid "dpro_sure_reset_tos" +msgstr "Biztos, hogy törli az összes felhasználó Adatvédelmi Nyilatkozat elfogadását? Figyeljen arra, hogy ez hatással lesz például a SOAP webszolgáltatást használó fiókra is." + +msgid "dpro_withdrawal_usr_deletion" +msgstr "Fiók törlése az Adatvédelmi Nyilatkozat visszavonásakor" + +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "Amikor egy felhasználó visszavonja az Adatvédelmi Nyilatkozat elfogadását, az az ILIAS-fiókjának törlését vonja maga után." diff --git a/components/ILIAS/DataProtection/lang/dpro_it.po b/components/ILIAS/DataProtection/lang/dpro_it.po new file mode 100644 index 000000000000..c3aa4336674c --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_it.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_ja.po b/components/ILIAS/DataProtection/lang/dpro_ja.po new file mode 100644 index 000000000000..7ecb5f8a05aa --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_ja.po @@ -0,0 +1,60 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: dpro\n" + +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "データ保護規約" + +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "ILIAS利用の前に次のデータ保護規約を承諾するものとします。" + +msgid "dpro_account_reg_not_possible" +msgstr "データ保護承諾の宣言書がないため現在自己登録はできません。 詳細はシステム管理者 へ尋ねてください。" + +msgid "dpro_agree_date" +msgstr "データ保護承諾宣言書" + +msgid "dpro_last_reset_date" +msgstr "データ保護規約は %s にリセットされます。ドキュメントへ変更が行われると、データ保護規約のみがリセットされて全ユーザへドキュメントへの承諾を要求します。" + +msgid "dpro_mode" +msgstr "承諾モード" + +msgid "dpro_mode_desc" +msgstr "いつ、どのようにしてデータ保護規約を承諾すべきか構成してください。" + +msgid "dpro_no_acceptance" +msgstr "なし、参考情報限定" + +msgid "dpro_no_documents_exist" +msgstr "データ保護規約ドキュメントが現在見当たりません。" + +msgid "dpro_no_documents_exist_cant_save" +msgstr "データ保護規約ドキュメントが現在見当たりません。 このサービスを有効化するにはドキュメントを一つは追加してください。" + +msgid "dpro_once" +msgstr "一度承諾" + +msgid "dpro_reset_for_all_users" +msgstr "データ保護規約をリセットする。" + +msgid "dpro_status_enable" +msgstr "データ保護規約を有効化" + +msgid "dpro_status_enable_desc" +msgstr "可能であれば、ユーザの初回ログインの際に新規ユーザ用の登録フォームの最後に個別言語単位でデータ保護規約ドキュメントを表示します。 ILIASへ入る前にデータ保護規約への承諾が必須です。" + +msgid "dpro_sure_reset_tos" +msgstr "システムの全ユーザ用のデータ保護規約を本当にリセットしますか?例として、SOAPwebサービスお使ってるアカウントに対しても適用されます。" + +msgid "dpro_withdrawal_usr_deletion" +msgstr "データ保護規約破棄に対するアカウント削除" + +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "以前承諾したデータ保護規約ドキュメントの承諾をユーザが破棄するとユーザのアカウント削除につながることになります。" diff --git a/components/ILIAS/DataProtection/lang/dpro_ka.po b/components/ILIAS/DataProtection/lang/dpro_ka.po new file mode 100644 index 000000000000..6c0736d2af2a --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_ka.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_lt.po b/components/ILIAS/DataProtection/lang/dpro_lt.po new file mode 100644 index 000000000000..b7610ed519e2 --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_lt.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_nl.po b/components/ILIAS/DataProtection/lang/dpro_nl.po new file mode 100644 index 000000000000..7222eac7d4bc --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_nl.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_pl.po b/components/ILIAS/DataProtection/lang/dpro_pl.po new file mode 100644 index 000000000000..01cef50e912e --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_pl.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_pt.po b/components/ILIAS/DataProtection/lang/dpro_pt.po new file mode 100644 index 000000000000..3bd83226cc7a --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_pt.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_ro.po b/components/ILIAS/DataProtection/lang/dpro_ro.po new file mode 100644 index 000000000000..26f2a7aa7de5 --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_ro.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_ru.po b/components/ILIAS/DataProtection/lang/dpro_ru.po new file mode 100644 index 000000000000..b20fc75bebeb --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_ru.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_sk.po b/components/ILIAS/DataProtection/lang/dpro_sk.po new file mode 100644 index 000000000000..bf4ff151e3ca --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_sk.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_sl.po b/components/ILIAS/DataProtection/lang/dpro_sl.po new file mode 100644 index 000000000000..f4bd1679a75c --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_sl.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_sq.po b/components/ILIAS/DataProtection/lang/dpro_sq.po new file mode 100644 index 000000000000..38d60b2e94cd --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_sq.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_sr.po b/components/ILIAS/DataProtection/lang/dpro_sr.po new file mode 100644 index 000000000000..7a8b5370daec --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_sr.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_sv.po b/components/ILIAS/DataProtection/lang/dpro_sv.po new file mode 100644 index 000000000000..8e309d8b617b --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_sv.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Data Protection were reset on %s. Only reset the Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_tr.po b/components/ILIAS/DataProtection/lang/dpro_tr.po new file mode 100644 index 000000000000..24b185f6de54 --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_tr.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_uk.po b/components/ILIAS/DataProtection/lang/dpro_uk.po new file mode 100644 index 000000000000..5ce5a781eb5f --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_uk.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_vi.po b/components/ILIAS/DataProtection/lang/dpro_vi.po new file mode 100644 index 000000000000..21f9fee65e7b --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_vi.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DataProtection/lang/dpro_zh.po b/components/ILIAS/DataProtection/lang/dpro_zh.po new file mode 100644 index 000000000000..fbc0f089853b --- /dev/null +++ b/components/ILIAS/DataProtection/lang/dpro_zh.po @@ -0,0 +1,77 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: dpro\n" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous" +msgstr "Declaration of Data Protection" + +#, fuzzy +msgid "dpro_accept_usr_agreement_anonymous_intro" +msgstr "Before you proceed to ILIAS you accept the following Declaration of Data Protection." + +#, fuzzy +msgid "dpro_account_reg_not_possible" +msgstr "Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your system administrator for further information." + +#, fuzzy +msgid "dpro_agree_date" +msgstr "Declaration of Data Protection agreed on" + +#, fuzzy +msgid "dpro_last_reset_date" +msgstr "The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents." + +#, fuzzy +msgid "dpro_mode" +msgstr "Agreement Mode" + +#, fuzzy +msgid "dpro_mode_desc" +msgstr "Please configure when and how the Declaration of Data Protection should be accepted." + +#, fuzzy +msgid "dpro_no_acceptance" +msgstr "Never, only informative" + +#, fuzzy +msgid "dpro_no_documents_exist" +msgstr "There are currently no Declaration of Data Protection documents available." + +#, fuzzy +msgid "dpro_no_documents_exist_cant_save" +msgstr "There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service." + +#, fuzzy +msgid "dpro_once" +msgstr "Accept once" + +#, fuzzy +msgid "dpro_reset_for_all_users" +msgstr "Reset the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable" +msgstr "Enable the Declaration of Data Protection" + +#, fuzzy +msgid "dpro_status_enable_desc" +msgstr "Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS." + +#, fuzzy +msgid "dpro_sure_reset_tos" +msgstr "Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services." + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion" +msgstr "Account deletion upon Declaration of Data Protection withdrawal" + +#, fuzzy +msgid "dpro_withdrawal_usr_deletion_desc" +msgstr "If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account." diff --git a/components/ILIAS/DidacticTemplate/DidacticTemplate.php b/components/ILIAS/DidacticTemplate/DidacticTemplate.php index c737c851516f..2941a1ffc57e 100644 --- a/components/ILIAS/DidacticTemplate/DidacticTemplate.php +++ b/components/ILIAS/DidacticTemplate/DidacticTemplate.php @@ -20,6 +20,9 @@ namespace ILIAS; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; + class DidacticTemplate implements Component\Component { public function init( @@ -36,5 +39,9 @@ public function init( new \ilDidacticTemplateSetupAgent( $pull[\ILIAS\Refinery\Factory::class] ); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'didactic' + ); } } diff --git a/components/ILIAS/DidacticTemplate/lang/didactic.pot b/components/ILIAS/DidacticTemplate/lang/didactic.pot new file mode 100644 index 000000000000..b878cfa4870f --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic.pot @@ -0,0 +1,150 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: didactic\n" + +msgid "activate_exclusive_template" +msgstr "" + +msgid "activate_exclusive_template_info" +msgstr "" + +msgid "activate_local_didactic_template" +msgstr "" + +msgid "activate_local_didactic_template_info" +msgstr "" + +msgid "didactic_activated_msg" +msgstr "" + +msgid "didactic_adm_tab" +msgstr "" + +msgid "didactic_applicable_for" +msgstr "" + +msgid "didactic_auto_generated" +msgstr "" + +msgid "didactic_available_templates" +msgstr "" + +msgid "didactic_back_to_overview" +msgstr "" + +msgid "didactic_cannot_delete_auto_generated" +msgstr "" + +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "" + +msgid "didactic_confirm_apply_new_template" +msgstr "" + +msgid "didactic_confirm_delete_msg" +msgstr "" + +msgid "didactic_copy_suc_message" +msgstr "" + +msgid "didactic_deactivated_msg" +msgstr "" + +msgid "didactic_default_type" +msgstr "" + +msgid "didactic_default_type_info" +msgstr "" + +msgid "didactic_delete_msg" +msgstr "" + +msgid "didactic_do_export" +msgstr "" + +msgid "didactic_edit_tpl" +msgstr "" + +msgid "didactic_filter_with_icon" +msgstr "" + +msgid "didactic_filter_without_icon" +msgstr "" + +msgid "didactic_global" +msgstr "" + +msgid "didactic_icon" +msgstr "" + +msgid "didactic_icon_error" +msgstr "" + +msgid "didactic_icon_info" +msgstr "" + +msgid "didactic_import_btn" +msgstr "" + +msgid "didactic_import_failed" +msgstr "" + +msgid "didactic_import_success" +msgstr "" + +msgid "didactic_import_table_title" +msgstr "" + +msgid "didactic_install_info" +msgstr "" + +msgid "didactic_local" +msgstr "" + +msgid "didactic_not_changed" +msgstr "" + +msgid "didactic_scope" +msgstr "" + +msgid "didactic_scope_list_header" +msgstr "" + +msgid "didactic_selected_tpl_option" +msgstr "" + +msgid "didactic_template_applied" +msgstr "" + +msgid "didactic_template_update_import" +msgstr "" + +msgid "didactic_template_update_import_info" +msgstr "" + +msgid "didactic_translation_add_languages" +msgstr "" + +msgid "dtpl_obj_type_info" +msgstr "" + +msgid "effective_form" +msgstr "" + +msgid "grp_closed" +msgstr "" + +msgid "grp_closed_info" +msgstr "" + +msgid "more_translations" +msgstr "" + +msgid "sess_closed" +msgstr "" + +msgid "sess_closed_info" +msgstr "" diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_ar.po b/components/ILIAS/DidacticTemplate/lang/didactic_ar.po new file mode 100644 index 000000000000..c29f65494fdb --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_ar.po @@ -0,0 +1,178 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: didactic\n" + +#, fuzzy +msgid "activate_exclusive_template" +msgstr "Grey Out Default" + +#, fuzzy +msgid "activate_exclusive_template_info" +msgstr "The standard template won't be available wherever this template is active." + +#, fuzzy +msgid "activate_local_didactic_template" +msgstr "Scope of Application" + +#, fuzzy +msgid "activate_local_didactic_template_info" +msgstr "Usage of this didactical template will be limited to these sub-areas." + +msgid "didactic_activated_msg" +msgstr "Activated didactic templates" + +msgid "didactic_adm_tab" +msgstr "Didactic" + +msgid "didactic_applicable_for" +msgstr "Applicalble for" + +#, fuzzy +msgid "didactic_auto_generated" +msgstr "Automatic Generated" + +msgid "didactic_available_templates" +msgstr "Available Didactic Templates" + +msgid "didactic_back_to_overview" +msgstr "Back to Overview" + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated" +msgstr "It is not allowed to delete automatic generated didactic templates." + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "At least one of the selected didactic templates is automatic generated and cannot be deleted." + +msgid "didactic_confirm_apply_new_template" +msgstr "Do you really want to apply the chosen didactic template? All current permission settings will get lost!" + +msgid "didactic_confirm_delete_msg" +msgstr "Do you really want to delete the following didactic templates?" + +msgid "didactic_copy_suc_message" +msgstr "Copied didactic template" + +msgid "didactic_deactivated_msg" +msgstr "Deactivated didactic templates" + +#, fuzzy +msgid "didactic_default_type" +msgstr "Default" + +msgid "didactic_default_type_info" +msgstr "Uses default permissions for %s" + +msgid "didactic_delete_msg" +msgstr "Deleted didactical templates." + +msgid "didactic_do_export" +msgstr "Export" + +msgid "didactic_edit_tpl" +msgstr "Edit Didactic Template" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +msgid "didactic_import_btn" +msgstr "Import Didactic Template" + +msgid "didactic_import_failed" +msgstr "Importing the didactical template failed with message:" + +msgid "didactic_import_success" +msgstr "Successfully imported didactical template" + +msgid "didactic_import_table_title" +msgstr "Import of a didactic template" + +msgid "didactic_install_info" +msgstr "معلومات عامة" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +msgid "didactic_not_changed" +msgstr "The didactic template setting is unchanged." + +#, fuzzy +msgid "didactic_scope" +msgstr "Scope" + +#, fuzzy +msgid "didactic_scope_list_header" +msgstr "Limited to:" + +msgid "didactic_selected_tpl_option" +msgstr "Applied didactic template:" + +msgid "didactic_template_applied" +msgstr "Applied didactic template." + +#, fuzzy +msgid "didactic_template_update_import" +msgstr "Update Didactic Template" + +#, fuzzy +msgid "didactic_template_update_import_info" +msgstr "Properties will be changed according to this import. Objects which already applied this template will not be changed." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +#, fuzzy +msgid "dtpl_obj_type_info" +msgstr "This didactic template can be applied on this object type." + +#, fuzzy +msgid "effective_form" +msgstr "Template Effective From" + +msgid "grp_closed" +msgstr "Closed Group" + +msgid "grp_closed_info" +msgstr "Group is not visible for non-members." + +#, fuzzy +msgid "more_translations" +msgstr "More Translations" + +#, fuzzy +msgid "sess_closed" +msgstr "Closed Session" + +#, fuzzy +msgid "sess_closed_info" +msgstr "Session is not visible for non-participants." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_bg.po b/components/ILIAS/DidacticTemplate/lang/didactic_bg.po new file mode 100644 index 000000000000..c783af128398 --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_bg.po @@ -0,0 +1,201 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: didactic\n" + +#, fuzzy +msgid "activate_exclusive_template" +msgstr "Grey Out Default" + +#, fuzzy +msgid "activate_exclusive_template_info" +msgstr "The standard template won't be available wherever this template is active." + +#, fuzzy +msgid "activate_local_didactic_template" +msgstr "Scope of Application" + +#, fuzzy +msgid "activate_local_didactic_template_info" +msgstr "Usage of this didactical template will be limited to these sub-areas." + +#, fuzzy +msgid "didactic_activated_msg" +msgstr "Activated didactic templates" + +#, fuzzy +msgid "didactic_adm_tab" +msgstr "Didactic" + +#, fuzzy +msgid "didactic_applicable_for" +msgstr "Applicalble for" + +#, fuzzy +msgid "didactic_auto_generated" +msgstr "Automatic Generated" + +#, fuzzy +msgid "didactic_available_templates" +msgstr "Available Didactic Templates" + +#, fuzzy +msgid "didactic_back_to_overview" +msgstr "Back to Overview" + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated" +msgstr "It is not allowed to delete automatic generated didactic templates." + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "At least one of the selected didactic templates is automatic generated and cannot be deleted." + +#, fuzzy +msgid "didactic_confirm_apply_new_template" +msgstr "Do you really want to apply the chosen didactic template? All current permission settings will get lost!" + +#, fuzzy +msgid "didactic_confirm_delete_msg" +msgstr "Do you really want to delete the following didactic templates?" + +#, fuzzy +msgid "didactic_copy_suc_message" +msgstr "Copied didactic template" + +#, fuzzy +msgid "didactic_deactivated_msg" +msgstr "Deactivated didactic templates" + +#, fuzzy +msgid "didactic_default_type" +msgstr "Default" + +#, fuzzy +msgid "didactic_default_type_info" +msgstr "Uses default permissions for %s" + +#, fuzzy +msgid "didactic_delete_msg" +msgstr "Deleted didactical templates." + +#, fuzzy +msgid "didactic_do_export" +msgstr "Export" + +#, fuzzy +msgid "didactic_edit_tpl" +msgstr "Edit Didactic Template" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +#, fuzzy +msgid "didactic_import_btn" +msgstr "Import Didactic Template" + +#, fuzzy +msgid "didactic_import_failed" +msgstr "Importing the didactical template failed with message: " + +#, fuzzy +msgid "didactic_import_success" +msgstr "Successfully imported didactical template" + +#, fuzzy +msgid "didactic_import_table_title" +msgstr "Import of a didactic template" + +#, fuzzy +msgid "didactic_install_info" +msgstr "General Information" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +#, fuzzy +msgid "didactic_not_changed" +msgstr "The didactic template setting is unchanged." + +#, fuzzy +msgid "didactic_scope" +msgstr "Scope" + +#, fuzzy +msgid "didactic_scope_list_header" +msgstr "Limited to:" + +#, fuzzy +msgid "didactic_selected_tpl_option" +msgstr "Applied didactic template:" + +#, fuzzy +msgid "didactic_template_applied" +msgstr "Applied didactic template." + +#, fuzzy +msgid "didactic_template_update_import" +msgstr "Update Didactic Template" + +#, fuzzy +msgid "didactic_template_update_import_info" +msgstr "Properties will be changed according to this import. Objects which already applied this template will not be changed." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +#, fuzzy +msgid "dtpl_obj_type_info" +msgstr "This didactic template can be applied on this object type." + +#, fuzzy +msgid "effective_form" +msgstr "Template Effective From" + +#, fuzzy +msgid "grp_closed" +msgstr "Closed Group" + +#, fuzzy +msgid "grp_closed_info" +msgstr "Group is not visible for non-members." + +#, fuzzy +msgid "more_translations" +msgstr "More Translations" + +#, fuzzy +msgid "sess_closed" +msgstr "Closed Session" + +#, fuzzy +msgid "sess_closed_info" +msgstr "Session is not visible for non-participants." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_cs.po b/components/ILIAS/DidacticTemplate/lang/didactic_cs.po new file mode 100644 index 000000000000..4918c510fce3 --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_cs.po @@ -0,0 +1,161 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: didactic\n" + +msgid "activate_exclusive_template" +msgstr "Výchozí šedá" + +msgid "activate_exclusive_template_info" +msgstr "Standardní šablona nebude k dispozici, pokud je tato šablona aktivní." + +msgid "activate_local_didactic_template" +msgstr "Rozsah použití" + +msgid "activate_local_didactic_template_info" +msgstr "Využití této didaktické šablony bude omezeno na tyto podoblasti." + +msgid "didactic_activated_msg" +msgstr "Didaktické šablony aktivovány" + +msgid "didactic_adm_tab" +msgstr "Didaktické šablony" + +msgid "didactic_applicable_for" +msgstr "Použitelné pro" + +msgid "didactic_auto_generated" +msgstr "Automaticky generováno" + +msgid "didactic_available_templates" +msgstr "Dostupné didaktické šablony" + +msgid "didactic_back_to_overview" +msgstr "Zpět na přehled" + +msgid "didactic_cannot_delete_auto_generated" +msgstr "Není dovoleno mazat automaticky generované didaktické šablony." + +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "Alespoň jedna z vybraných didaktických šablon je generována automaticky a nemůže být vymazána." + +msgid "didactic_confirm_apply_new_template" +msgstr "Skutečně chcete použít vybrané didaktické šablony? Všechna aktuální nastavení oprávnění budou ztracena!" + +msgid "didactic_confirm_delete_msg" +msgstr "Skutečně chcete smazat následující didaktické šablony?" + +msgid "didactic_copy_suc_message" +msgstr "Didaktická šablona zkopírována" + +msgid "didactic_deactivated_msg" +msgstr "Deaktivované didaktické šablony" + +msgid "didactic_default_type" +msgstr "Výchozí" + +msgid "didactic_default_type_info" +msgstr "Používá výchozí oprávnění pro %s" + +msgid "didactic_delete_msg" +msgstr "Didaktické šablony smazány." + +msgid "didactic_do_export" +msgstr "Exportovat" + +msgid "didactic_edit_tpl" +msgstr "Upravit didaktickou šablonu" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +msgid "didactic_import_btn" +msgstr "Importovat didaktickou šablonu" + +msgid "didactic_import_failed" +msgstr "Import didaktické šablony selhal s hlášením:" + +msgid "didactic_import_success" +msgstr "Didaktická šablona importována úspěšně." + +msgid "didactic_import_table_title" +msgstr "Importovat didaktickou šablonu" + +msgid "didactic_install_info" +msgstr "Obecné informace" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +msgid "didactic_not_changed" +msgstr "Nastavení didaktické šablony nezměněno." + +msgid "didactic_scope" +msgstr "Rozsah" + +msgid "didactic_scope_list_header" +msgstr "Omezeno na:" + +msgid "didactic_selected_tpl_option" +msgstr "Aplikovaná didaktická šablona:" + +msgid "didactic_template_applied" +msgstr "Didaktická šablona aplikována." + +msgid "didactic_template_update_import" +msgstr "Aktualizovat didaktickou šablonu" + +msgid "didactic_template_update_import_info" +msgstr "Vlastnosti budou změněny podle tohoto importu. Nebudou změněny objekty, které již použily tuto šablonu." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +msgid "dtpl_obj_type_info" +msgstr "Tuto didaktickou šablonu lze použít na tento typ objektu." + +msgid "effective_form" +msgstr "Šablona účinná od" + +msgid "grp_closed" +msgstr "Skupina uzavřena" + +msgid "grp_closed_info" +msgstr "Skupina není pro nečleny viditelná." + +msgid "more_translations" +msgstr "Více překladů" + +msgid "sess_closed" +msgstr "Uzavřená relace" + +msgid "sess_closed_info" +msgstr "Relace není viditelná pro nezúčastněné." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_da.po b/components/ILIAS/DidacticTemplate/lang/didactic_da.po new file mode 100644 index 000000000000..5911138ffc05 --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_da.po @@ -0,0 +1,196 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: didactic\n" + +#, fuzzy +msgid "activate_exclusive_template" +msgstr "Grey Out Default" + +#, fuzzy +msgid "activate_exclusive_template_info" +msgstr "The standard template won't be available wherever this template is active." + +#, fuzzy +msgid "activate_local_didactic_template" +msgstr "Scope of Application" + +#, fuzzy +msgid "activate_local_didactic_template_info" +msgstr "Usage of this didactical template will be limited to these sub-areas." + +#, fuzzy +msgid "didactic_activated_msg" +msgstr "Activated didactic templates" + +msgid "didactic_adm_tab" +msgstr "Didaktik" + +#, fuzzy +msgid "didactic_applicable_for" +msgstr "Applicalble for" + +#, fuzzy +msgid "didactic_auto_generated" +msgstr "Automatic Generated" + +msgid "didactic_available_templates" +msgstr "Oprettede didaktiske skabeloner" + +#, fuzzy +msgid "didactic_back_to_overview" +msgstr "Back to Overview" + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated" +msgstr "It is not allowed to delete automatic generated didactic templates." + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "At least one of the selected didactic templates is automatic generated and cannot be deleted." + +#, fuzzy +msgid "didactic_confirm_apply_new_template" +msgstr "Do you really want to apply the chosen didactic template? All current permission settings will get lost!" + +#, fuzzy +msgid "didactic_confirm_delete_msg" +msgstr "Do you really want to delete the following didactic templates?" + +#, fuzzy +msgid "didactic_copy_suc_message" +msgstr "Copied didactic template" + +#, fuzzy +msgid "didactic_deactivated_msg" +msgstr "Deactivated didactic templates" + +#, fuzzy +msgid "didactic_default_type" +msgstr "Default" + +#, fuzzy +msgid "didactic_default_type_info" +msgstr "Uses default permissions for %s" + +#, fuzzy +msgid "didactic_delete_msg" +msgstr "Deleted didactical templates." + +#, fuzzy +msgid "didactic_do_export" +msgstr "Export" + +#, fuzzy +msgid "didactic_edit_tpl" +msgstr "Edit Didactic Template" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +msgid "didactic_import_btn" +msgstr "Importer didaktisk skabelon" + +#, fuzzy +msgid "didactic_import_failed" +msgstr "Importing the didactical template failed with message: " + +#, fuzzy +msgid "didactic_import_success" +msgstr "Successfully imported didactical template" + +#, fuzzy +msgid "didactic_import_table_title" +msgstr "Import of a didactic template" + +#, fuzzy +msgid "didactic_install_info" +msgstr "General Information" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +#, fuzzy +msgid "didactic_not_changed" +msgstr "The didactic template setting is unchanged." + +#, fuzzy +msgid "didactic_scope" +msgstr "Scope" + +#, fuzzy +msgid "didactic_scope_list_header" +msgstr "Limited to:" + +#, fuzzy +msgid "didactic_selected_tpl_option" +msgstr "Applied didactic template:" + +#, fuzzy +msgid "didactic_template_applied" +msgstr "Applied didactic template." + +#, fuzzy +msgid "didactic_template_update_import" +msgstr "Update Didactic Template" + +#, fuzzy +msgid "didactic_template_update_import_info" +msgstr "Properties will be changed according to this import. Objects which already applied this template will not be changed." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +#, fuzzy +msgid "dtpl_obj_type_info" +msgstr "This didactic template can be applied on this object type." + +#, fuzzy +msgid "effective_form" +msgstr "Template Effective From" + +msgid "grp_closed" +msgstr "Lukket gruppe" + +msgid "grp_closed_info" +msgstr "Gruppen er ikke synlig for ikke-medlemmer" + +#, fuzzy +msgid "more_translations" +msgstr "More Translations" + +#, fuzzy +msgid "sess_closed" +msgstr "Closed Session" + +#, fuzzy +msgid "sess_closed_info" +msgstr "Session is not visible for non-participants." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_de.po b/components/ILIAS/DidacticTemplate/lang/didactic_de.po new file mode 100644 index 000000000000..05749f930f90 --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_de.po @@ -0,0 +1,153 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: didactic\n" + +msgid "activate_exclusive_template" +msgstr "Standard ausgrauen" + +msgid "activate_exclusive_template_info" +msgstr "Die Standard-Vorlage wird überall dort ausgegraut, wo diese didaktische Vorlage aktiv ist." + +msgid "activate_local_didactic_template" +msgstr "Gültigkeitsbereich" + +msgid "activate_local_didactic_template_info" +msgstr "Die Nutzung der didaktischen Vorlagen wird auf Teilbereiche des Magazins beschränkt." + +msgid "didactic_activated_msg" +msgstr "Die ausgewählten didaktischen Vorlagen wurden aktiviert." + +msgid "didactic_adm_tab" +msgstr "Didaktische Vorlagen" + +msgid "didactic_applicable_for" +msgstr "Anwendbar auf" + +msgid "didactic_auto_generated" +msgstr "Automatisch generiert" + +msgid "didactic_available_templates" +msgstr "Verfügbare didaktische Vorlagen" + +msgid "didactic_back_to_overview" +msgstr "Zurück zur Übersicht" + +msgid "didactic_cannot_delete_auto_generated" +msgstr "Das Löschen von automatisch generierten Didaktischen Vorlagen ist nicht erlaubt." + +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "Mindestens eine der gewählten Didaktischen Vorlagen ist automatisch generiert und kann daher nicht gelöscht werden." + +msgid "didactic_confirm_apply_new_template" +msgstr "Sind Sie sicher, dass Sie diese didaktische Vorlage anwenden möchten? Alle Rechteanpassungen werden überschrieben und an die neue didaktische Vorlage angepasst." + +msgid "didactic_confirm_delete_msg" +msgstr "Sind Sie sicher, dass die folgenden didaktischen Vorlagen gelöscht werden sollen?" + +msgid "didactic_copy_suc_message" +msgstr "Die didaktische Vorlage wurde kopiert" + +msgid "didactic_deactivated_msg" +msgstr "Die ausgewählten didaktischen Vorlagen wurden deaktiviert." + +msgid "didactic_default_type" +msgstr "Standard" + +msgid "didactic_default_type_info" +msgstr "Es werden die Rechtevorgaben für die jeweiligen Rollen angewendet." + +msgid "didactic_delete_msg" +msgstr "Die ausgewählten didaktischen Vorlagen wurden gelöscht." + +msgid "didactic_do_export" +msgstr "Exportieren" + +msgid "didactic_edit_tpl" +msgstr "Didaktische Vorlage bearbeiten" + +msgid "didactic_filter_with_icon" +msgstr "mit Symbol" + +msgid "didactic_filter_without_icon" +msgstr "ohne Symbol" + +msgid "didactic_global" +msgstr "Global" + +msgid "didactic_icon" +msgstr "Icon" + +msgid "didactic_icon_error" +msgstr "Icons können nur für Container-Objekte genutzt werden." + +msgid "didactic_icon_info" +msgstr "Das Icon wird für alle Objekte angezeigt, die diese Vorlagen anwenden. \"Angepasste Icons\" der Objekte überschreiben das Icon der Vorlage. Icons können nur für Container-Objekte (wie zum Beispiel Kurs und Kategorien) konfiguriert werden." + +msgid "didactic_import_btn" +msgstr "Didaktische Vorlage importieren" + +msgid "didactic_import_failed" +msgstr "Die didaktische Vorlage konnte nicht importiert werden:" + +msgid "didactic_import_success" +msgstr "Die didaktische Vorlage wurde erfolgreich importiert" + +msgid "didactic_import_table_title" +msgstr "Import einer didaktischen Vorlage" + +msgid "didactic_install_info" +msgstr "Allgemeine Informationen" + +msgid "didactic_local" +msgstr "Lokal" + +msgid "didactic_not_changed" +msgstr "Die aktive didaktische Vorlage wurde nicht geändert." + +msgid "didactic_scope" +msgstr "Gültigkeitsbereich" + +msgid "didactic_scope_list_header" +msgstr "Beschränkt auf:" + +msgid "didactic_selected_tpl_option" +msgstr "Angewandte didaktische Vorlage:" + +msgid "didactic_template_applied" +msgstr "Die didaktische Vorlage wurde angewandt." + +msgid "didactic_template_update_import" +msgstr "Aktualisierung Didaktischer Vorlagen" + +msgid "didactic_template_update_import_info" +msgstr "Alle Eigenschaften werden gemäß der Importdatei angepasst. Objekte, die die Einstellungen dieser Vorlage bereits nutzen, werden nicht verändert." + +msgid "didactic_translation_add_languages" +msgstr "Sprachen hinzufügen" + +msgid "dtpl_obj_type_info" +msgstr "Gibt an, auf welchen Objekttyp diese Didaktische Vorlage angewandt werden kann." + +msgid "effective_form" +msgstr "Vorlage wirksam ab" + +msgid "grp_closed" +msgstr "Geschlossene Gruppe" + +msgid "grp_closed_info" +msgstr "Die Gruppe ist für Nicht-Mitglieder unsichtbar." + +msgid "more_translations" +msgstr "Weitere Übersetzungen" + +msgid "sess_closed" +msgstr "Geschlossene Sitzung" + +msgid "sess_closed_info" +msgstr "Die Sitzung ist für Nicht-Teilnehmer unsichtbar." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_el.po b/components/ILIAS/DidacticTemplate/lang/didactic_el.po new file mode 100644 index 000000000000..25e9c44961db --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_el.po @@ -0,0 +1,199 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: didactic\n" + +#, fuzzy +msgid "activate_exclusive_template" +msgstr "Grey Out Default" + +#, fuzzy +msgid "activate_exclusive_template_info" +msgstr "The standard template won't be available wherever this template is active." + +#, fuzzy +msgid "activate_local_didactic_template" +msgstr "Scope of Application" + +#, fuzzy +msgid "activate_local_didactic_template_info" +msgstr "Usage of this didactical template will be limited to these sub-areas." + +#, fuzzy +msgid "didactic_activated_msg" +msgstr "Activated didactic templates" + +#, fuzzy +msgid "didactic_adm_tab" +msgstr "Didactic" + +#, fuzzy +msgid "didactic_applicable_for" +msgstr "Applicalble for" + +#, fuzzy +msgid "didactic_auto_generated" +msgstr "Automatic Generated" + +#, fuzzy +msgid "didactic_available_templates" +msgstr "Available Didactic Templates" + +#, fuzzy +msgid "didactic_back_to_overview" +msgstr "Back to Overview" + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated" +msgstr "It is not allowed to delete automatic generated didactic templates." + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "At least one of the selected didactic templates is automatic generated and cannot be deleted." + +#, fuzzy +msgid "didactic_confirm_apply_new_template" +msgstr "Do you really want to apply the chosen didactic template? All current permission settings will get lost!" + +#, fuzzy +msgid "didactic_confirm_delete_msg" +msgstr "Do you really want to delete the following didactic templates?" + +#, fuzzy +msgid "didactic_copy_suc_message" +msgstr "Copied didactic template" + +#, fuzzy +msgid "didactic_deactivated_msg" +msgstr "Deactivated didactic templates" + +#, fuzzy +msgid "didactic_default_type" +msgstr "Default" + +#, fuzzy +msgid "didactic_default_type_info" +msgstr "Uses default permissions for %s" + +#, fuzzy +msgid "didactic_delete_msg" +msgstr "Deleted didactical templates." + +#, fuzzy +msgid "didactic_do_export" +msgstr "Export" + +#, fuzzy +msgid "didactic_edit_tpl" +msgstr "Edit Didactic Template" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +#, fuzzy +msgid "didactic_import_btn" +msgstr "Import Didactic Template" + +#, fuzzy +msgid "didactic_import_failed" +msgstr "Importing the didactical template failed with message: " + +#, fuzzy +msgid "didactic_import_success" +msgstr "Successfully imported didactical template" + +#, fuzzy +msgid "didactic_import_table_title" +msgstr "Import of a didactic template" + +#, fuzzy +msgid "didactic_install_info" +msgstr "General Information" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +#, fuzzy +msgid "didactic_not_changed" +msgstr "The didactic template setting is unchanged." + +#, fuzzy +msgid "didactic_scope" +msgstr "Scope" + +#, fuzzy +msgid "didactic_scope_list_header" +msgstr "Limited to:" + +#, fuzzy +msgid "didactic_selected_tpl_option" +msgstr "Applied didactic template:" + +#, fuzzy +msgid "didactic_template_applied" +msgstr "Applied didactic template." + +#, fuzzy +msgid "didactic_template_update_import" +msgstr "Update Didactic Template" + +#, fuzzy +msgid "didactic_template_update_import_info" +msgstr "Properties will be changed according to this import. Objects which already applied this template will not be changed." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +#, fuzzy +msgid "dtpl_obj_type_info" +msgstr "This didactic template can be applied on this object type." + +#, fuzzy +msgid "effective_form" +msgstr "Template Effective From" + +msgid "grp_closed" +msgstr "Closed Group" + +msgid "grp_closed_info" +msgstr "Group is not visible for non-members." + +#, fuzzy +msgid "more_translations" +msgstr "More Translations" + +#, fuzzy +msgid "sess_closed" +msgstr "Closed Session" + +#, fuzzy +msgid "sess_closed_info" +msgstr "Session is not visible for non-participants." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_en.po b/components/ILIAS/DidacticTemplate/lang/didactic_en.po new file mode 100644 index 000000000000..534c470f3481 --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_en.po @@ -0,0 +1,153 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: didactic\n" + +msgid "activate_exclusive_template" +msgstr "Grey Out Default" + +msgid "activate_exclusive_template_info" +msgstr "The standard template won't be available wherever this template is active." + +msgid "activate_local_didactic_template" +msgstr "Scope of Application" + +msgid "activate_local_didactic_template_info" +msgstr "Usage of this didactical template will be limited to these sub-areas." + +msgid "didactic_activated_msg" +msgstr "Activated didactic templates" + +msgid "didactic_adm_tab" +msgstr "Didactic Templates" + +msgid "didactic_applicable_for" +msgstr "Applicable for" + +msgid "didactic_auto_generated" +msgstr "Automatically Generated" + +msgid "didactic_available_templates" +msgstr "Available Didactic Templates" + +msgid "didactic_back_to_overview" +msgstr "Back to Overview" + +msgid "didactic_cannot_delete_auto_generated" +msgstr "It is not allowed to delete automatic generated didactic templates." + +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "At least one of the selected didactic templates is automatic generated and cannot be deleted." + +msgid "didactic_confirm_apply_new_template" +msgstr "Do you really want to apply the chosen didactic template? All current permission settings will get lost!" + +msgid "didactic_confirm_delete_msg" +msgstr "Do you really want to delete the following didactic templates?" + +msgid "didactic_copy_suc_message" +msgstr "Copied didactic template" + +msgid "didactic_deactivated_msg" +msgstr "Deactivated didactic templates" + +msgid "didactic_default_type" +msgstr "Default" + +msgid "didactic_default_type_info" +msgstr "Default set of permissions will be applied." + +msgid "didactic_delete_msg" +msgstr "Deleted didactic templates." + +msgid "didactic_do_export" +msgstr "Export" + +msgid "didactic_edit_tpl" +msgstr "Edit Didactic Template" + +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +msgid "didactic_global" +msgstr "Global" + +msgid "didactic_icon" +msgstr "Icon" + +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +msgid "didactic_import_btn" +msgstr "Import Didactic Template" + +msgid "didactic_import_failed" +msgstr "Importing the didactic template failed with message:" + +msgid "didactic_import_success" +msgstr "Successfully imported didactic template" + +msgid "didactic_import_table_title" +msgstr "Import of a didactic template" + +msgid "didactic_install_info" +msgstr "General Information" + +msgid "didactic_local" +msgstr "Local" + +msgid "didactic_not_changed" +msgstr "The didactic template setting is unchanged." + +msgid "didactic_scope" +msgstr "Scope" + +msgid "didactic_scope_list_header" +msgstr "Limited to:" + +msgid "didactic_selected_tpl_option" +msgstr "Applied didactic template:" + +msgid "didactic_template_applied" +msgstr "Applied didactic template." + +msgid "didactic_template_update_import" +msgstr "Update Didactic Template" + +msgid "didactic_template_update_import_info" +msgstr "Properties will be changed according to this import. Objects which already applied this template will not be changed." + +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +msgid "dtpl_obj_type_info" +msgstr "This didactic template can be applied on this object type." + +msgid "effective_form" +msgstr "Template Effective From" + +msgid "grp_closed" +msgstr "Closed Group" + +msgid "grp_closed_info" +msgstr "Group is not visible for non-members." + +msgid "more_translations" +msgstr "More Translations" + +msgid "sess_closed" +msgstr "Closed Session" + +msgid "sess_closed_info" +msgstr "Session is not visible for non-participants." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_es.po b/components/ILIAS/DidacticTemplate/lang/didactic_es.po new file mode 100644 index 000000000000..76124f276554 --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_es.po @@ -0,0 +1,153 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: didactic\n" + +msgid "activate_exclusive_template" +msgstr "Grisar predeterminado" + +msgid "activate_exclusive_template_info" +msgstr "La plantilla estándar no estará disponible en los lugares donde esta plantilla esté activa." + +msgid "activate_local_didactic_template" +msgstr "Ámbito de aplicación" + +msgid "activate_local_didactic_template_info" +msgstr "El uso de esta plantilla didáctica se limitará a estas subáreas." + +msgid "didactic_activated_msg" +msgstr "Plantillas didácticas activadas" + +msgid "didactic_adm_tab" +msgstr "Plantillas didácticas" + +msgid "didactic_applicable_for" +msgstr "Aplicable para" + +msgid "didactic_auto_generated" +msgstr "Generado automáticamente" + +msgid "didactic_available_templates" +msgstr "Plantillas didácticas disponibles" + +msgid "didactic_back_to_overview" +msgstr "Volver a la vista general" + +msgid "didactic_cannot_delete_auto_generated" +msgstr "No está permitido eliminar plantillas didácticas generadas automáticamente." + +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "Al menos una de las plantillas didácticas seleccionadas se ha generado automáticamente y no se puede eliminar." + +msgid "didactic_confirm_apply_new_template" +msgstr "¿Realmente desea aplicar la plantilla didáctica elegida? ¡Se perderán todos los ajustes de permisos actuales!" + +msgid "didactic_confirm_delete_msg" +msgstr "¿Realmente desea eliminar las siguientes plantillas didácticas?" + +msgid "didactic_copy_suc_message" +msgstr "Plantilla didáctica copiada" + +msgid "didactic_deactivated_msg" +msgstr "Plantillas didácticas desactivadas" + +msgid "didactic_default_type" +msgstr "Predeterminado" + +msgid "didactic_default_type_info" +msgstr "Se aplicará el conjunto de permisos predeterminado." + +msgid "didactic_delete_msg" +msgstr "Plantillas didácticas eliminadas." + +msgid "didactic_do_export" +msgstr "Exportar" + +msgid "didactic_edit_tpl" +msgstr "Editar plantilla didáctica" + +msgid "didactic_filter_with_icon" +msgstr "con icono" + +msgid "didactic_filter_without_icon" +msgstr "sin icono" + +msgid "didactic_global" +msgstr "Global" + +msgid "didactic_icon" +msgstr "Icono" + +msgid "didactic_icon_error" +msgstr "Los iconos no se pueden asignar a objetos que no sean contenedores." + +msgid "didactic_icon_info" +msgstr "El icono se muestra para todos los objetos que utilizan esta plantilla de objeto. Los \"iconos personalizados\" de los objetos sobrescriben los iconos de la plantilla didáctica. Los iconos solo se pueden utilizar para plantillas didácticas asignadas a objetos contenedor." + +msgid "didactic_import_btn" +msgstr "Importar plantilla didáctica" + +msgid "didactic_import_failed" +msgstr "La importación de la plantilla didáctica falló con el mensaje:" + +msgid "didactic_import_success" +msgstr "Plantilla didáctica importada con éxito" + +msgid "didactic_import_table_title" +msgstr "Importación de una plantilla didáctica" + +msgid "didactic_install_info" +msgstr "Información General" + +msgid "didactic_local" +msgstr "Local" + +msgid "didactic_not_changed" +msgstr "La configuración de la plantilla didáctica no se ha modificado." + +msgid "didactic_scope" +msgstr "Ámbito" + +msgid "didactic_scope_list_header" +msgstr "Limitado a:" + +msgid "didactic_selected_tpl_option" +msgstr "Plantilla didáctica aplicada:" + +msgid "didactic_template_applied" +msgstr "Plantilla didáctica aplicada." + +msgid "didactic_template_update_import" +msgstr "Actualizar Plantilla Didáctica" + +msgid "didactic_template_update_import_info" +msgstr "Las propiedades se cambiarán de acuerdo con esta importación. Los objetos que ya tengan aplicada esta plantilla no se verán afectados." + +msgid "didactic_translation_add_languages" +msgstr "Añadir idiomas" + +msgid "dtpl_obj_type_info" +msgstr "Esta plantilla didáctica puede aplicarse a este tipo de objeto." + +msgid "effective_form" +msgstr "Plantilla efectiva desde" + +msgid "grp_closed" +msgstr "Grupo Cerrado" + +msgid "grp_closed_info" +msgstr "El grupo no es visible para los no miembros." + +msgid "more_translations" +msgstr "Más traducciones" + +msgid "sess_closed" +msgstr "Sesión Cerrada" + +msgid "sess_closed_info" +msgstr "La sesión no es visible para los no participantes." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_et.po b/components/ILIAS/DidacticTemplate/lang/didactic_et.po new file mode 100644 index 000000000000..4d61a56bee7f --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_et.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: didactic\n" + +#, fuzzy +msgid "activate_exclusive_template" +msgstr "Grey Out Default" + +#, fuzzy +msgid "activate_exclusive_template_info" +msgstr "The standard template won't be available wherever this template is active." + +#, fuzzy +msgid "activate_local_didactic_template" +msgstr "Scope of Application" + +#, fuzzy +msgid "activate_local_didactic_template_info" +msgstr "Usage of this didactical template will be limited to these sub-areas." + +msgid "didactic_activated_msg" +msgstr "Didaktilised mallid aktiveeritud" + +msgid "didactic_adm_tab" +msgstr "Didaktilised mallid" + +msgid "didactic_applicable_for" +msgstr "Rakendatav" + +#, fuzzy +msgid "didactic_auto_generated" +msgstr "Automatic Generated" + +msgid "didactic_available_templates" +msgstr "Aktiveeritud didaktlilised mallid" + +msgid "didactic_back_to_overview" +msgstr "Tagasi ülevaatesse" + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated" +msgstr "It is not allowed to delete automatic generated didactic templates." + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "At least one of the selected didactic templates is automatic generated and cannot be deleted." + +msgid "didactic_confirm_apply_new_template" +msgstr "Soovite lisada valitud didaktilise malli? Sellega kaovad kõik senised õiguste seaded!" + +msgid "didactic_confirm_delete_msg" +msgstr "Soovite kustutada järgnevad didaktilised mallid?" + +msgid "didactic_copy_suc_message" +msgstr "Didaktiline mall kopeeritud" + +msgid "didactic_deactivated_msg" +msgstr "Didaktilised mallid deaktiveeritud" + +msgid "didactic_default_type" +msgstr "Default" + +msgid "didactic_default_type_info" +msgstr "Kasutajate vaikimisi õigused %s jaoks" + +msgid "didactic_delete_msg" +msgstr "Didaktilised mallid kustutatud." + +msgid "didactic_do_export" +msgstr "Eksport" + +msgid "didactic_edit_tpl" +msgstr "Muuda didakltilist malli" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +msgid "didactic_import_btn" +msgstr "Impordi didaktiline mall" + +msgid "didactic_import_failed" +msgstr "Didaktilise malli import ebaõnnestus, sest:" + +msgid "didactic_import_success" +msgstr "Didaktiline mall on edukalt imporditud" + +msgid "didactic_import_table_title" +msgstr "Impordi didaktiline mall" + +msgid "didactic_install_info" +msgstr "Üldine info" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +msgid "didactic_not_changed" +msgstr "The didactic template setting is unchanged." + +#, fuzzy +msgid "didactic_scope" +msgstr "Scope" + +#, fuzzy +msgid "didactic_scope_list_header" +msgstr "Limited to:" + +msgid "didactic_selected_tpl_option" +msgstr "Didaktiline mall rakendatud:" + +msgid "didactic_template_applied" +msgstr "Didaktiline mall rakendatud." + +#, fuzzy +msgid "didactic_template_update_import" +msgstr "Update Didactic Template" + +#, fuzzy +msgid "didactic_template_update_import_info" +msgstr "Properties will be changed according to this import. Objects which already applied this template will not be changed." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +#, fuzzy +msgid "dtpl_obj_type_info" +msgstr "This didactic template can be applied on this object type." + +#, fuzzy +msgid "effective_form" +msgstr "Template Effective From" + +msgid "grp_closed" +msgstr "Suletud grupp" + +msgid "grp_closed_info" +msgstr "Grupp on nähtav ainult liikmetele." + +#, fuzzy +msgid "more_translations" +msgstr "More Translations" + +#, fuzzy +msgid "sess_closed" +msgstr "Closed Session" + +#, fuzzy +msgid "sess_closed_info" +msgstr "Session is not visible for non-participants." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_fa.po b/components/ILIAS/DidacticTemplate/lang/didactic_fa.po new file mode 100644 index 000000000000..35e5c5be26ba --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_fa.po @@ -0,0 +1,178 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: didactic\n" + +#, fuzzy +msgid "activate_exclusive_template" +msgstr "Grey Out Default" + +#, fuzzy +msgid "activate_exclusive_template_info" +msgstr "The standard template won't be available wherever this template is active." + +#, fuzzy +msgid "activate_local_didactic_template" +msgstr "Scope of Application" + +#, fuzzy +msgid "activate_local_didactic_template_info" +msgstr "Usage of this didactical template will be limited to these sub-areas." + +msgid "didactic_activated_msg" +msgstr "Activated didactic templates" + +msgid "didactic_adm_tab" +msgstr "Didactic" + +msgid "didactic_applicable_for" +msgstr "Applicalble for" + +#, fuzzy +msgid "didactic_auto_generated" +msgstr "Automatic Generated" + +msgid "didactic_available_templates" +msgstr "Available Didactic Templates" + +msgid "didactic_back_to_overview" +msgstr "Back to Overview" + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated" +msgstr "It is not allowed to delete automatic generated didactic templates." + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "At least one of the selected didactic templates is automatic generated and cannot be deleted." + +msgid "didactic_confirm_apply_new_template" +msgstr "Do you really want to apply the chosen didactic template? All current permission settings will get lost!" + +msgid "didactic_confirm_delete_msg" +msgstr "Do you really want to delete the following didactic templates?" + +msgid "didactic_copy_suc_message" +msgstr "Copied didactic template" + +msgid "didactic_deactivated_msg" +msgstr "Deactivated didactic templates" + +#, fuzzy +msgid "didactic_default_type" +msgstr "Default" + +msgid "didactic_default_type_info" +msgstr "مجوزهای پیش فرض را برای %s بکار می برد" + +msgid "didactic_delete_msg" +msgstr "Deleted didactical templates." + +msgid "didactic_do_export" +msgstr "صدور" + +msgid "didactic_edit_tpl" +msgstr "Edit Didactic Template" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +msgid "didactic_import_btn" +msgstr "Import Didactic Template" + +msgid "didactic_import_failed" +msgstr "Importing the didactical template failed with message:" + +msgid "didactic_import_success" +msgstr "Successfully imported didactical template" + +msgid "didactic_import_table_title" +msgstr "Import of a didactic template" + +msgid "didactic_install_info" +msgstr "اطلاعات همگانی" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +msgid "didactic_not_changed" +msgstr "The didactic template setting is unchanged." + +#, fuzzy +msgid "didactic_scope" +msgstr "Scope" + +#, fuzzy +msgid "didactic_scope_list_header" +msgstr "Limited to:" + +msgid "didactic_selected_tpl_option" +msgstr "Applied didactic template:" + +msgid "didactic_template_applied" +msgstr "Applied didactic template." + +#, fuzzy +msgid "didactic_template_update_import" +msgstr "Update Didactic Template" + +#, fuzzy +msgid "didactic_template_update_import_info" +msgstr "Properties will be changed according to this import. Objects which already applied this template will not be changed." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +#, fuzzy +msgid "dtpl_obj_type_info" +msgstr "This didactic template can be applied on this object type." + +#, fuzzy +msgid "effective_form" +msgstr "Template Effective From" + +msgid "grp_closed" +msgstr "گروه بسته" + +msgid "grp_closed_info" +msgstr "گروه فقط برای اعضا قابل مشاهده است." + +#, fuzzy +msgid "more_translations" +msgstr "More Translations" + +#, fuzzy +msgid "sess_closed" +msgstr "Closed Session" + +#, fuzzy +msgid "sess_closed_info" +msgstr "Session is not visible for non-participants." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_fr.po b/components/ILIAS/DidacticTemplate/lang/didactic_fr.po new file mode 100644 index 000000000000..6f5e7843bad4 --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_fr.po @@ -0,0 +1,154 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: didactic\n" + +msgid "activate_exclusive_template" +msgstr "Griser par défaut" + +msgid "activate_exclusive_template_info" +msgstr "Le modèle standard ne sera pas disponible là où le modèle est actif." + +msgid "activate_local_didactic_template" +msgstr "Champ d’application" + +msgid "activate_local_didactic_template_info" +msgstr "L’usage de ce modèle didactique sera limité à ces sous-zones." + +msgid "didactic_activated_msg" +msgstr "Modèles d'objet avancés" + +msgid "didactic_adm_tab" +msgstr "Modèles d'Objet" + +msgid "didactic_applicable_for" +msgstr "Applicable pour" + +msgid "didactic_auto_generated" +msgstr "Généré automatiquement" + +msgid "didactic_available_templates" +msgstr "Modèles d'Objet Disponibles" + +msgid "didactic_back_to_overview" +msgstr "Retour à l'Aperçu" + +msgid "didactic_cannot_delete_auto_generated" +msgstr "Il n’est pas permis de supprimer les modèles didactiques générés automatiquement." + +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "Un moins un des modèles didactiques sélectionnés est généré automatiquement et ne peut pas être supprimé." + +msgid "didactic_confirm_apply_new_template" +msgstr "Souhaitez-vous réellement appliquer le modèle d'objet choisi ? Tous les réglages de permissions seront perdus !" + +msgid "didactic_confirm_delete_msg" +msgstr "Souhaitez-vous réellement supprimer les modèles d'objet suivants ?" + +msgid "didactic_copy_suc_message" +msgstr "Modèle d'objet copié" + +msgid "didactic_deactivated_msg" +msgstr "Modèles d'objet désactivés" + +msgid "didactic_default_type" +msgstr "Par défaut" + +msgid "didactic_default_type_info" +msgstr "Utiliser les paramètres par défaut" + +msgid "didactic_delete_msg" +msgstr "Modèles d'objet supprimés" + +msgid "didactic_do_export" +msgstr "Exporter" + +msgid "didactic_edit_tpl" +msgstr "Editer Modèle d'Objet" + +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +msgid "didactic_global" +msgstr "Global" + +msgid "didactic_icon" +msgstr "Icon" + +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +msgid "didactic_import_btn" +msgstr "Importer Modèle d'Objet" + +msgid "didactic_import_failed" +msgstr "Echec lors de l'import du modèle d'objet :" + +msgid "didactic_import_success" +msgstr "Modèles d'objet importés avec succès" + +msgid "didactic_import_table_title" +msgstr "Import d'un modèle d'objet" + +msgid "didactic_install_info" +msgstr "Information Générale" + +msgid "didactic_local" +msgstr "Local" + +msgid "didactic_not_changed" +msgstr "Le réglage du modèles d'objet est inchangé." + +msgid "didactic_scope" +msgstr "Étendue" + +msgid "didactic_scope_list_header" +msgstr "Limité à:" + +msgid "didactic_selected_tpl_option" +msgstr "Modèle d'objet appliqué :" + +msgid "didactic_template_applied" +msgstr "Modèle d'objet appliqué." + +msgid "didactic_template_update_import" +msgstr "Mettre le modèle didactique à jour" + +msgid "didactic_template_update_import_info" +msgstr "Les propriétés seront modifiées en fonction de cette importation. Les objets qui ont déjà appliqué ce modèle ne seront pas changés." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +msgid "dtpl_obj_type_info" +msgstr "Ce modèle didactique peut être appliqué sur ce type d’objet." + +msgid "effective_form" +msgstr "Modèle effectif du" + +msgid "grp_closed" +msgstr "Groupe Privé" + +msgid "grp_closed_info" +msgstr "Le groupe n'est pas visible par les non-membres." + +msgid "more_translations" +msgstr "Plus de traductions" + +msgid "sess_closed" +msgstr "Session fermée" + +msgid "sess_closed_info" +msgstr "La session n’est pas visible pour ceux qui ne participent pas." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_hr.po b/components/ILIAS/DidacticTemplate/lang/didactic_hr.po new file mode 100644 index 000000000000..5f41de3de4b7 --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_hr.po @@ -0,0 +1,161 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: didactic\n" + +msgid "activate_exclusive_template" +msgstr "Zasivi zadano" + +msgid "activate_exclusive_template_info" +msgstr "Standardni predložak neće biti dostupan svugdje gdje je ovaj predložak aktivan." + +msgid "activate_local_didactic_template" +msgstr "Opseg primjene" + +msgid "activate_local_didactic_template_info" +msgstr "Upotreba ovog didaktičkog predloška bit će ograničena na ova podpodručja." + +msgid "didactic_activated_msg" +msgstr "Aktivirani didaktički predlošci" + +msgid "didactic_adm_tab" +msgstr "Didaktički predlošci" + +msgid "didactic_applicable_for" +msgstr "Primjenjivo za" + +msgid "didactic_auto_generated" +msgstr "Automatski generirano" + +msgid "didactic_available_templates" +msgstr "Dostupni didaktički predlošci" + +msgid "didactic_back_to_overview" +msgstr "Povratak na Pregled" + +msgid "didactic_cannot_delete_auto_generated" +msgstr "Nije dopušteno brisati automatski generirane didaktičke predloške." + +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "Barem jedan od odabranih didaktičkih predložaka generira se automatski i ne može se izbrisati." + +msgid "didactic_confirm_apply_new_template" +msgstr "Želite li zaista primijeniti odabrani didaktički predložak? Izgubit će se sve trenutne postavke dozvola!" + +msgid "didactic_confirm_delete_msg" +msgstr "Želite li zaista izbrisati sljedeće didaktičke predloške?" + +msgid "didactic_copy_suc_message" +msgstr "Kopirani didaktički predložak" + +msgid "didactic_deactivated_msg" +msgstr "Deaktivirani didaktički predlošci" + +msgid "didactic_default_type" +msgstr "Zadano" + +msgid "didactic_default_type_info" +msgstr "Primijenit će se zadani skup dozvola." + +msgid "didactic_delete_msg" +msgstr "Izbrisani didaktički predlošci." + +msgid "didactic_do_export" +msgstr "Izvoz" + +msgid "didactic_edit_tpl" +msgstr "Uredi didaktički predložak" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +msgid "didactic_import_btn" +msgstr "Uvezi didaktički predložak" + +msgid "didactic_import_failed" +msgstr "Uvoz didaktičkog predloška nije uspio s porukom:" + +msgid "didactic_import_success" +msgstr "Uspješno uvežen didaktički predložak" + +msgid "didactic_import_table_title" +msgstr "Uvoz didaktičkog predloška" + +msgid "didactic_install_info" +msgstr "Opće informacije" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +msgid "didactic_not_changed" +msgstr "Postavka didaktičkog predloška je nepromijenjena." + +msgid "didactic_scope" +msgstr "Opseg" + +msgid "didactic_scope_list_header" +msgstr "Ograničeno na:" + +msgid "didactic_selected_tpl_option" +msgstr "Primijenjeni didaktički predložak:" + +msgid "didactic_template_applied" +msgstr "Primijenjeni didaktički predložak." + +msgid "didactic_template_update_import" +msgstr "Ažuriraj didaktički predložak" + +msgid "didactic_template_update_import_info" +msgstr "Svojstva će se mijenjati prema ovom uvozu. Objekti koji su već primijenili ovaj predložak neće se mijenjati." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +msgid "dtpl_obj_type_info" +msgstr "Ovaj se didaktički predložak može primijeniti na ovu vrstu objekta." + +msgid "effective_form" +msgstr "Predložak na snazi od" + +msgid "grp_closed" +msgstr "Zatvorena grupa" + +msgid "grp_closed_info" +msgstr "Grupa nije vidljiva za nečlanove." + +msgid "more_translations" +msgstr "Još prijevoda" + +msgid "sess_closed" +msgstr "Zatvorena sesija" + +msgid "sess_closed_info" +msgstr "Sesija nije vidljiva za one koji nisu sudionici." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_hu.po b/components/ILIAS/DidacticTemplate/lang/didactic_hu.po new file mode 100644 index 000000000000..b7c816332404 --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_hu.po @@ -0,0 +1,153 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: didactic\n" + +msgid "activate_exclusive_template" +msgstr "Alapértelmezetten őszülő" + +msgid "activate_exclusive_template_info" +msgstr "A standard sablon nem lesz elérhető ahol ez a sablon aktív." + +msgid "activate_local_didactic_template" +msgstr "Alkalmazás hatásköre" + +msgid "activate_local_didactic_template_info" +msgstr "Ennek a didaktikai sablonnak a használata ezen alterületekre korlátozódik." + +msgid "didactic_activated_msg" +msgstr "Bekapcsolt didaktikai sablonok" + +msgid "didactic_adm_tab" +msgstr "Didaktikai sablonok" + +msgid "didactic_applicable_for" +msgstr "Alkalmazható ehhez:" + +msgid "didactic_auto_generated" +msgstr "Automatikusan létrehozott" + +msgid "didactic_available_templates" +msgstr "Elérhető didaktikai sablonok" + +msgid "didactic_back_to_overview" +msgstr "Vissza az áttekintéshez" + +msgid "didactic_cannot_delete_auto_generated" +msgstr "Automatikusan létrehozott didaktikai sablon nem törölhető." + +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "Legalább egy didaktikai sablont automatikusan hoztak létre, így nem törölhető." + +msgid "didactic_confirm_apply_new_template" +msgstr "Biztos, hogy alkalmazza a kiválasztott oktatási sablont? Így minden jelenlegi jogosultsági beállítás el fog veszni!" + +msgid "didactic_confirm_delete_msg" +msgstr "Biztos, hogy törli az alábbi didaktikai sablonokat?" + +msgid "didactic_copy_suc_message" +msgstr "Didaktikai sablon másolása" + +msgid "didactic_deactivated_msg" +msgstr "Kikapcsolt didaktikai sablonok" + +msgid "didactic_default_type" +msgstr "Alapértelmezett" + +msgid "didactic_default_type_info" +msgstr "Alapértelmezett beállítások használata." + +msgid "didactic_delete_msg" +msgstr "Törölt didaktikai sablon." + +msgid "didactic_do_export" +msgstr "Export" + +msgid "didactic_edit_tpl" +msgstr "Oktatási sablon módosítása" + +msgid "didactic_filter_with_icon" +msgstr "Ikonnak" + +msgid "didactic_filter_without_icon" +msgstr "Ikon nélkü" + +msgid "didactic_global" +msgstr "Globális" + +msgid "didactic_icon" +msgstr "Ikon" + +msgid "didactic_icon_error" +msgstr "Ikon csak tárolóobjektumokhoz rendelhető." + +msgid "didactic_icon_info" +msgstr "Ez az ikon jelenik meg az összes, ezt a sablont használó objektumnál. Az ‘Egyedi ikon’-nal ez felülírható. Ikon csak tárolóobjektumokhoz rendelhető (például kurzus, kategória)." + +msgid "didactic_import_btn" +msgstr "Didaktikai sablonok importálása" + +msgid "didactic_import_failed" +msgstr "Didaktikai sablon importálása sikertelen, hibaüzenete:" + +msgid "didactic_import_success" +msgstr "Sikeresen importált didaktikai sablon" + +msgid "didactic_import_table_title" +msgstr "Didaktikai sablon importálása" + +msgid "didactic_install_info" +msgstr "Általános információk" + +msgid "didactic_local" +msgstr "Helyi" + +msgid "didactic_not_changed" +msgstr "Az oktatási sablon beállítása változatlan." + +msgid "didactic_scope" +msgstr "Hatókör" + +msgid "didactic_scope_list_header" +msgstr "Korlátozva erre:" + +msgid "didactic_selected_tpl_option" +msgstr "Alkalmazott oktatási sablon:" + +msgid "didactic_template_applied" +msgstr "Alkalmazott oktatási sablon." + +msgid "didactic_template_update_import" +msgstr "Didaktikai sablon frissítése" + +msgid "didactic_template_update_import_info" +msgstr "Tulajdonságok ettől az importtól függően módosulnak. A már ezt a sablon használó objektumok nem módosulnak." + +msgid "didactic_translation_add_languages" +msgstr "Nyelv hozzáadása" + +msgid "dtpl_obj_type_info" +msgstr "Az a didaktikai sablon nem alkalmazható erre az objektumtípusra." + +msgid "effective_form" +msgstr "Sablon hatályos innentől:" + +msgid "grp_closed" +msgstr "Zárt csoport" + +msgid "grp_closed_info" +msgstr "A csoportot csak tagjaik láthatják." + +msgid "more_translations" +msgstr "További fordítások" + +msgid "sess_closed" +msgstr "Zárt esemény" + +msgid "sess_closed_info" +msgstr "Az eseményt csak a résztvevőik láthatják." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_it.po b/components/ILIAS/DidacticTemplate/lang/didactic_it.po new file mode 100644 index 000000000000..21973c613bb3 --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_it.po @@ -0,0 +1,154 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: didactic\n" + +msgid "activate_exclusive_template" +msgstr "Grigio predefinito" + +msgid "activate_exclusive_template_info" +msgstr "Questo modello standard non sarà disponibile dove è attivo questo modello." + +msgid "activate_local_didactic_template" +msgstr "Ambito di applicazione" + +msgid "activate_local_didactic_template_info" +msgstr "L’utilizzo di questo modello didattico sarà limitato a queste sottozone." + +msgid "didactic_activated_msg" +msgstr "I modelli didattici selezionati sono stati attivati" + +msgid "didactic_adm_tab" +msgstr "Modelli didattici" + +msgid "didactic_applicable_for" +msgstr "Applicabile per" + +msgid "didactic_auto_generated" +msgstr "Generato automaticamente" + +msgid "didactic_available_templates" +msgstr "Modelli didattici disponibili" + +msgid "didactic_back_to_overview" +msgstr "Torna al sommario" + +msgid "didactic_cannot_delete_auto_generated" +msgstr "Non è consentito eliminare i modelli didattici generati automaticamente." + +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "Almeno uno dei modelli didattici selezionati è generato automaticamente e non può essere eliminato." + +msgid "didactic_confirm_apply_new_template" +msgstr "Vuoi davvero applicare il modello didattico scelto? Tutte le impostazioni di autorizzazione corrente andranno perse!" + +msgid "didactic_confirm_delete_msg" +msgstr "Vuoi davvero eliminare i seguenti modelli didattici?" + +msgid "didactic_copy_suc_message" +msgstr "Modelli didattici copiati" + +msgid "didactic_deactivated_msg" +msgstr "Modelli didattici disattivati" + +msgid "didactic_default_type" +msgstr "Impostazione predefinita" + +msgid "didactic_default_type_info" +msgstr "Utilizza le autorizzazioni predefinite per %s" + +msgid "didactic_delete_msg" +msgstr "Modelli didattici eliminati." + +msgid "didactic_do_export" +msgstr "Esporta" + +msgid "didactic_edit_tpl" +msgstr "Modifica modelli didattici" + +msgid "didactic_filter_with_icon" +msgstr "Con icona" + +msgid "didactic_filter_without_icon" +msgstr "Senza icona" + +msgid "didactic_global" +msgstr "Globale" + +msgid "didactic_icon" +msgstr "Icona" + +msgid "didactic_icon_error" +msgstr "Le icone non possono essere assegnate a oggetti non contenitori." + +msgid "didactic_icon_info" +msgstr "L'icona viene mostrata per tutti gli oggetti che utilizzano questo modello di oggetto. Le \"icone personalizzate\" degli oggetti sovrascrivono le icone dei modelli didattici. Le icone possono essere utilizzate solo per modelli didattici assegnati a oggetti contenitore." + +msgid "didactic_import_btn" +msgstr "Importa modelli didattici" + +msgid "didactic_import_failed" +msgstr "L'importazione del modello didattico non è riuscita:" + +msgid "didactic_import_success" +msgstr "Modello didattico importato correttamente" + +msgid "didactic_import_table_title" +msgstr "Importazione di un modello didattico" + +msgid "didactic_install_info" +msgstr "Informazioni generali" + +msgid "didactic_local" +msgstr "Locale" + +msgid "didactic_not_changed" +msgstr "L'impostazione del modello didattico è invariata." + +msgid "didactic_scope" +msgstr "Ambito" + +msgid "didactic_scope_list_header" +msgstr "Limitato a:" + +msgid "didactic_selected_tpl_option" +msgstr "Modelli didattici applicati:" + +msgid "didactic_template_applied" +msgstr "Modelli didattici applicati." + +msgid "didactic_template_update_import" +msgstr "Aggiorna modelli didattici" + +msgid "didactic_template_update_import_info" +msgstr "Le proprietà verranno modificate in base a questa importazione. Gli oggetti che hanno già applicato questo modello non verranno modificati." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +msgid "dtpl_obj_type_info" +msgstr "Questo modello didattico può essere applicato a questo tipo di oggetto." + +msgid "effective_form" +msgstr "Modello efficace da" + +msgid "grp_closed" +msgstr "Gruppo Chiuso" + +msgid "grp_closed_info" +msgstr "Il gruppo non è visibile ai non iscritti." + +msgid "more_translations" +msgstr "Ulteriori traduzioni" + +msgid "sess_closed" +msgstr "Sessione chiusa" + +msgid "sess_closed_info" +msgstr "La sessione non è visibile per i non-partecipanti." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_ja.po b/components/ILIAS/DidacticTemplate/lang/didactic_ja.po new file mode 100644 index 000000000000..befb835fa716 --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_ja.po @@ -0,0 +1,153 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: didactic\n" + +msgid "activate_exclusive_template" +msgstr "グレイアウトの既定値" + +msgid "activate_exclusive_template_info" +msgstr "標準テンプレートはこのテンプレートを有効にしていると利用できません。" + +msgid "activate_local_didactic_template" +msgstr "アプリケーションの範囲" + +msgid "activate_local_didactic_template_info" +msgstr "この教則テンプレートの使用はこれらのサブエリアに対しては制限されます。" + +msgid "didactic_activated_msg" +msgstr "教則テンプレートが起動されました。" + +msgid "didactic_adm_tab" +msgstr "教則テンプレート" + +msgid "didactic_applicable_for" +msgstr "適用" + +msgid "didactic_auto_generated" +msgstr "自動作成されました" + +msgid "didactic_available_templates" +msgstr "利用可能な教則テンプレート" + +msgid "didactic_back_to_overview" +msgstr "全体へ戻る" + +msgid "didactic_cannot_delete_auto_generated" +msgstr "教則テンプレートの自動作成の削除はできません。" + +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "選択された教則テンプレートの一つは自動作成されたものであり削除することはできません。" + +msgid "didactic_confirm_apply_new_template" +msgstr "選択した教則テンプレートを本当に適用しますか? 全ての現在のアクセス権設定は消去されます!" + +msgid "didactic_confirm_delete_msg" +msgstr "次の教則テンプレートを本当に削除しますか?" + +msgid "didactic_copy_suc_message" +msgstr "教則テンプレートをコピーしました" + +msgid "didactic_deactivated_msg" +msgstr "教則テンプレートを無効にしました" + +msgid "didactic_default_type" +msgstr "初期設定" + +msgid "didactic_default_type_info" +msgstr "%sの初期アクセス権を使用" + +msgid "didactic_delete_msg" +msgstr "教則テンプレートを削除しました。" + +msgid "didactic_do_export" +msgstr "エクスポート" + +msgid "didactic_edit_tpl" +msgstr "教則テンプレートを編集" + +msgid "didactic_filter_with_icon" +msgstr "Iconあり" + +msgid "didactic_filter_without_icon" +msgstr "Iconなし" + +msgid "didactic_global" +msgstr "Global" + +msgid "didactic_icon" +msgstr "Icon" + +msgid "didactic_icon_error" +msgstr "アイコンは非コンテナオブジェクトへワイ充てる事はできません。" + +msgid "didactic_icon_info" +msgstr "このオブジェクトテンプレートを使用する全てのオブジェクト用にこのアイコンは表示されます。オブジェクトの\"Custom Icons\"はdidacticアイコンを上書きします。アイコンはコンテナオブジェクトへ割当てられたdidacticテンプレート用にのみ使用できます。" + +msgid "didactic_import_btn" +msgstr "教則テンプレートをインポート" + +msgid "didactic_import_failed" +msgstr "教則テンプレートのインポート中に失敗したメッセージ:" + +msgid "didactic_import_success" +msgstr "教則テンプレートは正しくインポートされました" + +msgid "didactic_import_table_title" +msgstr "教則テンプレートをインポート" + +msgid "didactic_install_info" +msgstr "全般情報" + +msgid "didactic_local" +msgstr "Local" + +msgid "didactic_not_changed" +msgstr "教則テンプレート設定は変更されません。" + +msgid "didactic_scope" +msgstr "範囲" + +msgid "didactic_scope_list_header" +msgstr "限定:" + +msgid "didactic_selected_tpl_option" +msgstr "教則テンプレートを適用しました:" + +msgid "didactic_template_applied" +msgstr "教則テンプレートを適用しました。" + +msgid "didactic_template_update_import" +msgstr "教則テンプレートを更新" + +msgid "didactic_template_update_import_info" +msgstr "このインポートに沿ってプロパティは変更されます。このテンプレートへ既に適用済みのオブジェクトは変更されません。" + +msgid "didactic_translation_add_languages" +msgstr "言語を追加" + +msgid "dtpl_obj_type_info" +msgstr "この教則テンプレートはこのオブジェクトタイプへ適用することができます。" + +msgid "effective_form" +msgstr "テンプレートの有効開始" + +msgid "grp_closed" +msgstr "限定グループ" + +msgid "grp_closed_info" +msgstr "グループは非メンバーには表示されません。" + +msgid "more_translations" +msgstr "もっと翻訳" + +msgid "sess_closed" +msgstr "非公開セッション" + +msgid "sess_closed_info" +msgstr "非参加者にはセッションは表示されません。" diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_ka.po b/components/ILIAS/DidacticTemplate/lang/didactic_ka.po new file mode 100644 index 000000000000..a6c98eafb6f8 --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_ka.po @@ -0,0 +1,178 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: didactic\n" + +#, fuzzy +msgid "activate_exclusive_template" +msgstr "Grey Out Default" + +#, fuzzy +msgid "activate_exclusive_template_info" +msgstr "The standard template won't be available wherever this template is active." + +#, fuzzy +msgid "activate_local_didactic_template" +msgstr "Scope of Application" + +#, fuzzy +msgid "activate_local_didactic_template_info" +msgstr "Usage of this didactical template will be limited to these sub-areas." + +msgid "didactic_activated_msg" +msgstr "გააქტიურებული დიდაქტიკური ნიმუშები" + +msgid "didactic_adm_tab" +msgstr "დიდაქტიკური ნიმუშები" + +msgid "didactic_applicable_for" +msgstr "შესაფერისია" + +#, fuzzy +msgid "didactic_auto_generated" +msgstr "Automatic Generated" + +msgid "didactic_available_templates" +msgstr "ხელმისაწვდომი დიდაქტიკური ნიმუშები" + +msgid "didactic_back_to_overview" +msgstr "უკან მიმოხილვაში" + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated" +msgstr "It is not allowed to delete automatic generated didactic templates." + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "At least one of the selected didactic templates is automatic generated and cannot be deleted." + +msgid "didactic_confirm_apply_new_template" +msgstr "ნამდვილად გსურთ ამ დიდაქტიკურ ნიმუშზე ხელის მოწერა? Yყველა მიმდინარე დაშვება დაიკარგება!" + +msgid "didactic_confirm_delete_msg" +msgstr "ნამდვილად გსურთ შემდეგი დიდაქტიკური ნიმუშების წაშლა?" + +msgid "didactic_copy_suc_message" +msgstr "დიდაქტიკური ნიმუშების ასლი გაკეთებულია" + +msgid "didactic_deactivated_msg" +msgstr "დიდაქტიკური ნიმუშები არააქტიურია" + +#, fuzzy +msgid "didactic_default_type" +msgstr "Default" + +msgid "didactic_default_type_info" +msgstr "მომხმარებელთა სტანდარტული დაშვებები %s" + +msgid "didactic_delete_msg" +msgstr "წაშლილი დიდაქტიკური ნიმუშები" + +msgid "didactic_do_export" +msgstr "ექსპორტი" + +msgid "didactic_edit_tpl" +msgstr "დიდაქტიკური ნიმუშის რედაქტირება" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +msgid "didactic_import_btn" +msgstr "დიდაქტიკური ნიმუშის გადმოტანა" + +msgid "didactic_import_failed" +msgstr "დიდაქტიკური ნიმუშის შეტყობინებასთან ერთად გადმოტანა ჩაიშალა" + +msgid "didactic_import_success" +msgstr "წარმატებით გადმოტანილი დიდაქტიკური ნიმუში" + +msgid "didactic_import_table_title" +msgstr "დიდაქტიკური ნიმუშის იმპორტირება" + +msgid "didactic_install_info" +msgstr "ზოგადი ინფორმაცია" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +msgid "didactic_not_changed" +msgstr "დიდაქტიკური ნიმუში პარამეტრი უცვლელია" + +#, fuzzy +msgid "didactic_scope" +msgstr "Scope" + +#, fuzzy +msgid "didactic_scope_list_header" +msgstr "Limited to:" + +msgid "didactic_selected_tpl_option" +msgstr "მორგებულია დიდაქტიკური ნიმუში" + +msgid "didactic_template_applied" +msgstr "მორგებულია დიდაქტიკური ნიმუში" + +#, fuzzy +msgid "didactic_template_update_import" +msgstr "Update Didactic Template" + +#, fuzzy +msgid "didactic_template_update_import_info" +msgstr "Properties will be changed according to this import. Objects which already applied this template will not be changed." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +#, fuzzy +msgid "dtpl_obj_type_info" +msgstr "This didactic template can be applied on this object type." + +#, fuzzy +msgid "effective_form" +msgstr "Template Effective From" + +msgid "grp_closed" +msgstr "დაკეტილი ჯგუფი" + +msgid "grp_closed_info" +msgstr "ჯგუფი ხილვადია მხოლოდ წევრებისთვის" + +#, fuzzy +msgid "more_translations" +msgstr "More Translations" + +#, fuzzy +msgid "sess_closed" +msgstr "Closed Session" + +#, fuzzy +msgid "sess_closed_info" +msgstr "Session is not visible for non-participants." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_lt.po b/components/ILIAS/DidacticTemplate/lang/didactic_lt.po new file mode 100644 index 000000000000..b775c3dbf3ec --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_lt.po @@ -0,0 +1,201 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: didactic\n" + +#, fuzzy +msgid "activate_exclusive_template" +msgstr "Grey Out Default" + +#, fuzzy +msgid "activate_exclusive_template_info" +msgstr "The standard template won't be available wherever this template is active." + +#, fuzzy +msgid "activate_local_didactic_template" +msgstr "Scope of Application" + +#, fuzzy +msgid "activate_local_didactic_template_info" +msgstr "Usage of this didactical template will be limited to these sub-areas." + +#, fuzzy +msgid "didactic_activated_msg" +msgstr "Activated didactic templates" + +#, fuzzy +msgid "didactic_adm_tab" +msgstr "Didactic" + +#, fuzzy +msgid "didactic_applicable_for" +msgstr "Applicalble for" + +#, fuzzy +msgid "didactic_auto_generated" +msgstr "Automatic Generated" + +#, fuzzy +msgid "didactic_available_templates" +msgstr "Available Didactic Templates" + +#, fuzzy +msgid "didactic_back_to_overview" +msgstr "Back to Overview" + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated" +msgstr "It is not allowed to delete automatic generated didactic templates." + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "At least one of the selected didactic templates is automatic generated and cannot be deleted." + +#, fuzzy +msgid "didactic_confirm_apply_new_template" +msgstr "Do you really want to apply the chosen didactic template? All current permission settings will get lost!" + +#, fuzzy +msgid "didactic_confirm_delete_msg" +msgstr "Do you really want to delete the following didactic templates?" + +#, fuzzy +msgid "didactic_copy_suc_message" +msgstr "Copied didactic template" + +#, fuzzy +msgid "didactic_deactivated_msg" +msgstr "Deactivated didactic templates" + +#, fuzzy +msgid "didactic_default_type" +msgstr "Default" + +#, fuzzy +msgid "didactic_default_type_info" +msgstr "Uses default permissions for %s" + +#, fuzzy +msgid "didactic_delete_msg" +msgstr "Deleted didactical templates." + +#, fuzzy +msgid "didactic_do_export" +msgstr "Export" + +#, fuzzy +msgid "didactic_edit_tpl" +msgstr "Edit Didactic Template" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +#, fuzzy +msgid "didactic_import_btn" +msgstr "Import Didactic Template" + +#, fuzzy +msgid "didactic_import_failed" +msgstr "Importing the didactical template failed with message: " + +#, fuzzy +msgid "didactic_import_success" +msgstr "Successfully imported didactical template" + +#, fuzzy +msgid "didactic_import_table_title" +msgstr "Import of a didactic template" + +#, fuzzy +msgid "didactic_install_info" +msgstr "General Information" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +#, fuzzy +msgid "didactic_not_changed" +msgstr "The didactic template setting is unchanged." + +#, fuzzy +msgid "didactic_scope" +msgstr "Scope" + +#, fuzzy +msgid "didactic_scope_list_header" +msgstr "Limited to:" + +#, fuzzy +msgid "didactic_selected_tpl_option" +msgstr "Applied didactic template:" + +#, fuzzy +msgid "didactic_template_applied" +msgstr "Applied didactic template." + +#, fuzzy +msgid "didactic_template_update_import" +msgstr "Update Didactic Template" + +#, fuzzy +msgid "didactic_template_update_import_info" +msgstr "Properties will be changed according to this import. Objects which already applied this template will not be changed." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +#, fuzzy +msgid "dtpl_obj_type_info" +msgstr "This didactic template can be applied on this object type." + +#, fuzzy +msgid "effective_form" +msgstr "Template Effective From" + +#, fuzzy +msgid "grp_closed" +msgstr "Closed Group" + +#, fuzzy +msgid "grp_closed_info" +msgstr "Group is not visible for non-members." + +#, fuzzy +msgid "more_translations" +msgstr "More Translations" + +#, fuzzy +msgid "sess_closed" +msgstr "Closed Session" + +#, fuzzy +msgid "sess_closed_info" +msgstr "Session is not visible for non-participants." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_nl.po b/components/ILIAS/DidacticTemplate/lang/didactic_nl.po new file mode 100644 index 000000000000..a1f97d4ea4ee --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_nl.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: didactic\n" + +#, fuzzy +msgid "activate_exclusive_template" +msgstr "Grey Out Default" + +#, fuzzy +msgid "activate_exclusive_template_info" +msgstr "The standard template won't be available wherever this template is active." + +#, fuzzy +msgid "activate_local_didactic_template" +msgstr "Scope of Application" + +#, fuzzy +msgid "activate_local_didactic_template_info" +msgstr "Usage of this didactical template will be limited to these sub-areas." + +msgid "didactic_activated_msg" +msgstr "Activated didactic templates" + +msgid "didactic_adm_tab" +msgstr "Didactische sjablonen" + +msgid "didactic_applicable_for" +msgstr "Toepasbaar op" + +#, fuzzy +msgid "didactic_auto_generated" +msgstr "Automatic Generated" + +msgid "didactic_available_templates" +msgstr "Beschikbare didactische sjablonen" + +msgid "didactic_back_to_overview" +msgstr "Back to Overview" + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated" +msgstr "It is not allowed to delete automatic generated didactic templates." + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "At least one of the selected didactic templates is automatic generated and cannot be deleted." + +msgid "didactic_confirm_apply_new_template" +msgstr "Wil je echt het gekozen didactische sjabloon toepassen? Alle huidige rechten zullen verkoren gaan" + +msgid "didactic_confirm_delete_msg" +msgstr "Do you really want to delete the following didactic sjablonen?" + +msgid "didactic_copy_suc_message" +msgstr "Copied didactic sjabloon" + +msgid "didactic_deactivated_msg" +msgstr "Deactivated didactic sjablonen" + +msgid "didactic_default_type" +msgstr "Standaard" + +msgid "didactic_default_type_info" +msgstr "Gebruikt standaard permissies voor %s" + +msgid "didactic_delete_msg" +msgstr "Deleted didactical sjablonen." + +msgid "didactic_do_export" +msgstr "Export" + +msgid "didactic_edit_tpl" +msgstr "Edit Didactic sjabloon" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +msgid "didactic_import_btn" +msgstr "Importeren didactisch sjabloon" + +msgid "didactic_import_failed" +msgstr "Importing the didactical sjabloon failed with message:" + +msgid "didactic_import_success" +msgstr "Successfully imported didactical sjabloon" + +msgid "didactic_import_table_title" +msgstr "Import of a didactic sjabloon" + +msgid "didactic_install_info" +msgstr "General Information" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +msgid "didactic_not_changed" +msgstr "The didactic sjabloon setting is unchanged." + +#, fuzzy +msgid "didactic_scope" +msgstr "Scope" + +#, fuzzy +msgid "didactic_scope_list_header" +msgstr "Limited to:" + +msgid "didactic_selected_tpl_option" +msgstr "Applied didactic sjabloon:" + +msgid "didactic_template_applied" +msgstr "Applied didactic template." + +#, fuzzy +msgid "didactic_template_update_import" +msgstr "Update Didactic Template" + +#, fuzzy +msgid "didactic_template_update_import_info" +msgstr "Properties will be changed according to this import. Objects which already applied this template will not be changed." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +#, fuzzy +msgid "dtpl_obj_type_info" +msgstr "This didactic template can be applied on this object type." + +#, fuzzy +msgid "effective_form" +msgstr "Template Effective From" + +msgid "grp_closed" +msgstr "Besloten groep" + +msgid "grp_closed_info" +msgstr "Groep is niet zichtbaar voor niet-deelnemers" + +#, fuzzy +msgid "more_translations" +msgstr "More Translations" + +#, fuzzy +msgid "sess_closed" +msgstr "Closed Session" + +#, fuzzy +msgid "sess_closed_info" +msgstr "Session is not visible for non-participants." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_pl.po b/components/ILIAS/DidacticTemplate/lang/didactic_pl.po new file mode 100644 index 000000000000..cdca160ae6b2 --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_pl.po @@ -0,0 +1,161 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: didactic\n" + +msgid "activate_exclusive_template" +msgstr "Wyłącz standard" + +msgid "activate_exclusive_template_info" +msgstr "Szablon standardowy wyłączany jest wszędzie tam, gdzie szablon dydaktyczny jest aktywny." + +msgid "activate_local_didactic_template" +msgstr "Obszar obowiązywania" + +msgid "activate_local_didactic_template_info" +msgstr "Użycie szablonów dydaktycznych zostanie ograniczone do części dostępnych obszarów." + +msgid "didactic_activated_msg" +msgstr "Aktywowano wybrane szablony dydaktyczne." + +msgid "didactic_adm_tab" +msgstr "Szablony obiektów" + +msgid "didactic_applicable_for" +msgstr "Można zastosować do" + +msgid "didactic_auto_generated" +msgstr "Wygenerowane automatycznie" + +msgid "didactic_available_templates" +msgstr "Dostępne szablony dydaktyczne" + +msgid "didactic_back_to_overview" +msgstr "Przejdź do widoku ogólnego" + +msgid "didactic_cannot_delete_auto_generated" +msgstr "Usuwanie automatycznie wygenerowanych szablonów dydaktycznych jest zabronione." + +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "Co najmniej jeden z wybranych dydaktycznych szablonów został automatycznie wygenerowany i nie można go usunąć." + +msgid "didactic_confirm_apply_new_template" +msgstr "Jesteś pewien, że chcesz użyć tego szablonu dydaktycznego? Wszystkie dostosowane prawa zostaną nadpisane i dopasowane do nowych szablonów dydaktycznych." + +msgid "didactic_confirm_delete_msg" +msgstr "Jesteś pewien, że poniższe szablony dydaktyczne mają zostać usunięte?" + +msgid "didactic_copy_suc_message" +msgstr "Skopiowano szablon dydaktyczny" + +msgid "didactic_deactivated_msg" +msgstr "Wyłączono wybrane szablony dydaktyczne" + +msgid "didactic_default_type" +msgstr "Domyślnie" + +msgid "didactic_default_type_info" +msgstr "Domyślne uprawnienia %s" + +msgid "didactic_delete_msg" +msgstr "Usunięto wybrane szablony dydaktyczne" + +msgid "didactic_do_export" +msgstr "Eksport certyfikatu" + +msgid "didactic_edit_tpl" +msgstr "Edytuj szablon dydaktyczny" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +msgid "didactic_import_btn" +msgstr "Zaimportuj szablon dydaktyczny" + +msgid "didactic_import_failed" +msgstr "Nie udało się zaimportować szablonu dydaktycznego:" + +msgid "didactic_import_success" +msgstr "Szablon dydaktyczny został z powodzeniem zaimportowany" + +msgid "didactic_import_table_title" +msgstr "Import szablony dydaktycznego" + +msgid "didactic_install_info" +msgstr "Informacje ogólne" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +msgid "didactic_not_changed" +msgstr "Nie zmieniono aktywnego szablonu dydaktycznego." + +msgid "didactic_scope" +msgstr "Obszar obowiązywania" + +msgid "didactic_scope_list_header" +msgstr "Ograniczony do:" + +msgid "didactic_selected_tpl_option" +msgstr "Zastosowany szablon dydaktyczny:" + +msgid "didactic_template_applied" +msgstr "Zastosowano szablon dydaktyczny." + +msgid "didactic_template_update_import" +msgstr "Aktualizacja szablonów dydaktycznych" + +msgid "didactic_template_update_import_info" +msgstr "Wszystkie właściwości zostaną dostosowane zgodnie z importem. Obiekty, dla których zastosowano ten szablon, nie będą zmieniane." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +msgid "dtpl_obj_type_info" +msgstr "Informuje, dla jakich typów obiektu można zastosować szablon dydaktyczny." + +msgid "effective_form" +msgstr "Szablon ważny od" + +msgid "grp_closed" +msgstr "Zamknięta grupa" + +msgid "grp_closed_info" +msgstr "Grupa jest widoczna tylko dla jej uczestników." + +msgid "more_translations" +msgstr "Dodatkowe tłumaczenia" + +msgid "sess_closed" +msgstr "Zamknięta sesja" + +msgid "sess_closed_info" +msgstr "Sesja nie jest widoczna dla osób, które w niej nie uczestniczą" diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_pt.po b/components/ILIAS/DidacticTemplate/lang/didactic_pt.po new file mode 100644 index 000000000000..52f21bab9cfb --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_pt.po @@ -0,0 +1,161 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: didactic\n" + +msgid "activate_exclusive_template" +msgstr "Predefinição a cinzento" + +msgid "activate_exclusive_template_info" +msgstr "O modelo padrão não estará disponível quando este modelo estiver ativo." + +msgid "activate_local_didactic_template" +msgstr "Âmbito de aplicação" + +msgid "activate_local_didactic_template_info" +msgstr "A utilização deste modelo didático será limitado a estas subáreas." + +msgid "didactic_activated_msg" +msgstr "Modelos didáticos ativados" + +msgid "didactic_adm_tab" +msgstr "Qui" + +msgid "didactic_applicable_for" +msgstr "Ter" + +msgid "didactic_auto_generated" +msgstr "Automaticamente criado" + +msgid "didactic_available_templates" +msgstr "Modelos didáticos disponíveis" + +msgid "didactic_back_to_overview" +msgstr "Regressar à vista geral" + +msgid "didactic_cannot_delete_auto_generated" +msgstr "Não é permitido apagar modelos didáticos automaticamente criados." + +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "Pelo menos um dos modelos didáticos selecionados é automaticamente criado e não pode ser apagado." + +msgid "didactic_confirm_apply_new_template" +msgstr "Tem a certeza que quer aplicar o modelo didático escolhido? Perdem-se todas as definições de permissões atuais!" + +msgid "didactic_confirm_delete_msg" +msgstr "Tem a certeza que quer apagar os seguintes modelos didáticos?" + +msgid "didactic_copy_suc_message" +msgstr "Modelo didático copiado" + +msgid "didactic_deactivated_msg" +msgstr "Modelos didáticos desativados" + +msgid "didactic_default_type" +msgstr "Predefinição" + +msgid "didactic_default_type_info" +msgstr "Qua" + +msgid "didactic_delete_msg" +msgstr "Hora" + +msgid "didactic_do_export" +msgstr "Exportar" + +msgid "didactic_edit_tpl" +msgstr "Editar modelo didático" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +msgid "didactic_import_btn" +msgstr "Importar modelo didático" + +msgid "didactic_import_failed" +msgstr "Clicar (Shift) ou arrastar para alterar o valor" + +msgid "didactic_import_success" +msgstr "Hoje" + +msgid "didactic_import_table_title" +msgstr "Importar um modelo didático" + +msgid "didactic_install_info" +msgstr "Informações gerais" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +msgid "didactic_not_changed" +msgstr "A definição do modelo didático está inalterada." + +msgid "didactic_scope" +msgstr "Âmbito" + +msgid "didactic_scope_list_header" +msgstr "Limitado a:" + +msgid "didactic_selected_tpl_option" +msgstr "Modelo didático aplicado:" + +msgid "didactic_template_applied" +msgstr "Modelo didático aplicado." + +msgid "didactic_template_update_import" +msgstr "Atualizar modelo didático" + +msgid "didactic_template_update_import_info" +msgstr "As propriedades mudam de acordo com esta importação. Os objetos que já foram aplicados a este modelo não serão alterados." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +msgid "dtpl_obj_type_info" +msgstr "Este modelo didático pode ser aplicado neste tipo de objeto." + +msgid "effective_form" +msgstr "Modelo efetivo de" + +msgid "grp_closed" +msgstr "Grupo fechado" + +msgid "grp_closed_info" +msgstr "O grupo não está visível a não-membros." + +msgid "more_translations" +msgstr "Mais traduções" + +msgid "sess_closed" +msgstr "Sessão fechada" + +msgid "sess_closed_info" +msgstr "A sessão não está visível a não-participantes." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_ro.po b/components/ILIAS/DidacticTemplate/lang/didactic_ro.po new file mode 100644 index 000000000000..c970fcc21195 --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_ro.po @@ -0,0 +1,201 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: didactic\n" + +#, fuzzy +msgid "activate_exclusive_template" +msgstr "Grey Out Default" + +#, fuzzy +msgid "activate_exclusive_template_info" +msgstr "The standard template won't be available wherever this template is active." + +#, fuzzy +msgid "activate_local_didactic_template" +msgstr "Scope of Application" + +#, fuzzy +msgid "activate_local_didactic_template_info" +msgstr "Usage of this didactical template will be limited to these sub-areas." + +#, fuzzy +msgid "didactic_activated_msg" +msgstr "Activated didactic templates" + +#, fuzzy +msgid "didactic_adm_tab" +msgstr "Didactic" + +#, fuzzy +msgid "didactic_applicable_for" +msgstr "Applicalble for" + +#, fuzzy +msgid "didactic_auto_generated" +msgstr "Automatic Generated" + +#, fuzzy +msgid "didactic_available_templates" +msgstr "Available Didactic Templates" + +#, fuzzy +msgid "didactic_back_to_overview" +msgstr "Back to Overview" + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated" +msgstr "It is not allowed to delete automatic generated didactic templates." + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "At least one of the selected didactic templates is automatic generated and cannot be deleted." + +#, fuzzy +msgid "didactic_confirm_apply_new_template" +msgstr "Do you really want to apply the chosen didactic template? All current permission settings will get lost!" + +#, fuzzy +msgid "didactic_confirm_delete_msg" +msgstr "Do you really want to delete the following didactic templates?" + +#, fuzzy +msgid "didactic_copy_suc_message" +msgstr "Copied didactic template" + +#, fuzzy +msgid "didactic_deactivated_msg" +msgstr "Deactivated didactic templates" + +#, fuzzy +msgid "didactic_default_type" +msgstr "Default" + +#, fuzzy +msgid "didactic_default_type_info" +msgstr "Uses default permissions for %s" + +#, fuzzy +msgid "didactic_delete_msg" +msgstr "Deleted didactical templates." + +#, fuzzy +msgid "didactic_do_export" +msgstr "Export" + +#, fuzzy +msgid "didactic_edit_tpl" +msgstr "Edit Didactic Template" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +#, fuzzy +msgid "didactic_import_btn" +msgstr "Import Didactic Template" + +#, fuzzy +msgid "didactic_import_failed" +msgstr "Importing the didactical template failed with message: " + +#, fuzzy +msgid "didactic_import_success" +msgstr "Successfully imported didactical template" + +#, fuzzy +msgid "didactic_import_table_title" +msgstr "Import of a didactic template" + +#, fuzzy +msgid "didactic_install_info" +msgstr "General Information" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +#, fuzzy +msgid "didactic_not_changed" +msgstr "The didactic template setting is unchanged." + +#, fuzzy +msgid "didactic_scope" +msgstr "Scope" + +#, fuzzy +msgid "didactic_scope_list_header" +msgstr "Limited to:" + +#, fuzzy +msgid "didactic_selected_tpl_option" +msgstr "Applied didactic template:" + +#, fuzzy +msgid "didactic_template_applied" +msgstr "Applied didactic template." + +#, fuzzy +msgid "didactic_template_update_import" +msgstr "Update Didactic Template" + +#, fuzzy +msgid "didactic_template_update_import_info" +msgstr "Properties will be changed according to this import. Objects which already applied this template will not be changed." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +#, fuzzy +msgid "dtpl_obj_type_info" +msgstr "This didactic template can be applied on this object type." + +#, fuzzy +msgid "effective_form" +msgstr "Template Effective From" + +#, fuzzy +msgid "grp_closed" +msgstr "Closed Group" + +#, fuzzy +msgid "grp_closed_info" +msgstr "Group is not visible for non-members." + +#, fuzzy +msgid "more_translations" +msgstr "More Translations" + +#, fuzzy +msgid "sess_closed" +msgstr "Closed Session" + +#, fuzzy +msgid "sess_closed_info" +msgstr "Session is not visible for non-participants." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_ru.po b/components/ILIAS/DidacticTemplate/lang/didactic_ru.po new file mode 100644 index 000000000000..3a5a7b6bdc47 --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_ru.po @@ -0,0 +1,177 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: didactic\n" + +#, fuzzy +msgid "activate_exclusive_template" +msgstr "Grey Out Default" + +#, fuzzy +msgid "activate_exclusive_template_info" +msgstr "The standard template won't be available wherever this template is active." + +#, fuzzy +msgid "activate_local_didactic_template" +msgstr "Scope of Application" + +#, fuzzy +msgid "activate_local_didactic_template_info" +msgstr "Usage of this didactical template will be limited to these sub-areas." + +msgid "didactic_activated_msg" +msgstr "Activated didactic templates" + +msgid "didactic_adm_tab" +msgstr "Didactic" + +msgid "didactic_applicable_for" +msgstr "Applicalble for" + +#, fuzzy +msgid "didactic_auto_generated" +msgstr "Automatic Generated" + +msgid "didactic_available_templates" +msgstr "Available Didactic Templates" + +msgid "didactic_back_to_overview" +msgstr "Back to Overview" + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated" +msgstr "It is not allowed to delete automatic generated didactic templates." + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "At least one of the selected didactic templates is automatic generated and cannot be deleted." + +msgid "didactic_confirm_apply_new_template" +msgstr "Do you really want to apply the chosen didactic template? All current permission settings will get lost!" + +msgid "didactic_confirm_delete_msg" +msgstr "Do you really want to delete the following didactic templates?" + +msgid "didactic_copy_suc_message" +msgstr "Copied didactic template" + +msgid "didactic_deactivated_msg" +msgstr "Deactivated didactic templates" + +msgid "didactic_default_type" +msgstr "Default" + +msgid "didactic_default_type_info" +msgstr "Uses default permissions for %s" + +msgid "didactic_delete_msg" +msgstr "Deleted didactical templates." + +msgid "didactic_do_export" +msgstr "Export" + +msgid "didactic_edit_tpl" +msgstr "Edit Didactic Template" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +msgid "didactic_import_btn" +msgstr "Import Didactic Template" + +msgid "didactic_import_failed" +msgstr "Importing the didactical template failed with message:" + +msgid "didactic_import_success" +msgstr "Successfully imported didactical template" + +msgid "didactic_import_table_title" +msgstr "Import of a didactic template" + +msgid "didactic_install_info" +msgstr "General Information" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +msgid "didactic_not_changed" +msgstr "The didactic template setting is unchanged." + +#, fuzzy +msgid "didactic_scope" +msgstr "Scope" + +#, fuzzy +msgid "didactic_scope_list_header" +msgstr "Limited to:" + +msgid "didactic_selected_tpl_option" +msgstr "Applied didactic template:" + +msgid "didactic_template_applied" +msgstr "Applied didactic template." + +#, fuzzy +msgid "didactic_template_update_import" +msgstr "Update Didactic Template" + +#, fuzzy +msgid "didactic_template_update_import_info" +msgstr "Properties will be changed according to this import. Objects which already applied this template will not be changed." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +#, fuzzy +msgid "dtpl_obj_type_info" +msgstr "This didactic template can be applied on this object type." + +#, fuzzy +msgid "effective_form" +msgstr "Template Effective From" + +msgid "grp_closed" +msgstr "Закрытая группа" + +msgid "grp_closed_info" +msgstr "Группа не видима для тех кто в ней не участвует." + +#, fuzzy +msgid "more_translations" +msgstr "More Translations" + +#, fuzzy +msgid "sess_closed" +msgstr "Closed Session" + +#, fuzzy +msgid "sess_closed_info" +msgstr "Session is not visible for non-participants." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_sk.po b/components/ILIAS/DidacticTemplate/lang/didactic_sk.po new file mode 100644 index 000000000000..45d06e82ca8b --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_sk.po @@ -0,0 +1,199 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: didactic\n" + +#, fuzzy +msgid "activate_exclusive_template" +msgstr "Grey Out Default" + +#, fuzzy +msgid "activate_exclusive_template_info" +msgstr "The standard template won't be available wherever this template is active." + +#, fuzzy +msgid "activate_local_didactic_template" +msgstr "Scope of Application" + +#, fuzzy +msgid "activate_local_didactic_template_info" +msgstr "Usage of this didactical template will be limited to these sub-areas." + +#, fuzzy +msgid "didactic_activated_msg" +msgstr "Activated didactic templates" + +#, fuzzy +msgid "didactic_adm_tab" +msgstr "Didactic" + +#, fuzzy +msgid "didactic_applicable_for" +msgstr "Applicalble for" + +#, fuzzy +msgid "didactic_auto_generated" +msgstr "Automatic Generated" + +#, fuzzy +msgid "didactic_available_templates" +msgstr "Available Didactic Templates" + +#, fuzzy +msgid "didactic_back_to_overview" +msgstr "Back to Overview" + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated" +msgstr "It is not allowed to delete automatic generated didactic templates." + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "At least one of the selected didactic templates is automatic generated and cannot be deleted." + +#, fuzzy +msgid "didactic_confirm_apply_new_template" +msgstr "Do you really want to apply the chosen didactic template? All current permission settings will get lost!" + +#, fuzzy +msgid "didactic_confirm_delete_msg" +msgstr "Do you really want to delete the following didactic templates?" + +#, fuzzy +msgid "didactic_copy_suc_message" +msgstr "Copied didactic template" + +#, fuzzy +msgid "didactic_deactivated_msg" +msgstr "Deactivated didactic templates" + +#, fuzzy +msgid "didactic_default_type" +msgstr "Default" + +#, fuzzy +msgid "didactic_default_type_info" +msgstr "Uses default permissions for %s" + +#, fuzzy +msgid "didactic_delete_msg" +msgstr "Deleted didactical templates." + +#, fuzzy +msgid "didactic_do_export" +msgstr "Export" + +#, fuzzy +msgid "didactic_edit_tpl" +msgstr "Edit Didactic Template" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +#, fuzzy +msgid "didactic_import_btn" +msgstr "Import Didactic Template" + +#, fuzzy +msgid "didactic_import_failed" +msgstr "Importing the didactical template failed with message: " + +#, fuzzy +msgid "didactic_import_success" +msgstr "Successfully imported didactical template" + +#, fuzzy +msgid "didactic_import_table_title" +msgstr "Import of a didactic template" + +#, fuzzy +msgid "didactic_install_info" +msgstr "General Information" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +#, fuzzy +msgid "didactic_not_changed" +msgstr "The didactic template setting is unchanged." + +#, fuzzy +msgid "didactic_scope" +msgstr "Scope" + +#, fuzzy +msgid "didactic_scope_list_header" +msgstr "Limited to:" + +#, fuzzy +msgid "didactic_selected_tpl_option" +msgstr "Applied didactic template:" + +#, fuzzy +msgid "didactic_template_applied" +msgstr "Applied didactic template." + +#, fuzzy +msgid "didactic_template_update_import" +msgstr "Update Didactic Template" + +#, fuzzy +msgid "didactic_template_update_import_info" +msgstr "Properties will be changed according to this import. Objects which already applied this template will not be changed." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +#, fuzzy +msgid "dtpl_obj_type_info" +msgstr "This didactic template can be applied on this object type." + +#, fuzzy +msgid "effective_form" +msgstr "Template Effective From" + +msgid "grp_closed" +msgstr "Skupina uzavřena" + +msgid "grp_closed_info" +msgstr "Skupina není pro nečleny viditelná." + +#, fuzzy +msgid "more_translations" +msgstr "More Translations" + +#, fuzzy +msgid "sess_closed" +msgstr "Closed Session" + +#, fuzzy +msgid "sess_closed_info" +msgstr "Session is not visible for non-participants." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_sl.po b/components/ILIAS/DidacticTemplate/lang/didactic_sl.po new file mode 100644 index 000000000000..021e7fa93365 --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_sl.po @@ -0,0 +1,161 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: didactic\n" + +msgid "activate_exclusive_template" +msgstr "Privzeto sivo" + +msgid "activate_exclusive_template_info" +msgstr "Privzeta predloga bo siva povsod, kjer je ta didaktična predloga aktivirana." + +msgid "activate_local_didactic_template" +msgstr "Področje veljave" + +msgid "activate_local_didactic_template_info" +msgstr "Uporaba te didaktične predloge bo omejena na delna področja magazina." + +msgid "didactic_activated_msg" +msgstr "Izbrane didaktične predloge so bile aktivirane." + +msgid "didactic_adm_tab" +msgstr "Didaktične predloge" + +msgid "didactic_applicable_for" +msgstr "Uporabno za" + +msgid "didactic_auto_generated" +msgstr "Samodejno ustvarjeno" + +msgid "didactic_available_templates" +msgstr "Razpoložljive didaktične predloge" + +msgid "didactic_back_to_overview" +msgstr "Nazaj na pregled" + +msgid "didactic_cannot_delete_auto_generated" +msgstr "Brisanje samodejno ustvarjenih didaktičnih predlog ni dovoljeno." + +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "Vsaj ena izmed izbranih didaktičnih predlog je ustvarjena samodejno in je zato ni mogoče izbrisati." + +msgid "didactic_confirm_apply_new_template" +msgstr "Ali ste prepričani, da želite uporabiti to didaktično predlogo? Vse prilagoditve pravic bodo prepisane in prilagojene na novo didaktično predlogo." + +msgid "didactic_confirm_delete_msg" +msgstr "Ali ste prepričani, da želite izbrisati naslednje didaktične predloge?" + +msgid "didactic_copy_suc_message" +msgstr "Didaktična predloga je bila kopirana" + +msgid "didactic_deactivated_msg" +msgstr "Izbrane didaktične predloge so bile onemogočene." + +msgid "didactic_default_type" +msgstr "Privzeto" + +msgid "didactic_default_type_info" +msgstr "Uporabljene bodo privzete nastavitve za pravice." + +msgid "didactic_delete_msg" +msgstr "Izbrane didaktične predloge so bile izbrisane." + +msgid "didactic_do_export" +msgstr "Izvozi" + +msgid "didactic_edit_tpl" +msgstr "Uredi didaktično predlogo" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +msgid "didactic_import_btn" +msgstr "Uvozi didaktično predlogo" + +msgid "didactic_import_failed" +msgstr "Didaktične predloge ni bilo mogoče uvoziti:" + +msgid "didactic_import_success" +msgstr "Didaktična predloga je bila uspešno uvožena" + +msgid "didactic_import_table_title" +msgstr "Uvoz didaktične predloge" + +msgid "didactic_install_info" +msgstr "Splošne informacije" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +msgid "didactic_not_changed" +msgstr "Trenutna didaktična predloga ni bila spremenjena." + +msgid "didactic_scope" +msgstr "Področje veljave" + +msgid "didactic_scope_list_header" +msgstr "Omejeno na:" + +msgid "didactic_selected_tpl_option" +msgstr "Uporabljena didaktična predloga:" + +msgid "didactic_template_applied" +msgstr "Didaktična predloga je bila uporabljena." + +msgid "didactic_template_update_import" +msgstr "Posodobitev didaktičnih predlog" + +msgid "didactic_template_update_import_info" +msgstr "Vse lastnosti bodo prilagojene na ta uvoz. Objekti, pri katerih je že bila uporabljena ta predloga, ne bodo spremenjeni." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +msgid "dtpl_obj_type_info" +msgstr "Določite, za katere tipe objektov se lahko uporablja ta didaktična predloga." + +msgid "effective_form" +msgstr "Predloga velja od" + +msgid "grp_closed" +msgstr "Zaprta skupina" + +msgid "grp_closed_info" +msgstr "Skupina ni vidna nečlanom." + +msgid "more_translations" +msgstr "Nadaljnji prevodi" + +msgid "sess_closed" +msgstr "Zaprta seja" + +msgid "sess_closed_info" +msgstr "Seja ni vidna neudeležencem." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_sq.po b/components/ILIAS/DidacticTemplate/lang/didactic_sq.po new file mode 100644 index 000000000000..3b56af96b21c --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_sq.po @@ -0,0 +1,201 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: didactic\n" + +#, fuzzy +msgid "activate_exclusive_template" +msgstr "Grey Out Default" + +#, fuzzy +msgid "activate_exclusive_template_info" +msgstr "The standard template won't be available wherever this template is active." + +#, fuzzy +msgid "activate_local_didactic_template" +msgstr "Scope of Application" + +#, fuzzy +msgid "activate_local_didactic_template_info" +msgstr "Usage of this didactical template will be limited to these sub-areas." + +#, fuzzy +msgid "didactic_activated_msg" +msgstr "Activated didactic templates" + +#, fuzzy +msgid "didactic_adm_tab" +msgstr "Didactic" + +#, fuzzy +msgid "didactic_applicable_for" +msgstr "Applicalble for" + +#, fuzzy +msgid "didactic_auto_generated" +msgstr "Automatic Generated" + +#, fuzzy +msgid "didactic_available_templates" +msgstr "Available Didactic Templates" + +#, fuzzy +msgid "didactic_back_to_overview" +msgstr "Back to Overview" + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated" +msgstr "It is not allowed to delete automatic generated didactic templates." + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "At least one of the selected didactic templates is automatic generated and cannot be deleted." + +#, fuzzy +msgid "didactic_confirm_apply_new_template" +msgstr "Do you really want to apply the chosen didactic template? All current permission settings will get lost!" + +#, fuzzy +msgid "didactic_confirm_delete_msg" +msgstr "Do you really want to delete the following didactic templates?" + +#, fuzzy +msgid "didactic_copy_suc_message" +msgstr "Copied didactic template" + +#, fuzzy +msgid "didactic_deactivated_msg" +msgstr "Deactivated didactic templates" + +#, fuzzy +msgid "didactic_default_type" +msgstr "Default" + +#, fuzzy +msgid "didactic_default_type_info" +msgstr "Uses default permissions for %s" + +#, fuzzy +msgid "didactic_delete_msg" +msgstr "Deleted didactical templates." + +#, fuzzy +msgid "didactic_do_export" +msgstr "Export" + +#, fuzzy +msgid "didactic_edit_tpl" +msgstr "Edit Didactic Template" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +#, fuzzy +msgid "didactic_import_btn" +msgstr "Import Didactic Template" + +#, fuzzy +msgid "didactic_import_failed" +msgstr "Importing the didactical template failed with message: " + +#, fuzzy +msgid "didactic_import_success" +msgstr "Successfully imported didactical template" + +#, fuzzy +msgid "didactic_import_table_title" +msgstr "Import of a didactic template" + +#, fuzzy +msgid "didactic_install_info" +msgstr "General Information" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +#, fuzzy +msgid "didactic_not_changed" +msgstr "The didactic template setting is unchanged." + +#, fuzzy +msgid "didactic_scope" +msgstr "Scope" + +#, fuzzy +msgid "didactic_scope_list_header" +msgstr "Limited to:" + +#, fuzzy +msgid "didactic_selected_tpl_option" +msgstr "Applied didactic template:" + +#, fuzzy +msgid "didactic_template_applied" +msgstr "Applied didactic template." + +#, fuzzy +msgid "didactic_template_update_import" +msgstr "Update Didactic Template" + +#, fuzzy +msgid "didactic_template_update_import_info" +msgstr "Properties will be changed according to this import. Objects which already applied this template will not be changed." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +#, fuzzy +msgid "dtpl_obj_type_info" +msgstr "This didactic template can be applied on this object type." + +#, fuzzy +msgid "effective_form" +msgstr "Template Effective From" + +#, fuzzy +msgid "grp_closed" +msgstr "Closed Group" + +#, fuzzy +msgid "grp_closed_info" +msgstr "Group is not visible for non-members." + +#, fuzzy +msgid "more_translations" +msgstr "More Translations" + +#, fuzzy +msgid "sess_closed" +msgstr "Closed Session" + +#, fuzzy +msgid "sess_closed_info" +msgstr "Session is not visible for non-participants." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_sr.po b/components/ILIAS/DidacticTemplate/lang/didactic_sr.po new file mode 100644 index 000000000000..bca4a3d6461a --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_sr.po @@ -0,0 +1,201 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: didactic\n" + +#, fuzzy +msgid "activate_exclusive_template" +msgstr "Grey Out Default" + +#, fuzzy +msgid "activate_exclusive_template_info" +msgstr "The standard template won't be available wherever this template is active." + +#, fuzzy +msgid "activate_local_didactic_template" +msgstr "Scope of Application" + +#, fuzzy +msgid "activate_local_didactic_template_info" +msgstr "Usage of this didactical template will be limited to these sub-areas." + +#, fuzzy +msgid "didactic_activated_msg" +msgstr "Activated didactic templates" + +#, fuzzy +msgid "didactic_adm_tab" +msgstr "Didactic" + +#, fuzzy +msgid "didactic_applicable_for" +msgstr "Applicalble for" + +#, fuzzy +msgid "didactic_auto_generated" +msgstr "Automatic Generated" + +#, fuzzy +msgid "didactic_available_templates" +msgstr "Available Didactic Templates" + +#, fuzzy +msgid "didactic_back_to_overview" +msgstr "Back to Overview" + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated" +msgstr "It is not allowed to delete automatic generated didactic templates." + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "At least one of the selected didactic templates is automatic generated and cannot be deleted." + +#, fuzzy +msgid "didactic_confirm_apply_new_template" +msgstr "Do you really want to apply the chosen didactic template? All current permission settings will get lost!" + +#, fuzzy +msgid "didactic_confirm_delete_msg" +msgstr "Do you really want to delete the following didactic templates?" + +#, fuzzy +msgid "didactic_copy_suc_message" +msgstr "Copied didactic template" + +#, fuzzy +msgid "didactic_deactivated_msg" +msgstr "Deactivated didactic templates" + +#, fuzzy +msgid "didactic_default_type" +msgstr "Default" + +#, fuzzy +msgid "didactic_default_type_info" +msgstr "Uses default permissions for %s" + +#, fuzzy +msgid "didactic_delete_msg" +msgstr "Deleted didactical templates." + +#, fuzzy +msgid "didactic_do_export" +msgstr "Export" + +#, fuzzy +msgid "didactic_edit_tpl" +msgstr "Edit Didactic Template" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +#, fuzzy +msgid "didactic_import_btn" +msgstr "Import Didactic Template" + +#, fuzzy +msgid "didactic_import_failed" +msgstr "Importing the didactical template failed with message: " + +#, fuzzy +msgid "didactic_import_success" +msgstr "Successfully imported didactical template" + +#, fuzzy +msgid "didactic_import_table_title" +msgstr "Import of a didactic template" + +#, fuzzy +msgid "didactic_install_info" +msgstr "General Information" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +#, fuzzy +msgid "didactic_not_changed" +msgstr "The didactic template setting is unchanged." + +#, fuzzy +msgid "didactic_scope" +msgstr "Scope" + +#, fuzzy +msgid "didactic_scope_list_header" +msgstr "Limited to:" + +#, fuzzy +msgid "didactic_selected_tpl_option" +msgstr "Applied didactic template:" + +#, fuzzy +msgid "didactic_template_applied" +msgstr "Applied didactic template." + +#, fuzzy +msgid "didactic_template_update_import" +msgstr "Update Didactic Template" + +#, fuzzy +msgid "didactic_template_update_import_info" +msgstr "Properties will be changed according to this import. Objects which already applied this template will not be changed." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +#, fuzzy +msgid "dtpl_obj_type_info" +msgstr "This didactic template can be applied on this object type." + +#, fuzzy +msgid "effective_form" +msgstr "Template Effective From" + +#, fuzzy +msgid "grp_closed" +msgstr "Closed Group" + +#, fuzzy +msgid "grp_closed_info" +msgstr "Group is not visible for non-members." + +#, fuzzy +msgid "more_translations" +msgstr "More Translations" + +#, fuzzy +msgid "sess_closed" +msgstr "Closed Session" + +#, fuzzy +msgid "sess_closed_info" +msgstr "Session is not visible for non-participants." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_sv.po b/components/ILIAS/DidacticTemplate/lang/didactic_sv.po new file mode 100644 index 000000000000..de7404d73d8d --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_sv.po @@ -0,0 +1,154 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: didactic\n" + +msgid "activate_exclusive_template" +msgstr "Grå ut standard" + +msgid "activate_exclusive_template_info" +msgstr "Standardmallen är gråmarkerad när denna didaktiska mall är aktiv." + +msgid "activate_local_didactic_template" +msgstr "Validitetsintervall" + +msgid "activate_local_didactic_template_info" +msgstr "Användningen av de didaktiska mallarna kommer att begränsas till underavsnitt i tidningen." + +msgid "didactic_activated_msg" +msgstr "De valda didaktiska mallarna har aktiverats." + +msgid "didactic_adm_tab" +msgstr "Didaktiska mallar" + +msgid "didactic_applicable_for" +msgstr "Tillämplig på" + +msgid "didactic_auto_generated" +msgstr "Automatiskt genererad" + +msgid "didactic_available_templates" +msgstr "Tillgängliga didaktiska mallar" + +msgid "didactic_back_to_overview" +msgstr "Tillbaka till översikten" + +msgid "didactic_cannot_delete_auto_generated" +msgstr "Att radera automatiskt genererade didaktiska mallar är inte tillåtet." + +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "Minst en av de valda didaktiska mallarna är automatiskt genererad och kan därför inte tas bort." + +msgid "didactic_confirm_apply_new_template" +msgstr "Är du säker på att du vill använda den här didaktiska mallen? Alla rättighetsjusteringar kommer att skrivas över och anpassas till den nya didaktiska mallen." + +msgid "didactic_confirm_delete_msg" +msgstr "Är du säker på att följande didaktiska mallar bör tas bort?" + +msgid "didactic_copy_suc_message" +msgstr "Den didaktiska mallen kopierades" + +msgid "didactic_deactivated_msg" +msgstr "De valda didaktiska mallarna har avaktiverats." + +msgid "didactic_default_type" +msgstr "Standard" + +msgid "didactic_default_type_info" +msgstr "Rättsspecifikationerna för respektive roll tillämpas." + +msgid "didactic_delete_msg" +msgstr "De valda didaktiska mallarna har tagits bort." + +msgid "didactic_do_export" +msgstr "Export" + +msgid "didactic_edit_tpl" +msgstr "Redigera didaktisk mall" + +msgid "didactic_filter_with_icon" +msgstr "med symbol" + +msgid "didactic_filter_without_icon" +msgstr "Utan symbol" + +msgid "didactic_global" +msgstr "Global" + +msgid "didactic_icon" +msgstr "Icon" + +msgid "didactic_icon_error" +msgstr "Ikoner kan endast användas för containerobjekt." + +msgid "didactic_icon_info" +msgstr "Ikonen visas för alla objekt som tillämpar dessa mallar. \"Anpassade ikoner\" för objekten skriver över ikonen för mallen. Ikoner kan endast konfigureras för behållarobjekt (t.ex. kurs och kategorier)." + +msgid "didactic_import_btn" +msgstr "Importera didaktisk mall" + +msgid "didactic_import_failed" +msgstr "Den didaktiska mallen kunde inte importeras" + +msgid "didactic_import_success" +msgstr "Den didaktiska mallen importerades framgångsrikt" + +msgid "didactic_import_table_title" +msgstr "Import av en didaktisk mall" + +msgid "didactic_install_info" +msgstr "Allmän information" + +msgid "didactic_local" +msgstr "Lokalt" + +msgid "didactic_not_changed" +msgstr "Den aktiva didaktiska mallen ändrades inte." + +msgid "didactic_scope" +msgstr "Validitetsintervall" + +msgid "didactic_scope_list_header" +msgstr "Begränsad till" + +msgid "didactic_selected_tpl_option" +msgstr "Tillämpad didaktisk mall" + +msgid "didactic_template_applied" +msgstr "Den didaktiska mallen tillämpades." + +msgid "didactic_template_update_import" +msgstr "Uppdatering av didaktiska mallar" + +msgid "didactic_template_update_import_info" +msgstr "Alla egenskaper justeras enligt importfilen. Objekt som redan använder inställningarna i denna mall ändras inte." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +msgid "dtpl_obj_type_info" +msgstr "Anger den objekttyp som denna didaktiska mall kan tillämpas på." + +msgid "effective_form" +msgstr "Template effektiv från" + +msgid "grp_closed" +msgstr "Sluten grupp" + +msgid "grp_closed_info" +msgstr "Gruppen är osynlig för icke-medlemmar." + +msgid "more_translations" +msgstr "Andra översättningar" + +msgid "sess_closed" +msgstr "Avslutad session" + +msgid "sess_closed_info" +msgstr "Sessionen är osynlig för icke-deltagare." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_tr.po b/components/ILIAS/DidacticTemplate/lang/didactic_tr.po new file mode 100644 index 000000000000..1f24525a38ba --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_tr.po @@ -0,0 +1,178 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: didactic\n" + +#, fuzzy +msgid "activate_exclusive_template" +msgstr "Grey Out Default" + +#, fuzzy +msgid "activate_exclusive_template_info" +msgstr "The standard template won't be available wherever this template is active." + +#, fuzzy +msgid "activate_local_didactic_template" +msgstr "Scope of Application" + +#, fuzzy +msgid "activate_local_didactic_template_info" +msgstr "Usage of this didactical template will be limited to these sub-areas." + +msgid "didactic_activated_msg" +msgstr "Aktif didaktik şablonları" + +msgid "didactic_adm_tab" +msgstr "Didaktik Şablonları" + +msgid "didactic_applicable_for" +msgstr "Uygulanacak" + +#, fuzzy +msgid "didactic_auto_generated" +msgstr "Automatic Generated" + +msgid "didactic_available_templates" +msgstr "Mevcut Didaktik Şablonları" + +msgid "didactic_back_to_overview" +msgstr "Genel Bakış Geri" + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated" +msgstr "It is not allowed to delete automatic generated didactic templates." + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "At least one of the selected didactic templates is automatic generated and cannot be deleted." + +msgid "didactic_confirm_apply_new_template" +msgstr "gerçekten seçilmiş didaktik şablonu uygulamak istiyor musunuz? Tüm geçerli izin ayarları kaybolacaktır!" + +msgid "didactic_confirm_delete_msg" +msgstr "gerçekten şu didaktik şablonları silmek istediğinizden emin misiniz?" + +msgid "didactic_copy_suc_message" +msgstr "Kopyalanan didaktik şablonu" + +msgid "didactic_deactivated_msg" +msgstr "deaktive didaktik şablonları" + +#, fuzzy +msgid "didactic_default_type" +msgstr "Default" + +msgid "didactic_default_type_info" +msgstr "%s için varsayılan izinleri kullanır" + +msgid "didactic_delete_msg" +msgstr "didaktik şablonları Silindi." + +msgid "didactic_do_export" +msgstr "Dışa Aktar" + +msgid "didactic_edit_tpl" +msgstr "Edit Didaktik Şablonu" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +msgid "didactic_import_btn" +msgstr "Didaktik Şablon İçe Aktar" + +msgid "didactic_import_failed" +msgstr "İletisiyle başarısız oldu didaktik şablonu alınıyor :" + +msgid "didactic_import_success" +msgstr "Başarıyla ithal didaktik şablonu" + +msgid "didactic_import_table_title" +msgstr "Didaktik şablonun içe aktarımı" + +msgid "didactic_install_info" +msgstr "Genel Bilgi" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +msgid "didactic_not_changed" +msgstr "didaktik şablon ayarı değişmez." + +#, fuzzy +msgid "didactic_scope" +msgstr "Scope" + +#, fuzzy +msgid "didactic_scope_list_header" +msgstr "Limited to:" + +msgid "didactic_selected_tpl_option" +msgstr "didaktik şablonu Uygulamalı:" + +msgid "didactic_template_applied" +msgstr "didaktik şablonu uygulanır." + +#, fuzzy +msgid "didactic_template_update_import" +msgstr "Update Didactic Template" + +#, fuzzy +msgid "didactic_template_update_import_info" +msgstr "Properties will be changed according to this import. Objects which already applied this template will not be changed." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +#, fuzzy +msgid "dtpl_obj_type_info" +msgstr "This didactic template can be applied on this object type." + +#, fuzzy +msgid "effective_form" +msgstr "Template Effective From" + +msgid "grp_closed" +msgstr "Kapalı Grup" + +msgid "grp_closed_info" +msgstr "Grup üye olmayanlar için görünür değil." + +#, fuzzy +msgid "more_translations" +msgstr "More Translations" + +#, fuzzy +msgid "sess_closed" +msgstr "Closed Session" + +#, fuzzy +msgid "sess_closed_info" +msgstr "Session is not visible for non-participants." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_uk.po b/components/ILIAS/DidacticTemplate/lang/didactic_uk.po new file mode 100644 index 000000000000..0b709b87b2ed --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_uk.po @@ -0,0 +1,201 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: didactic\n" + +#, fuzzy +msgid "activate_exclusive_template" +msgstr "Grey Out Default" + +#, fuzzy +msgid "activate_exclusive_template_info" +msgstr "The standard template won't be available wherever this template is active." + +#, fuzzy +msgid "activate_local_didactic_template" +msgstr "Scope of Application" + +#, fuzzy +msgid "activate_local_didactic_template_info" +msgstr "Usage of this didactical template will be limited to these sub-areas." + +#, fuzzy +msgid "didactic_activated_msg" +msgstr "Activated didactic templates" + +#, fuzzy +msgid "didactic_adm_tab" +msgstr "Didactic" + +#, fuzzy +msgid "didactic_applicable_for" +msgstr "Applicalble for" + +#, fuzzy +msgid "didactic_auto_generated" +msgstr "Automatic Generated" + +#, fuzzy +msgid "didactic_available_templates" +msgstr "Available Didactic Templates" + +#, fuzzy +msgid "didactic_back_to_overview" +msgstr "Back to Overview" + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated" +msgstr "It is not allowed to delete automatic generated didactic templates." + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "At least one of the selected didactic templates is automatic generated and cannot be deleted." + +#, fuzzy +msgid "didactic_confirm_apply_new_template" +msgstr "Do you really want to apply the chosen didactic template? All current permission settings will get lost!" + +#, fuzzy +msgid "didactic_confirm_delete_msg" +msgstr "Do you really want to delete the following didactic templates?" + +#, fuzzy +msgid "didactic_copy_suc_message" +msgstr "Copied didactic template" + +#, fuzzy +msgid "didactic_deactivated_msg" +msgstr "Deactivated didactic templates" + +#, fuzzy +msgid "didactic_default_type" +msgstr "Default" + +#, fuzzy +msgid "didactic_default_type_info" +msgstr "Uses default permissions for %s" + +#, fuzzy +msgid "didactic_delete_msg" +msgstr "Deleted didactical templates." + +#, fuzzy +msgid "didactic_do_export" +msgstr "Export" + +#, fuzzy +msgid "didactic_edit_tpl" +msgstr "Edit Didactic Template" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +#, fuzzy +msgid "didactic_import_btn" +msgstr "Import Didactic Template" + +#, fuzzy +msgid "didactic_import_failed" +msgstr "Importing the didactical template failed with message: " + +#, fuzzy +msgid "didactic_import_success" +msgstr "Successfully imported didactical template" + +#, fuzzy +msgid "didactic_import_table_title" +msgstr "Import of a didactic template" + +#, fuzzy +msgid "didactic_install_info" +msgstr "General Information" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +#, fuzzy +msgid "didactic_not_changed" +msgstr "The didactic template setting is unchanged." + +#, fuzzy +msgid "didactic_scope" +msgstr "Scope" + +#, fuzzy +msgid "didactic_scope_list_header" +msgstr "Limited to:" + +#, fuzzy +msgid "didactic_selected_tpl_option" +msgstr "Applied didactic template:" + +#, fuzzy +msgid "didactic_template_applied" +msgstr "Applied didactic template." + +#, fuzzy +msgid "didactic_template_update_import" +msgstr "Update Didactic Template" + +#, fuzzy +msgid "didactic_template_update_import_info" +msgstr "Properties will be changed according to this import. Objects which already applied this template will not be changed." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +#, fuzzy +msgid "dtpl_obj_type_info" +msgstr "This didactic template can be applied on this object type." + +#, fuzzy +msgid "effective_form" +msgstr "Template Effective From" + +#, fuzzy +msgid "grp_closed" +msgstr "Closed Group" + +#, fuzzy +msgid "grp_closed_info" +msgstr "Group is not visible for non-members." + +#, fuzzy +msgid "more_translations" +msgstr "More Translations" + +#, fuzzy +msgid "sess_closed" +msgstr "Closed Session" + +#, fuzzy +msgid "sess_closed_info" +msgstr "Session is not visible for non-participants." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_vi.po b/components/ILIAS/DidacticTemplate/lang/didactic_vi.po new file mode 100644 index 000000000000..7d582f0d9b40 --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_vi.po @@ -0,0 +1,201 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: didactic\n" + +#, fuzzy +msgid "activate_exclusive_template" +msgstr "Grey Out Default" + +#, fuzzy +msgid "activate_exclusive_template_info" +msgstr "The standard template won't be available wherever this template is active." + +#, fuzzy +msgid "activate_local_didactic_template" +msgstr "Scope of Application" + +#, fuzzy +msgid "activate_local_didactic_template_info" +msgstr "Usage of this didactical template will be limited to these sub-areas." + +#, fuzzy +msgid "didactic_activated_msg" +msgstr "Activated didactic templates" + +#, fuzzy +msgid "didactic_adm_tab" +msgstr "Didactic" + +#, fuzzy +msgid "didactic_applicable_for" +msgstr "Applicalble for" + +#, fuzzy +msgid "didactic_auto_generated" +msgstr "Automatic Generated" + +#, fuzzy +msgid "didactic_available_templates" +msgstr "Available Didactic Templates" + +#, fuzzy +msgid "didactic_back_to_overview" +msgstr "Back to Overview" + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated" +msgstr "It is not allowed to delete automatic generated didactic templates." + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "At least one of the selected didactic templates is automatic generated and cannot be deleted." + +#, fuzzy +msgid "didactic_confirm_apply_new_template" +msgstr "Do you really want to apply the chosen didactic template? All current permission settings will get lost!" + +#, fuzzy +msgid "didactic_confirm_delete_msg" +msgstr "Do you really want to delete the following didactic templates?" + +#, fuzzy +msgid "didactic_copy_suc_message" +msgstr "Copied didactic template" + +#, fuzzy +msgid "didactic_deactivated_msg" +msgstr "Deactivated didactic templates" + +#, fuzzy +msgid "didactic_default_type" +msgstr "Default" + +#, fuzzy +msgid "didactic_default_type_info" +msgstr "Uses default permissions for %s" + +#, fuzzy +msgid "didactic_delete_msg" +msgstr "Deleted didactical templates." + +#, fuzzy +msgid "didactic_do_export" +msgstr "Export" + +#, fuzzy +msgid "didactic_edit_tpl" +msgstr "Edit Didactic Template" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +#, fuzzy +msgid "didactic_import_btn" +msgstr "Import Didactic Template" + +#, fuzzy +msgid "didactic_import_failed" +msgstr "Importing the didactical template failed with message: " + +#, fuzzy +msgid "didactic_import_success" +msgstr "Successfully imported didactical template" + +#, fuzzy +msgid "didactic_import_table_title" +msgstr "Import of a didactic template" + +#, fuzzy +msgid "didactic_install_info" +msgstr "General Information" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +#, fuzzy +msgid "didactic_not_changed" +msgstr "The didactic template setting is unchanged." + +#, fuzzy +msgid "didactic_scope" +msgstr "Scope" + +#, fuzzy +msgid "didactic_scope_list_header" +msgstr "Limited to:" + +#, fuzzy +msgid "didactic_selected_tpl_option" +msgstr "Applied didactic template:" + +#, fuzzy +msgid "didactic_template_applied" +msgstr "Applied didactic template." + +#, fuzzy +msgid "didactic_template_update_import" +msgstr "Update Didactic Template" + +#, fuzzy +msgid "didactic_template_update_import_info" +msgstr "Properties will be changed according to this import. Objects which already applied this template will not be changed." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +#, fuzzy +msgid "dtpl_obj_type_info" +msgstr "This didactic template can be applied on this object type." + +#, fuzzy +msgid "effective_form" +msgstr "Template Effective From" + +#, fuzzy +msgid "grp_closed" +msgstr "Closed Group" + +#, fuzzy +msgid "grp_closed_info" +msgstr "Group is not visible for non-members." + +#, fuzzy +msgid "more_translations" +msgstr "More Translations" + +#, fuzzy +msgid "sess_closed" +msgstr "Closed Session" + +#, fuzzy +msgid "sess_closed_info" +msgstr "Session is not visible for non-participants." diff --git a/components/ILIAS/DidacticTemplate/lang/didactic_zh.po b/components/ILIAS/DidacticTemplate/lang/didactic_zh.po new file mode 100644 index 000000000000..b7dc977b1961 --- /dev/null +++ b/components/ILIAS/DidacticTemplate/lang/didactic_zh.po @@ -0,0 +1,178 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: didactic\n" + +#, fuzzy +msgid "activate_exclusive_template" +msgstr "Grey Out Default" + +#, fuzzy +msgid "activate_exclusive_template_info" +msgstr "The standard template won't be available wherever this template is active." + +#, fuzzy +msgid "activate_local_didactic_template" +msgstr "Scope of Application" + +#, fuzzy +msgid "activate_local_didactic_template_info" +msgstr "Usage of this didactical template will be limited to these sub-areas." + +msgid "didactic_activated_msg" +msgstr "已激活教学法模板" + +msgid "didactic_adm_tab" +msgstr "教学法" + +msgid "didactic_applicable_for" +msgstr "适用于" + +#, fuzzy +msgid "didactic_auto_generated" +msgstr "Automatic Generated" + +msgid "didactic_available_templates" +msgstr "可用的教学法模板" + +msgid "didactic_back_to_overview" +msgstr "回到概述" + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated" +msgstr "It is not allowed to delete automatic generated didactic templates." + +#, fuzzy +msgid "didactic_cannot_delete_auto_generated_confirmation" +msgstr "At least one of the selected didactic templates is automatic generated and cannot be deleted." + +msgid "didactic_confirm_apply_new_template" +msgstr "您真的想应用已选择的教学模板吗?所有当前的权限设置将丢失!" + +msgid "didactic_confirm_delete_msg" +msgstr "您真的要删除以下教学法模板吗?" + +msgid "didactic_copy_suc_message" +msgstr "复制教学法模板" + +msgid "didactic_deactivated_msg" +msgstr "停用教学法模板" + +#, fuzzy +msgid "didactic_default_type" +msgstr "Default" + +msgid "didactic_default_type_info" +msgstr "使用默认权限 %s" + +msgid "didactic_delete_msg" +msgstr "教学法模板已删除。" + +msgid "didactic_do_export" +msgstr "导出" + +msgid "didactic_edit_tpl" +msgstr "编辑教导模板" + +#, fuzzy +msgid "didactic_filter_with_icon" +msgstr "with Icon" + +#, fuzzy +msgid "didactic_filter_without_icon" +msgstr "without Icon" + +#, fuzzy +msgid "didactic_global" +msgstr "Global" + +#, fuzzy +msgid "didactic_icon" +msgstr "Icon" + +#, fuzzy +msgid "didactic_icon_error" +msgstr "Icons cannot be assigned to non-container objects." + +#, fuzzy +msgid "didactic_icon_info" +msgstr "The Icon is shown for all objects, which use this object template. \"Custom Icons\" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects." + +msgid "didactic_import_btn" +msgstr "导入教学法模板" + +msgid "didactic_import_failed" +msgstr "导入教学法模板失败的消息:" + +msgid "didactic_import_success" +msgstr "成功的导入了教学法模板" + +msgid "didactic_import_table_title" +msgstr "一个教学法模板的导入" + +msgid "didactic_install_info" +msgstr "常规信息" + +#, fuzzy +msgid "didactic_local" +msgstr "Local" + +msgid "didactic_not_changed" +msgstr "教学模板设置未更改。" + +#, fuzzy +msgid "didactic_scope" +msgstr "Scope" + +#, fuzzy +msgid "didactic_scope_list_header" +msgstr "Limited to:" + +msgid "didactic_selected_tpl_option" +msgstr "已应用教学模板:" + +msgid "didactic_template_applied" +msgstr "已应用的教学模板。" + +#, fuzzy +msgid "didactic_template_update_import" +msgstr "Update Didactic Template" + +#, fuzzy +msgid "didactic_template_update_import_info" +msgstr "Properties will be changed according to this import. Objects which already applied this template will not be changed." + +#, fuzzy +msgid "didactic_translation_add_languages" +msgstr "Add Languages" + +#, fuzzy +msgid "dtpl_obj_type_info" +msgstr "This didactic template can be applied on this object type." + +#, fuzzy +msgid "effective_form" +msgstr "Template Effective From" + +msgid "grp_closed" +msgstr "组已关闭" + +msgid "grp_closed_info" +msgstr "对非成员,组不可见。" + +#, fuzzy +msgid "more_translations" +msgstr "More Translations" + +#, fuzzy +msgid "sess_closed" +msgstr "Closed Session" + +#, fuzzy +msgid "sess_closed_info" +msgstr "Session is not visible for non-participants." diff --git a/components/ILIAS/Exercise/Assignment/Types/GUI/classes/class.ilExAssTypePortfolioGUI.php b/components/ILIAS/Exercise/Assignment/Types/GUI/classes/class.ilExAssTypePortfolioGUI.php index 4e244bcc508d..b703a317907f 100755 --- a/components/ILIAS/Exercise/Assignment/Types/GUI/classes/class.ilExAssTypePortfolioGUI.php +++ b/components/ILIAS/Exercise/Assignment/Types/GUI/classes/class.ilExAssTypePortfolioGUI.php @@ -43,8 +43,8 @@ public function addEditFormCustomProperties(ilPropertyFormGUI $form): void $rd_template = new ilRadioGroupInputGUI($lng->txt("exc_template"), "template"); $rd_template->setRequired(true); - $radio_no_template = new ilRadioOption($lng->txt("exc_without_template"), "0", $lng->txt("exc_without_template_info", "without_template_info")); - $radio_with_template = new ilRadioOption($lng->txt("exc_with_template"), "1", $lng->txt("exc_with_template_info", "with_template_info")); + $radio_no_template = new ilRadioOption($lng->txt("exc_without_template"), "0", $lng->txt("exc_without_template_info")); + $radio_with_template = new ilRadioOption($lng->txt("exc_with_template"), "1", $lng->txt("exc_with_template_info")); $repo = new ilRepositorySelector2InputGUI($lng->txt("exc_portfolio_template"), "template_id"); $repo->setRequired(true); diff --git a/components/ILIAS/Exercise/Exercise.php b/components/ILIAS/Exercise/Exercise.php index 9bd4055845e8..823c114c8669 100644 --- a/components/ILIAS/Exercise/Exercise.php +++ b/components/ILIAS/Exercise/Exercise.php @@ -20,6 +20,9 @@ namespace ILIAS; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; + class Exercise implements Component\Component { public function init( @@ -48,5 +51,9 @@ public function init( new \ILIAS\Exercise\PermanentLink\StaticURLHandler(); $contribute[Component\Resource\PublicAsset::class] = fn() => new Component\Resource\ComponentJS($this, "exc-auto-saver.js"); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'exercise' + ); } } diff --git a/components/ILIAS/Exercise/Submission/class.ilExSubmissionObjectGUI.php b/components/ILIAS/Exercise/Submission/class.ilExSubmissionObjectGUI.php index b6ebd64873ef..607a434e0d4e 100755 --- a/components/ILIAS/Exercise/Submission/class.ilExSubmissionObjectGUI.php +++ b/components/ILIAS/Exercise/Submission/class.ilExSubmissionObjectGUI.php @@ -627,7 +627,7 @@ protected function askUnlinkPortfolioObject(): void $conf = new ilConfirmationGUI(); $conf->setFormAction($this->ctrl->getFormAction($this, "unlinkPortfolio")); - $conf->setHeaderText($this->lng->txt("exc_sure_unlink_portfolio", "sure_unlink_portfolio")); + $conf->setHeaderText($this->lng->txt("exc_sure_unlink_portfolio")); $conf->setConfirm($this->lng->txt("confirm"), "unlinkPortfolio"); $conf->setCancel($this->lng->txt("cancel"), "returnToParent"); diff --git a/components/ILIAS/Exercise/lang/exercise.pot b/components/ILIAS/Exercise/lang/exercise.pot new file mode 100644 index 000000000000..e95e99a96e11 --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise.pot @@ -0,0 +1,42 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: exercise\n" + +msgid "exc_admin_settings" +msgstr "" + +msgid "exc_comment" +msgstr "" + +msgid "exc_comment_for_learner" +msgstr "" + +msgid "exc_failed" +msgstr "" + +msgid "exc_feedback_from_tutor" +msgstr "" + +msgid "exc_grading" +msgstr "" + +msgid "exc_mark" +msgstr "" + +msgid "exc_notgraded" +msgstr "" + +msgid "exc_passed" +msgstr "" + +msgid "exc_send_mail" +msgstr "" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "" + +msgid "exc_your_submission" +msgstr "" diff --git a/components/ILIAS/Exercise/lang/exercise_ar.po b/components/ILIAS/Exercise/lang/exercise_ar.po new file mode 100644 index 000000000000..ccfca4ebd0ff --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_ar.po @@ -0,0 +1,46 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: exercise\n" + +#, fuzzy +msgid "exc_admin_settings" +msgstr "Exercise Administration" + +msgid "exc_comment" +msgstr "Comment" + +msgid "exc_comment_for_learner" +msgstr "Comment for Learner" + +msgid "exc_failed" +msgstr "Failed" + +msgid "exc_feedback_from_tutor" +msgstr "Feedback from Tutor" + +msgid "exc_grading" +msgstr "Grading" + +msgid "exc_mark" +msgstr "Mark" + +msgid "exc_notgraded" +msgstr "Not Graded" + +msgid "exc_passed" +msgstr "Passed" + +msgid "exc_send_mail" +msgstr "Send Mail" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "Start time should be before deadline." + +msgid "exc_your_submission" +msgstr "Your Submission" diff --git a/components/ILIAS/Exercise/lang/exercise_bg.po b/components/ILIAS/Exercise/lang/exercise_bg.po new file mode 100644 index 000000000000..f9edf419cdd2 --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_bg.po @@ -0,0 +1,57 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exercise\n" + +#, fuzzy +msgid "exc_admin_settings" +msgstr "Exercise Administration" + +#, fuzzy +msgid "exc_comment" +msgstr "Comment" + +#, fuzzy +msgid "exc_comment_for_learner" +msgstr "Comment for Learner" + +#, fuzzy +msgid "exc_failed" +msgstr "Failed" + +#, fuzzy +msgid "exc_feedback_from_tutor" +msgstr "Feedback from Tutor" + +#, fuzzy +msgid "exc_grading" +msgstr "Grading" + +#, fuzzy +msgid "exc_mark" +msgstr "Mark" + +#, fuzzy +msgid "exc_notgraded" +msgstr "Not Graded" + +#, fuzzy +msgid "exc_passed" +msgstr "Passed" + +#, fuzzy +msgid "exc_send_mail" +msgstr "Send Mail" + +#, fuzzy +msgid "exc_start_date_should_be_before_end_date" +msgstr "Start time should be before deadline." + +#, fuzzy +msgid "exc_your_submission" +msgstr "Your Submission" diff --git a/components/ILIAS/Exercise/lang/exercise_cs.po b/components/ILIAS/Exercise/lang/exercise_cs.po new file mode 100644 index 000000000000..5efb2c1a91ad --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_cs.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: exercise\n" + +msgid "exc_admin_settings" +msgstr "Správa cvičení" + +msgid "exc_comment" +msgstr "Komentář" + +msgid "exc_comment_for_learner" +msgstr "Komentář pro studenta" + +msgid "exc_failed" +msgstr "Neprospěl(a)" + +msgid "exc_feedback_from_tutor" +msgstr "Odezva od lektora" + +msgid "exc_grading" +msgstr "Hodnocení" + +msgid "exc_mark" +msgstr "Známka" + +msgid "exc_notgraded" +msgstr "Nehodnoceno" + +msgid "exc_passed" +msgstr "Prospěl(a)" + +msgid "exc_send_mail" +msgstr "Poslat email" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "Čas spuštění musí být před časem ukončení." + +msgid "exc_your_submission" +msgstr "Vaše odevzdané úlohy" diff --git a/components/ILIAS/Exercise/lang/exercise_da.po b/components/ILIAS/Exercise/lang/exercise_da.po new file mode 100644 index 000000000000..0ea9163f887c --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_da.po @@ -0,0 +1,46 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exercise\n" + +#, fuzzy +msgid "exc_admin_settings" +msgstr "Exercise Administration" + +msgid "exc_comment" +msgstr "Kommentar" + +msgid "exc_comment_for_learner" +msgstr "Kommentar til aflevering" + +msgid "exc_failed" +msgstr "Ikke bestået" + +msgid "exc_feedback_from_tutor" +msgstr "Feedback fra hjælpeinstruktør" + +msgid "exc_grading" +msgstr "Evaluering" + +msgid "exc_mark" +msgstr "Karakter" + +msgid "exc_notgraded" +msgstr "Ikke vurderet" + +msgid "exc_passed" +msgstr "Bestået" + +msgid "exc_send_mail" +msgstr "Send mail" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "Starttidspunktet skal være før deadline." + +msgid "exc_your_submission" +msgstr "Aflevering af opgave" diff --git a/components/ILIAS/Exercise/lang/exercise_de.po b/components/ILIAS/Exercise/lang/exercise_de.po new file mode 100644 index 000000000000..b87bb5244e61 --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_de.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exercise\n" + +msgid "exc_admin_settings" +msgstr "Übungs-Administration" + +msgid "exc_comment" +msgstr "Rückmeldung" + +msgid "exc_comment_for_learner" +msgstr "Rückmeldung zur Abgabe" + +msgid "exc_failed" +msgstr "Nicht bestanden" + +msgid "exc_feedback_from_tutor" +msgstr "Bewertung" + +msgid "exc_grading" +msgstr "Bewertung" + +msgid "exc_mark" +msgstr "Note" + +msgid "exc_notgraded" +msgstr "Nicht bewertet" + +msgid "exc_passed" +msgstr "Bestanden" + +msgid "exc_send_mail" +msgstr "Als Mail versenden" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "Die Startzeit sollte vor dem Abgabetermin liegen." + +msgid "exc_your_submission" +msgstr "Ihre Einreichung" diff --git a/components/ILIAS/Exercise/lang/exercise_el.po b/components/ILIAS/Exercise/lang/exercise_el.po new file mode 100644 index 000000000000..62ff5c431db8 --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_el.po @@ -0,0 +1,47 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exercise\n" + +#, fuzzy +msgid "exc_admin_settings" +msgstr "Exercise Administration" + +msgid "exc_comment" +msgstr "Σχόλιο" + +msgid "exc_comment_for_learner" +msgstr "Σχόλιο για το μαθητή" + +msgid "exc_failed" +msgstr "Αποτυχία" + +msgid "exc_feedback_from_tutor" +msgstr "Ανατροφοδότηση από τον εισηγητή" + +msgid "exc_grading" +msgstr "Βαθμολογία" + +msgid "exc_mark" +msgstr "Βαθμός" + +msgid "exc_notgraded" +msgstr "Δεν βαθμολογήθηκε" + +msgid "exc_passed" +msgstr "Πέρασε" + +msgid "exc_send_mail" +msgstr "Αποστολή Mail" + +#, fuzzy +msgid "exc_start_date_should_be_before_end_date" +msgstr "Start time should be before deadline." + +msgid "exc_your_submission" +msgstr "Η υποβολή σας" diff --git a/components/ILIAS/Exercise/lang/exercise_en.po b/components/ILIAS/Exercise/lang/exercise_en.po new file mode 100644 index 000000000000..3e50abaac00d --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_en.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exercise\n" + +msgid "exc_admin_settings" +msgstr "Exercise Administration" + +msgid "exc_comment" +msgstr "Evaluation Statement" + +msgid "exc_comment_for_learner" +msgstr "Evaluation Statement" + +msgid "exc_failed" +msgstr "Failed" + +msgid "exc_feedback_from_tutor" +msgstr "Evaluation by Tutor" + +msgid "exc_grading" +msgstr "Grading" + +msgid "exc_mark" +msgstr "Mark" + +msgid "exc_notgraded" +msgstr "Not Graded" + +msgid "exc_passed" +msgstr "Passed" + +msgid "exc_send_mail" +msgstr "Send as Mail" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "Start time should be before deadline." + +msgid "exc_your_submission" +msgstr "Your Submission" diff --git a/components/ILIAS/Exercise/lang/exercise_es.po b/components/ILIAS/Exercise/lang/exercise_es.po new file mode 100644 index 000000000000..d34c244d956b --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_es.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: exercise\n" + +msgid "exc_admin_settings" +msgstr "Administración de ejercicios" + +msgid "exc_comment" +msgstr "Comentario de evaluación" + +msgid "exc_comment_for_learner" +msgstr "Comentario de evaluación" + +msgid "exc_failed" +msgstr "Suspenso" + +msgid "exc_feedback_from_tutor" +msgstr "Evaluación del tutor" + +msgid "exc_grading" +msgstr "Calificación" + +msgid "exc_mark" +msgstr "Nota" + +msgid "exc_notgraded" +msgstr "No calificado" + +msgid "exc_passed" +msgstr "Aprobado" + +msgid "exc_send_mail" +msgstr "Enviar como correo" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "La hora de inicio debe ser anterior a la fecha límite." + +msgid "exc_your_submission" +msgstr "Su entrega" diff --git a/components/ILIAS/Exercise/lang/exercise_et.po b/components/ILIAS/Exercise/lang/exercise_et.po new file mode 100644 index 000000000000..6bbc5321c817 --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_et.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exercise\n" + +msgid "exc_admin_settings" +msgstr "Harjutuse haldus" + +msgid "exc_comment" +msgstr "Kommentaar" + +msgid "exc_comment_for_learner" +msgstr "Kommentaar õppurile" + +msgid "exc_failed" +msgstr "Ebaõnnestunud" + +msgid "exc_feedback_from_tutor" +msgstr "Õppejõu tagasiside" + +msgid "exc_grading" +msgstr "Hindamine" + +msgid "exc_mark" +msgstr "Hinne" + +msgid "exc_notgraded" +msgstr "Pole hinnatud" + +msgid "exc_passed" +msgstr "Läbitud" + +msgid "exc_send_mail" +msgstr "Saada kiri" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "Algusaeg peab olema enne tähtaega." + +msgid "exc_your_submission" +msgstr "Koduse töö vastus" diff --git a/components/ILIAS/Exercise/lang/exercise_fa.po b/components/ILIAS/Exercise/lang/exercise_fa.po new file mode 100644 index 000000000000..7b979a1ec783 --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_fa.po @@ -0,0 +1,46 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: exercise\n" + +#, fuzzy +msgid "exc_admin_settings" +msgstr "Exercise Administration" + +msgid "exc_comment" +msgstr "Comment" + +msgid "exc_comment_for_learner" +msgstr "نظر برای یادگیرنده" + +msgid "exc_failed" +msgstr "ناموفق" + +msgid "exc_feedback_from_tutor" +msgstr "Feedback from Tutor" + +msgid "exc_grading" +msgstr "نمره دهی" + +msgid "exc_mark" +msgstr "نمره" + +msgid "exc_notgraded" +msgstr "بدون نمره" + +msgid "exc_passed" +msgstr "موفق" + +msgid "exc_send_mail" +msgstr "ارسال ایمیل" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "Start time should be before deadline." + +msgid "exc_your_submission" +msgstr "ارسال های شما" diff --git a/components/ILIAS/Exercise/lang/exercise_fr.po b/components/ILIAS/Exercise/lang/exercise_fr.po new file mode 100644 index 000000000000..3e4a61390e47 --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_fr.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: exercise\n" + +msgid "exc_admin_settings" +msgstr "Paramétrage de l'Exercice" + +msgid "exc_comment" +msgstr "Commentaire" + +msgid "exc_comment_for_learner" +msgstr "Commentaire pour l'apprenant" + +msgid "exc_failed" +msgstr "Echec" + +msgid "exc_feedback_from_tutor" +msgstr "Retours du Tuteur" + +msgid "exc_grading" +msgstr "Notation" + +msgid "exc_mark" +msgstr "Note" + +msgid "exc_notgraded" +msgstr "Non Noté" + +msgid "exc_passed" +msgstr "Réussite" + +msgid "exc_send_mail" +msgstr "Envoyer un Message" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "La date de début doit être antérieure à la date de fin." + +msgid "exc_your_submission" +msgstr "Votre Travail" diff --git a/components/ILIAS/Exercise/lang/exercise_hr.po b/components/ILIAS/Exercise/lang/exercise_hr.po new file mode 100644 index 000000000000..c34bc0a77e9c --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_hr.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: exercise\n" + +msgid "exc_admin_settings" +msgstr "Administracija vježbi" + +msgid "exc_comment" +msgstr "Evaluacija" + +msgid "exc_comment_for_learner" +msgstr "Evaluacija" + +msgid "exc_failed" +msgstr "Nije položio" + +msgid "exc_feedback_from_tutor" +msgstr "Evaluacija od strane mentora" + +msgid "exc_grading" +msgstr "Ocjenjivanje" + +msgid "exc_mark" +msgstr "Ocjena" + +msgid "exc_notgraded" +msgstr "Nije ocjenjeno" + +msgid "exc_passed" +msgstr "Položio" + +msgid "exc_send_mail" +msgstr "Pošalji kao e-poštu" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "Vrijeme početka treba biti prije krajnjeg roka." + +msgid "exc_your_submission" +msgstr "Vaš predani zadatak" diff --git a/components/ILIAS/Exercise/lang/exercise_hu.po b/components/ILIAS/Exercise/lang/exercise_hu.po new file mode 100644 index 000000000000..bfe1a0fdbbc5 --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_hu.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exercise\n" + +msgid "exc_admin_settings" +msgstr "Beadandó feladat beállításainak kezelése" + +msgid "exc_comment" +msgstr "Szöveges értékelés" + +msgid "exc_comment_for_learner" +msgstr "Szöveges értékelés" + +msgid "exc_failed" +msgstr "Nem elfogadható" + +msgid "exc_feedback_from_tutor" +msgstr "Szöveges értékelés a tutortól" + +msgid "exc_grading" +msgstr "Értékelés" + +msgid "exc_mark" +msgstr "Érdemjegy" + +msgid "exc_notgraded" +msgstr "Nincs értékelve" + +msgid "exc_passed" +msgstr "Elfogadva" + +msgid "exc_send_mail" +msgstr "Feladat linkjének küldés levélben" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "A kezdő időpont a határidő előtt kell, hogy legyen." + +msgid "exc_your_submission" +msgstr "Az Ön megoldása" diff --git a/components/ILIAS/Exercise/lang/exercise_it.po b/components/ILIAS/Exercise/lang/exercise_it.po new file mode 100644 index 000000000000..36d5d09d2dc2 --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_it.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: exercise\n" + +msgid "exc_admin_settings" +msgstr "Amministrazione servizio" + +msgid "exc_comment" +msgstr "Commenti" + +msgid "exc_comment_for_learner" +msgstr "Commenti per il discente" + +msgid "exc_failed" +msgstr "Fallito" + +msgid "exc_feedback_from_tutor" +msgstr "Feedback dal Tutor" + +msgid "exc_grading" +msgstr "Classificazione" + +msgid "exc_mark" +msgstr "Voto" + +msgid "exc_notgraded" +msgstr "Non classificato" + +msgid "exc_passed" +msgstr "Superato" + +msgid "exc_send_mail" +msgstr "Invia mail" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "Il momento dell'inizio dovrebbe essere prima della scadenza." + +msgid "exc_your_submission" +msgstr "La tua richiesta" diff --git a/components/ILIAS/Exercise/lang/exercise_ja.po b/components/ILIAS/Exercise/lang/exercise_ja.po new file mode 100644 index 000000000000..32d83851d1a7 --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_ja.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: exercise\n" + +msgid "exc_admin_settings" +msgstr "ステートメントの演習" + +msgid "exc_comment" +msgstr "ステートメントの評価" + +msgid "exc_comment_for_learner" +msgstr "ステートメントの評価" + +msgid "exc_failed" +msgstr "不合格" + +msgid "exc_feedback_from_tutor" +msgstr "指導教員からのフィードバック" + +msgid "exc_grading" +msgstr "評価" + +msgid "exc_mark" +msgstr "マ-ク" + +msgid "exc_notgraded" +msgstr "未評価" + +msgid "exc_passed" +msgstr "合格" + +msgid "exc_send_mail" +msgstr "メールで送る" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "開始時間は終了前にならなければなりません。" + +msgid "exc_your_submission" +msgstr "Submission" diff --git a/components/ILIAS/Exercise/lang/exercise_ka.po b/components/ILIAS/Exercise/lang/exercise_ka.po new file mode 100644 index 000000000000..a0ddab194668 --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_ka.po @@ -0,0 +1,46 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exercise\n" + +#, fuzzy +msgid "exc_admin_settings" +msgstr "Exercise Administration" + +msgid "exc_comment" +msgstr "კომენტარი" + +msgid "exc_comment_for_learner" +msgstr "კომენტარი მოსწავლეს" + +msgid "exc_failed" +msgstr "ჩაშლილია" + +msgid "exc_feedback_from_tutor" +msgstr "უკუკავშირი მასწავლებლისაგან" + +msgid "exc_grading" +msgstr "ქულების დაწერა" + +msgid "exc_mark" +msgstr "ნიშანი" + +msgid "exc_notgraded" +msgstr "არ არის შეფასებული" + +msgid "exc_passed" +msgstr "ჩაბარებულია" + +msgid "exc_send_mail" +msgstr "ემაილის გაგზავნა" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "Start time should be before deadline." + +msgid "exc_your_submission" +msgstr "თქვენი ჩაბარება" diff --git a/components/ILIAS/Exercise/lang/exercise_lt.po b/components/ILIAS/Exercise/lang/exercise_lt.po new file mode 100644 index 000000000000..d13989cf9b5a --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_lt.po @@ -0,0 +1,47 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: exercise\n" + +#, fuzzy +msgid "exc_admin_settings" +msgstr "Exercise Administration" + +msgid "exc_comment" +msgstr "Komentaras" + +msgid "exc_comment_for_learner" +msgstr "Studento komentarai" + +msgid "exc_failed" +msgstr "Nepavyko" + +msgid "exc_feedback_from_tutor" +msgstr "Atsiliepimai iš Dėstytojo" + +msgid "exc_grading" +msgstr "Baigimas" + +msgid "exc_mark" +msgstr "Pažymys" + +msgid "exc_notgraded" +msgstr "Neišlaikė" + +msgid "exc_passed" +msgstr "Išlaikė" + +msgid "exc_send_mail" +msgstr "Siųsti Laišką" + +#, fuzzy +msgid "exc_start_date_should_be_before_end_date" +msgstr "Start time should be before deadline." + +msgid "exc_your_submission" +msgstr "Jūsų siuntimas" diff --git a/components/ILIAS/Exercise/lang/exercise_nl.po b/components/ILIAS/Exercise/lang/exercise_nl.po new file mode 100644 index 000000000000..b18262cf5f1d --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_nl.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exercise\n" + +msgid "exc_admin_settings" +msgstr "Oefeningbeheer" + +msgid "exc_comment" +msgstr "Informatie" + +msgid "exc_comment_for_learner" +msgstr "Informatie voor de leerling" + +msgid "exc_failed" +msgstr "Niet geslaagd" + +msgid "exc_feedback_from_tutor" +msgstr "Feedback van de leerkracht" + +msgid "exc_grading" +msgstr "Graad" + +msgid "exc_mark" +msgstr "Punt" + +msgid "exc_notgraded" +msgstr "Geen graad" + +msgid "exc_passed" +msgstr "Geslaagd" + +msgid "exc_send_mail" +msgstr "Stuur e-mail" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "Start time should be before deadline." + +msgid "exc_your_submission" +msgstr "Uw voorlegging" diff --git a/components/ILIAS/Exercise/lang/exercise_pl.po b/components/ILIAS/Exercise/lang/exercise_pl.po new file mode 100644 index 000000000000..7a08b16429e8 --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_pl.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: exercise\n" + +msgid "exc_admin_settings" +msgstr "Ustawienia systemowe dotyczące ćwiczeń" + +msgid "exc_comment" +msgstr "Komentarz" + +msgid "exc_comment_for_learner" +msgstr "Komentarz dla uczniów" + +msgid "exc_failed" +msgstr "Błędny" + +msgid "exc_feedback_from_tutor" +msgstr "Odpowiedź od opiekuna" + +msgid "exc_grading" +msgstr "Klasyfikacja" + +msgid "exc_mark" +msgstr "Ocena" + +msgid "exc_notgraded" +msgstr "Nieklasyfikowany" + +msgid "exc_passed" +msgstr "Wykonany" + +msgid "exc_send_mail" +msgstr "Wyślij e-mail" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "Czas rozpoczęcia powinien być przed terminem oddania." + +msgid "exc_your_submission" +msgstr "Twoje ćwiczenie" diff --git a/components/ILIAS/Exercise/lang/exercise_pt.po b/components/ILIAS/Exercise/lang/exercise_pt.po new file mode 100644 index 000000000000..103eea5f52eb --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_pt.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: exercise\n" + +msgid "exc_admin_settings" +msgstr "Administração do exercício" + +msgid "exc_comment" +msgstr "Ficheiros do diretório upload" + +msgid "exc_comment_for_learner" +msgstr "Usar fragmentos do conteúdo" + +msgid "exc_failed" +msgstr "Falhou" + +msgid "exc_feedback_from_tutor" +msgstr "Permite criar fragmentos do conteúdo em bancos de media. Estes fragmentos podem ser reutilizados (não editados) em módulos de aprendizagem." + +msgid "exc_grading" +msgstr "Classificação" + +msgid "exc_mark" +msgstr "Nota" + +msgid "exc_notgraded" +msgstr "Não classificado" + +msgid "exc_passed" +msgstr "Aprovado" + +msgid "exc_send_mail" +msgstr "Tipos de ficheiro permitidos" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "O tempo de início deve ser anterior ao prazo." + +msgid "exc_your_submission" +msgstr "A sua submissão" diff --git a/components/ILIAS/Exercise/lang/exercise_ro.po b/components/ILIAS/Exercise/lang/exercise_ro.po new file mode 100644 index 000000000000..1a61b251540e --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_ro.po @@ -0,0 +1,57 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: exercise\n" + +#, fuzzy +msgid "exc_admin_settings" +msgstr "Exercise Administration" + +#, fuzzy +msgid "exc_comment" +msgstr "Comment" + +#, fuzzy +msgid "exc_comment_for_learner" +msgstr "Comment for Learner" + +#, fuzzy +msgid "exc_failed" +msgstr "Failed" + +#, fuzzy +msgid "exc_feedback_from_tutor" +msgstr "Feedback from Tutor" + +#, fuzzy +msgid "exc_grading" +msgstr "Grading" + +#, fuzzy +msgid "exc_mark" +msgstr "Mark" + +#, fuzzy +msgid "exc_notgraded" +msgstr "Not Graded" + +#, fuzzy +msgid "exc_passed" +msgstr "Passed" + +#, fuzzy +msgid "exc_send_mail" +msgstr "Send Mail" + +#, fuzzy +msgid "exc_start_date_should_be_before_end_date" +msgstr "Start time should be before deadline." + +#, fuzzy +msgid "exc_your_submission" +msgstr "Your Submission" diff --git a/components/ILIAS/Exercise/lang/exercise_ru.po b/components/ILIAS/Exercise/lang/exercise_ru.po new file mode 100644 index 000000000000..2401298ed97b --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_ru.po @@ -0,0 +1,46 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: exercise\n" + +#, fuzzy +msgid "exc_admin_settings" +msgstr "Exercise Administration" + +msgid "exc_comment" +msgstr "Comment" + +msgid "exc_comment_for_learner" +msgstr "Комментарий для учащегося" + +msgid "exc_failed" +msgstr "Не выполнено" + +msgid "exc_feedback_from_tutor" +msgstr "Рецензия тьютора." + +msgid "exc_grading" +msgstr "Оценки" + +msgid "exc_mark" +msgstr "Оценка" + +msgid "exc_notgraded" +msgstr "Не оценено" + +msgid "exc_passed" +msgstr "Выполнено" + +msgid "exc_send_mail" +msgstr "Написать письмо" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "Start time should be before deadline." + +msgid "exc_your_submission" +msgstr "Ваше решение" diff --git a/components/ILIAS/Exercise/lang/exercise_sk.po b/components/ILIAS/Exercise/lang/exercise_sk.po new file mode 100644 index 000000000000..8117733f52e9 --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_sk.po @@ -0,0 +1,47 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: exercise\n" + +#, fuzzy +msgid "exc_admin_settings" +msgstr "Exercise Administration" + +msgid "exc_comment" +msgstr "Komentář" + +msgid "exc_comment_for_learner" +msgstr "Komentář studenta" + +msgid "exc_failed" +msgstr "Neprospěl(a)" + +msgid "exc_feedback_from_tutor" +msgstr "Odezva od lektora" + +msgid "exc_grading" +msgstr "Hodnocení" + +msgid "exc_mark" +msgstr "Známka" + +msgid "exc_notgraded" +msgstr "Nehodnoceno" + +msgid "exc_passed" +msgstr "Prospěl(a)" + +msgid "exc_send_mail" +msgstr "Poslat email" + +#, fuzzy +msgid "exc_start_date_should_be_before_end_date" +msgstr "Start time should be before deadline." + +msgid "exc_your_submission" +msgstr "Vaše zadání" diff --git a/components/ILIAS/Exercise/lang/exercise_sl.po b/components/ILIAS/Exercise/lang/exercise_sl.po new file mode 100644 index 000000000000..884792540014 --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_sl.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: exercise\n" + +msgid "exc_admin_settings" +msgstr "Administracija vaje" + +msgid "exc_comment" +msgstr "Stališče" + +msgid "exc_comment_for_learner" +msgstr "Povratna informacija za udeleženca" + +msgid "exc_failed" +msgstr "Ni opravljeno" + +msgid "exc_feedback_from_tutor" +msgstr "Ocena mentorja" + +msgid "exc_grading" +msgstr "Ocena" + +msgid "exc_mark" +msgstr "Ocena" + +msgid "exc_notgraded" +msgstr "Ni ocenjen" + +msgid "exc_passed" +msgstr "Opravljeno" + +msgid "exc_send_mail" +msgstr "Pošlji kot e-pošto" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "Začetni čas mora biti pred rokom za oddajo." + +msgid "exc_your_submission" +msgstr "Vaša oddaja" diff --git a/components/ILIAS/Exercise/lang/exercise_sq.po b/components/ILIAS/Exercise/lang/exercise_sq.po new file mode 100644 index 000000000000..292362fead5c --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_sq.po @@ -0,0 +1,57 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exercise\n" + +#, fuzzy +msgid "exc_admin_settings" +msgstr "Exercise Administration" + +#, fuzzy +msgid "exc_comment" +msgstr "Comment" + +#, fuzzy +msgid "exc_comment_for_learner" +msgstr "Comment for Learner" + +#, fuzzy +msgid "exc_failed" +msgstr "Failed" + +#, fuzzy +msgid "exc_feedback_from_tutor" +msgstr "Feedback from Tutor" + +#, fuzzy +msgid "exc_grading" +msgstr "Grading" + +#, fuzzy +msgid "exc_mark" +msgstr "Mark" + +#, fuzzy +msgid "exc_notgraded" +msgstr "Not Graded" + +#, fuzzy +msgid "exc_passed" +msgstr "Passed" + +#, fuzzy +msgid "exc_send_mail" +msgstr "Send Mail" + +#, fuzzy +msgid "exc_start_date_should_be_before_end_date" +msgstr "Start time should be before deadline." + +#, fuzzy +msgid "exc_your_submission" +msgstr "Your Submission" diff --git a/components/ILIAS/Exercise/lang/exercise_sr.po b/components/ILIAS/Exercise/lang/exercise_sr.po new file mode 100644 index 000000000000..b66602d710de --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_sr.po @@ -0,0 +1,57 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: exercise\n" + +#, fuzzy +msgid "exc_admin_settings" +msgstr "Exercise Administration" + +#, fuzzy +msgid "exc_comment" +msgstr "Comment" + +#, fuzzy +msgid "exc_comment_for_learner" +msgstr "Comment for Learner" + +#, fuzzy +msgid "exc_failed" +msgstr "Failed" + +#, fuzzy +msgid "exc_feedback_from_tutor" +msgstr "Feedback from Tutor" + +#, fuzzy +msgid "exc_grading" +msgstr "Grading" + +#, fuzzy +msgid "exc_mark" +msgstr "Mark" + +#, fuzzy +msgid "exc_notgraded" +msgstr "Not Graded" + +#, fuzzy +msgid "exc_passed" +msgstr "Passed" + +#, fuzzy +msgid "exc_send_mail" +msgstr "Send Mail" + +#, fuzzy +msgid "exc_start_date_should_be_before_end_date" +msgstr "Start time should be before deadline." + +#, fuzzy +msgid "exc_your_submission" +msgstr "Your Submission" diff --git a/components/ILIAS/Exercise/lang/exercise_sv.po b/components/ILIAS/Exercise/lang/exercise_sv.po new file mode 100644 index 000000000000..8ce6a5c26897 --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_sv.po @@ -0,0 +1,45 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exercise\n" + +msgid "exc_admin_settings" +msgstr "Administration av övningar" + +msgid "exc_comment" +msgstr "opinion" + +msgid "exc_comment_for_learner" +msgstr "Feedback för deltagare" + +msgid "exc_failed" +msgstr "Misslyckad" + +msgid "exc_feedback_from_tutor" +msgstr "Utvärdering av handledaren" + +msgid "exc_grading" +msgstr "Rating" + +msgid "exc_mark" +msgstr "Note" + +msgid "exc_notgraded" +msgstr "Ej betygsatt" + +msgid "exc_passed" +msgstr "Bekräftad" + +msgid "exc_send_mail" +msgstr "Sänd som post" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "Starttiden bör vara före tidsfristen." + +msgid "exc_your_submission" +msgstr "Din ansökan" diff --git a/components/ILIAS/Exercise/lang/exercise_tr.po b/components/ILIAS/Exercise/lang/exercise_tr.po new file mode 100644 index 000000000000..d95741d9166c --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_tr.po @@ -0,0 +1,46 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exercise\n" + +#, fuzzy +msgid "exc_admin_settings" +msgstr "Exercise Administration" + +msgid "exc_comment" +msgstr "Yorum" + +msgid "exc_comment_for_learner" +msgstr "Öğrenci için Yorum" + +msgid "exc_failed" +msgstr "Başarısız" + +msgid "exc_feedback_from_tutor" +msgstr "Danışman'ın Görüşleri" + +msgid "exc_grading" +msgstr "Notlandırma" + +msgid "exc_mark" +msgstr "Not" + +msgid "exc_notgraded" +msgstr "Derecelendirilmemiş" + +msgid "exc_passed" +msgstr "Geçti" + +msgid "exc_send_mail" +msgstr "Posta Gönder" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "Başlangıç ​​saati tarihinden önce olmalıdır." + +msgid "exc_your_submission" +msgstr "Sizin Gönderme" diff --git a/components/ILIAS/Exercise/lang/exercise_uk.po b/components/ILIAS/Exercise/lang/exercise_uk.po new file mode 100644 index 000000000000..49c447a6b86a --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_uk.po @@ -0,0 +1,57 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: exercise\n" + +#, fuzzy +msgid "exc_admin_settings" +msgstr "Exercise Administration" + +#, fuzzy +msgid "exc_comment" +msgstr "Comment" + +#, fuzzy +msgid "exc_comment_for_learner" +msgstr "Comment for Learner" + +#, fuzzy +msgid "exc_failed" +msgstr "Failed" + +#, fuzzy +msgid "exc_feedback_from_tutor" +msgstr "Feedback from Tutor" + +#, fuzzy +msgid "exc_grading" +msgstr "Grading" + +#, fuzzy +msgid "exc_mark" +msgstr "Mark" + +#, fuzzy +msgid "exc_notgraded" +msgstr "Not Graded" + +#, fuzzy +msgid "exc_passed" +msgstr "Passed" + +#, fuzzy +msgid "exc_send_mail" +msgstr "Send Mail" + +#, fuzzy +msgid "exc_start_date_should_be_before_end_date" +msgstr "Start time should be before deadline." + +#, fuzzy +msgid "exc_your_submission" +msgstr "Your Submission" diff --git a/components/ILIAS/Exercise/lang/exercise_vi.po b/components/ILIAS/Exercise/lang/exercise_vi.po new file mode 100644 index 000000000000..a3935eb48ce5 --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_vi.po @@ -0,0 +1,57 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: exercise\n" + +#, fuzzy +msgid "exc_admin_settings" +msgstr "Exercise Administration" + +#, fuzzy +msgid "exc_comment" +msgstr "Comment" + +#, fuzzy +msgid "exc_comment_for_learner" +msgstr "Comment for Learner" + +#, fuzzy +msgid "exc_failed" +msgstr "Failed" + +#, fuzzy +msgid "exc_feedback_from_tutor" +msgstr "Feedback from Tutor" + +#, fuzzy +msgid "exc_grading" +msgstr "Grading" + +#, fuzzy +msgid "exc_mark" +msgstr "Mark" + +#, fuzzy +msgid "exc_notgraded" +msgstr "Not Graded" + +#, fuzzy +msgid "exc_passed" +msgstr "Passed" + +#, fuzzy +msgid "exc_send_mail" +msgstr "Send Mail" + +#, fuzzy +msgid "exc_start_date_should_be_before_end_date" +msgstr "Start time should be before deadline." + +#, fuzzy +msgid "exc_your_submission" +msgstr "Your Submission" diff --git a/components/ILIAS/Exercise/lang/exercise_zh.po b/components/ILIAS/Exercise/lang/exercise_zh.po new file mode 100644 index 000000000000..6d30051f50e6 --- /dev/null +++ b/components/ILIAS/Exercise/lang/exercise_zh.po @@ -0,0 +1,46 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: exercise\n" + +#, fuzzy +msgid "exc_admin_settings" +msgstr "Exercise Administration" + +msgid "exc_comment" +msgstr "评论" + +msgid "exc_comment_for_learner" +msgstr "评论学习者" + +msgid "exc_failed" +msgstr "失败" + +msgid "exc_feedback_from_tutor" +msgstr "来自导师的反馈" + +msgid "exc_grading" +msgstr "分级" + +msgid "exc_mark" +msgstr "标记" + +msgid "exc_notgraded" +msgstr "未分级的" + +msgid "exc_passed" +msgstr "已经通过的" + +msgid "exc_send_mail" +msgstr "发送邮件" + +msgid "exc_start_date_should_be_before_end_date" +msgstr "开始时间应在截止时间之前。" + +msgid "exc_your_submission" +msgstr "您提交" diff --git a/components/ILIAS/Export/Export.php b/components/ILIAS/Export/Export.php index a761c5e76e55..0bda957c1953 100644 --- a/components/ILIAS/Export/Export.php +++ b/components/ILIAS/Export/Export.php @@ -24,6 +24,8 @@ use ILIAS\Export\HTML; use ILIAS\Refinery\Factory as RefineryFactory; use ILIAS\Setup\Agent as SetupAgent; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; class Export implements Component\Component { @@ -41,5 +43,13 @@ public function init( $contribute[SetupAgent::class] = fn() => new HTML\Setup\Agent($pull[RefineryFactory::class]); $contribute[\ILIAS\StaticURL\Handler\Handler::class] = static fn() => new \ILIAS\Export\ExportHandler\PublicAccess\Link\Handler(); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'export' + ); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'exp' + ); } } diff --git a/components/ILIAS/Export/lang/exp.pot b/components/ILIAS/Export/lang/exp.pot new file mode 100644 index 000000000000..d7ee0fdf4ad0 --- /dev/null +++ b/components/ILIAS/Export/lang/exp.pot @@ -0,0 +1,78 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "" + +msgid "exp_error_disabled" +msgstr "" + +msgid "exp_error_too_many_objects" +msgstr "" + +msgid "exp_export_dropdown" +msgstr "" + +msgid "exp_export_files" +msgstr "" + +msgid "exp_export_single_option" +msgstr "" + +msgid "exp_file_created" +msgstr "" + +msgid "exp_format_dropdown-csv" +msgstr "" + +msgid "exp_format_dropdown-html" +msgstr "" + +msgid "exp_format_dropdown-xls" +msgstr "" + +msgid "exp_format_dropdown-xml" +msgstr "" + +msgid "exp_html" +msgstr "" + +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "" + +msgid "exp_not_public_access_status" +msgstr "" + +msgid "exp_print_pdf" +msgstr "" + +msgid "exp_print_pdf_info" +msgstr "" + +msgid "exp_public_access_status" +msgstr "" + +msgid "exp_really_delete" +msgstr "" + +msgid "exp_show_print_view" +msgstr "" + +msgid "exp_xml" +msgstr "" + +msgid "export_created" +msgstr "" + +msgid "export_files_deleted" +msgstr "" + +msgid "export_options" +msgstr "" + +msgid "export_type" +msgstr "" diff --git a/components/ILIAS/Export/lang/exp_ar.po b/components/ILIAS/Export/lang/exp_ar.po new file mode 100644 index 000000000000..4adade540201 --- /dev/null +++ b/components/ILIAS/Export/lang/exp_ar.po @@ -0,0 +1,100 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "انشاء ملف تصدير" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +msgid "exp_export_files" +msgstr "تصدير ملفات" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +#, fuzzy +msgid "exp_file_created" +msgstr "The export file has been created." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +msgid "exp_really_delete" +msgstr "Do you really want to delete these export files?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +msgid "exp_xml" +msgstr "XML" + +msgid "export_created" +msgstr "تم انشاء ملف تصدير جديد" + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_bg.po b/components/ILIAS/Export/lang/exp_bg.po new file mode 100644 index 000000000000..385fd2eb0410 --- /dev/null +++ b/components/ILIAS/Export/lang/exp_bg.po @@ -0,0 +1,105 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exp\n" + +#, fuzzy +msgid "exp_create_file" +msgstr "Create Export File" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +#, fuzzy +msgid "exp_export_files" +msgstr "Export Files" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +#, fuzzy +msgid "exp_file_created" +msgstr "The export file has been created." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +#, fuzzy +msgid "exp_really_delete" +msgstr "Do you really want to delete these export files?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +#, fuzzy +msgid "exp_xml" +msgstr "XML" + +#, fuzzy +msgid "export_created" +msgstr "A new export file has been created." + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_cs.po b/components/ILIAS/Export/lang/exp_cs.po new file mode 100644 index 000000000000..018ac54ecfff --- /dev/null +++ b/components/ILIAS/Export/lang/exp_cs.po @@ -0,0 +1,99 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "Vytvořit Exportní soubor" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +msgid "exp_export_files" +msgstr "Exportovat soubory" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +msgid "exp_file_created" +msgstr "Byl vytvořen soubor exportu." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +msgid "exp_really_delete" +msgstr "Skutečně chcete smazat tyto exportní soubory?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +msgid "exp_xml" +msgstr "XML" + +msgid "export_created" +msgstr "Nový exportní soubor byl vytvořen." + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_da.po b/components/ILIAS/Export/lang/exp_da.po new file mode 100644 index 000000000000..11d18780fa5b --- /dev/null +++ b/components/ILIAS/Export/lang/exp_da.po @@ -0,0 +1,102 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "Lav eksportfil" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +msgid "exp_export_files" +msgstr "Eksportfiler" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +#, fuzzy +msgid "exp_file_created" +msgstr "The export file has been created." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +#, fuzzy +msgid "exp_really_delete" +msgstr "Do you really want to delete these export files?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +msgid "exp_xml" +msgstr "XML" + +#, fuzzy +msgid "export_created" +msgstr "A new export file has been created." + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_de.po b/components/ILIAS/Export/lang/exp_de.po new file mode 100644 index 000000000000..dfad2195583b --- /dev/null +++ b/components/ILIAS/Export/lang/exp_de.po @@ -0,0 +1,81 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "Exportdatei erzeugen" + +msgid "exp_error_disabled" +msgstr "Der Export von Container-Objekten ist deaktiviert. Bei Fragen wenden Sie sich bitte an die technische Betreuung." + +msgid "exp_error_too_many_objects" +msgstr "Der Export überschreitet die maximal erlaubte Zahl an Objekten (%1). Bitte wählen Sie eine kleinere Anzahl an Objekten." + +msgid "exp_export_dropdown" +msgstr "Export" + +msgid "exp_export_files" +msgstr "Exportdateien" + +msgid "exp_export_single_option" +msgstr "Export %s" + +msgid "exp_file_created" +msgstr "Eine Exportdatei wurde erstellt." + +msgid "exp_format_dropdown-csv" +msgstr "als CSV" + +msgid "exp_format_dropdown-html" +msgstr "als HTML" + +msgid "exp_format_dropdown-xls" +msgstr "als XLS" + +msgid "exp_format_dropdown-xml" +msgstr "als XML" + +msgid "exp_html" +msgstr "HTML" + +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "Eine Schema Datei für Version %s existiert nicht." + +msgid "exp_not_public_access_status" +msgstr "Nicht veröffentlicht" + +msgid "exp_print_pdf" +msgstr "Drucken/PDF" + +msgid "exp_print_pdf_info" +msgstr "Um ein PDF zu erstellen, wählen Sie bitte anschließend in der Druckansicht \"Als PDF speichern\" als Ziel." + +msgid "exp_public_access_status" +msgstr "Im Reiter „Info“ verfügbar" + +msgid "exp_really_delete" +msgstr "Möchten Sie diese Exportdateien wirklich löschen?" + +msgid "exp_show_print_view" +msgstr "Druckansicht anzeigen" + +msgid "exp_xml" +msgstr "XML" + +msgid "export_created" +msgstr "Eine neue Exportdatei wurde erstellt." + +msgid "export_files_deleted" +msgstr "Die ausgewählten Exportdateien wurden gelöscht." + +msgid "export_options" +msgstr "Export Optionen" + +msgid "export_type" +msgstr "Export Typ" diff --git a/components/ILIAS/Export/lang/exp_el.po b/components/ILIAS/Export/lang/exp_el.po new file mode 100644 index 000000000000..43070bc0453d --- /dev/null +++ b/components/ILIAS/Export/lang/exp_el.po @@ -0,0 +1,105 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exp\n" + +#, fuzzy +msgid "exp_create_file" +msgstr "Create Export File" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +#, fuzzy +msgid "exp_export_files" +msgstr "Export Files" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +#, fuzzy +msgid "exp_file_created" +msgstr "The export file has been created." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +#, fuzzy +msgid "exp_really_delete" +msgstr "Do you really want to delete these export files?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +#, fuzzy +msgid "exp_xml" +msgstr "XML" + +#, fuzzy +msgid "export_created" +msgstr "A new export file has been created." + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_en.po b/components/ILIAS/Export/lang/exp_en.po new file mode 100644 index 000000000000..d8240f49d718 --- /dev/null +++ b/components/ILIAS/Export/lang/exp_en.po @@ -0,0 +1,81 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "Create Export File" + +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +msgid "exp_export_dropdown" +msgstr "Export" + +msgid "exp_export_files" +msgstr "Export Files" + +msgid "exp_export_single_option" +msgstr "Export %s" + +msgid "exp_file_created" +msgstr "The export file has been created." + +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +msgid "exp_html" +msgstr "HTML" + +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +msgid "exp_not_public_access_status" +msgstr "Not published" + +msgid "exp_print_pdf" +msgstr "Print/PDF" + +msgid "exp_print_pdf_info" +msgstr "To create a PDF please select \"Print to PDF\" in the print modal that appears after clicking on ‘Print View’." + +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +msgid "exp_really_delete" +msgstr "Are you sure you want to delete the following export file(s)?" + +msgid "exp_show_print_view" +msgstr "Show Print View" + +msgid "exp_xml" +msgstr "XML" + +msgid "export_created" +msgstr "A new export file has been created." + +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +msgid "export_options" +msgstr "Export Options" + +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_es.po b/components/ILIAS/Export/lang/exp_es.po new file mode 100644 index 000000000000..76a49960b7e8 --- /dev/null +++ b/components/ILIAS/Export/lang/exp_es.po @@ -0,0 +1,81 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "Crear archivo de exportación" + +msgid "exp_error_disabled" +msgstr "La función de exportación está desactivada para contenedores. Puede ponerse en contacto con su administrador del sistema." + +msgid "exp_error_too_many_objects" +msgstr "La exportación supera el número máximo de objetos permitidos (%1). Por favor, seleccione un número menor de objetos." + +msgid "exp_export_dropdown" +msgstr "Exportar" + +msgid "exp_export_files" +msgstr "Exportar archivos" + +msgid "exp_export_single_option" +msgstr "Exportar %s" + +msgid "exp_file_created" +msgstr "Se ha creado el archivo de exportación." + +msgid "exp_format_dropdown-csv" +msgstr "como CSV" + +msgid "exp_format_dropdown-html" +msgstr "como HTML" + +msgid "exp_format_dropdown-xls" +msgstr "como XLS" + +msgid "exp_format_dropdown-xml" +msgstr "como XML" + +msgid "exp_html" +msgstr "HTML" + +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No existe un archivo de esquema válido para la versión %s." + +msgid "exp_not_public_access_status" +msgstr "No publicado" + +msgid "exp_print_pdf" +msgstr "Imprimir/PDF" + +msgid "exp_print_pdf_info" +msgstr "Para crear un PDF, seleccione \"Guardar como PDF\" en la ventana de impresión que aparece tras hacer clic en 'Vista de impresión'." + +msgid "exp_public_access_status" +msgstr "Disponible en la pestaña 'Información'" + +msgid "exp_really_delete" +msgstr "¿Está seguro de que desea eliminar los siguientes archivos de exportación?" + +msgid "exp_show_print_view" +msgstr "Mostrar vista de impresión" + +msgid "exp_xml" +msgstr "XML" + +msgid "export_created" +msgstr "Se ha creado un nuevo archivo de exportación." + +msgid "export_files_deleted" +msgstr "Los archivos de exportación seleccionados han sido eliminados." + +msgid "export_options" +msgstr "Opciones de exportación" + +msgid "export_type" +msgstr "Tipo de exportación" diff --git a/components/ILIAS/Export/lang/exp_et.po b/components/ILIAS/Export/lang/exp_et.po new file mode 100644 index 000000000000..add4cb48ff42 --- /dev/null +++ b/components/ILIAS/Export/lang/exp_et.po @@ -0,0 +1,99 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "Loo eksportfail" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +msgid "exp_export_files" +msgstr "Ekspordifailid" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +msgid "exp_file_created" +msgstr "The export file has been created." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +msgid "exp_really_delete" +msgstr "Soovid need ekspordifailid kustutada?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +msgid "exp_xml" +msgstr "XML" + +msgid "export_created" +msgstr "Loodi uus ekspordifail." + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_fa.po b/components/ILIAS/Export/lang/exp_fa.po new file mode 100644 index 000000000000..004310da79cd --- /dev/null +++ b/components/ILIAS/Export/lang/exp_fa.po @@ -0,0 +1,100 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "ساختن فایل صدور" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +msgid "exp_export_files" +msgstr "صدور فایل ها" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +#, fuzzy +msgid "exp_file_created" +msgstr "The export file has been created." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +msgid "exp_really_delete" +msgstr "Do you really want to delete these export files?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +msgid "exp_xml" +msgstr "XML" + +msgid "export_created" +msgstr "یک فایل جدید صدور ساخته شد." + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_fr.po b/components/ILIAS/Export/lang/exp_fr.po new file mode 100644 index 000000000000..b3ba9c47ef7e --- /dev/null +++ b/components/ILIAS/Export/lang/exp_fr.po @@ -0,0 +1,97 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "Créer fichier exportable" + +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +msgid "exp_export_files" +msgstr "Fichiers exportables" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +msgid "exp_file_created" +msgstr "Le fichier d'export a été créé." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +msgid "exp_really_delete" +msgstr "Désirez vous vraiment supprimer ces fichiers d'export ?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +msgid "exp_xml" +msgstr "XML" + +msgid "export_created" +msgstr "Un nouveau fichier d'export a été créé." + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_hr.po b/components/ILIAS/Export/lang/exp_hr.po new file mode 100644 index 000000000000..6ffe6c224925 --- /dev/null +++ b/components/ILIAS/Export/lang/exp_hr.po @@ -0,0 +1,99 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "Kreiraj datoteku za izvoz" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +msgid "exp_export_files" +msgstr "Datoteke za izvoz" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +msgid "exp_file_created" +msgstr "Kreirana je datoteka za izvoz." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +msgid "exp_really_delete" +msgstr "Želite li stvarno izbrisati ove datoteke za izvoz?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +msgid "exp_xml" +msgstr "XML" + +msgid "export_created" +msgstr "Kreirana je nova datoteka za izvoz." + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_hu.po b/components/ILIAS/Export/lang/exp_hu.po new file mode 100644 index 000000000000..f344235f269a --- /dev/null +++ b/components/ILIAS/Export/lang/exp_hu.po @@ -0,0 +1,81 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "Exportfájl létrehozása" + +msgid "exp_error_disabled" +msgstr "A tárolók exportálása le van tilta. Vegye fel a kapcsolatot az üzemeltetővel." + +msgid "exp_error_too_many_objects" +msgstr "Az exportálás túllépi a maximálisan megngedett objektumszámot (%1). Kérem, kevesebb objektumot jelöljön ki." + +msgid "exp_export_dropdown" +msgstr "Exportálás" + +msgid "exp_export_files" +msgstr "Exportfájlok" + +msgid "exp_export_single_option" +msgstr "Exportálás %s" + +msgid "exp_file_created" +msgstr "Elkészült az exportfájl." + +msgid "exp_format_dropdown-csv" +msgstr "mint CSV" + +msgid "exp_format_dropdown-html" +msgstr "mint HTML" + +msgid "exp_format_dropdown-xls" +msgstr "mint XLS" + +msgid "exp_format_dropdown-xml" +msgstr "mint XML" + +msgid "exp_html" +msgstr "HTML" + +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "%s verzióhoz nincs érvényes sémafájl." + +msgid "exp_not_public_access_status" +msgstr "Nem publikált" + +msgid "exp_print_pdf" +msgstr "Nyomtatás/PDF" + +msgid "exp_print_pdf_info" +msgstr "PDF létrehozásához válassza a ‘Nyomtatás PDF-be’ lehetőséget a ‘Nyomtatási nézet’ megjelenése után." + +msgid "exp_public_access_status" +msgstr "Elérhető az ‘Információ’ lapon" + +msgid "exp_really_delete" +msgstr "Biztos, hogy törli a következő az exportfájlokat?" + +msgid "exp_show_print_view" +msgstr "Nyomtatási nézet megjelenítése" + +msgid "exp_xml" +msgstr "XML" + +msgid "export_created" +msgstr "Új exportfájl jött létre." + +msgid "export_files_deleted" +msgstr "A kijelölt exportfájlokat sikeresen törölte." + +msgid "export_options" +msgstr "Exportálás beállításai" + +msgid "export_type" +msgstr "Exportálás típusa" diff --git a/components/ILIAS/Export/lang/exp_it.po b/components/ILIAS/Export/lang/exp_it.po new file mode 100644 index 000000000000..adb184e973e7 --- /dev/null +++ b/components/ILIAS/Export/lang/exp_it.po @@ -0,0 +1,96 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "Crea file di export" + +msgid "exp_error_disabled" +msgstr "L'esportazione di oggetti container è disattivata. In caso di domande contatti il supporto tecnico." + +msgid "exp_error_too_many_objects" +msgstr "L'esportazione supera il massimale di oggetti consentiti (%1). Per favore scelga un numero inferiore di oggetti." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +msgid "exp_export_files" +msgstr "File di export" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +msgid "exp_file_created" +msgstr "Il file esportato è stato creato." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +msgid "exp_really_delete" +msgstr "Vuoi veramente cancellare questi file di export?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +msgid "exp_xml" +msgstr "XML" + +msgid "export_created" +msgstr "Un nuovo file di export e'stato creato" + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_ja.po b/components/ILIAS/Export/lang/exp_ja.po new file mode 100644 index 000000000000..6babc8221156 --- /dev/null +++ b/components/ILIAS/Export/lang/exp_ja.po @@ -0,0 +1,81 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "エクスポートファイルを作成" + +msgid "exp_error_disabled" +msgstr "コンテナのエクスポート機能は使用できません。システム管理者へ相談できます。" + +msgid "exp_error_too_many_objects" +msgstr "エクスポートは許容オブジェクト最大数 (%1)を超えています。もっと少ないオブジェクト数を選択して下さい。" + +msgid "exp_export_dropdown" +msgstr "エクスポート" + +msgid "exp_export_files" +msgstr "エクスポートファイル" + +msgid "exp_export_single_option" +msgstr "エクスポート %" + +msgid "exp_file_created" +msgstr "エクスポートファイルが作成されました。" + +msgid "exp_format_dropdown-csv" +msgstr "HTML形式" + +msgid "exp_format_dropdown-html" +msgstr "XLS形式" + +msgid "exp_format_dropdown-xls" +msgstr "XML形式" + +msgid "exp_format_dropdown-xml" +msgstr "HTML" + +msgid "exp_html" +msgstr "HTML" + +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "バージョン %s には有効なスキーマファイルがありません。" + +msgid "exp_not_public_access_status" +msgstr "未公開" + +msgid "exp_print_pdf" +msgstr "印刷/PDF" + +msgid "exp_print_pdf_info" +msgstr "PDFを作成するには印刷ビューが表示されている間に\"PDFで印刷\" のターゲットを使用してください。" + +msgid "exp_public_access_status" +msgstr "'Info'-タブの属性" + +msgid "exp_really_delete" +msgstr "本当にこのエクスポートファイルを削除しますか?" + +msgid "exp_show_print_view" +msgstr "印刷View表示" + +msgid "exp_xml" +msgstr "XML" + +msgid "export_created" +msgstr "新しいエクスポートファイルが作成されました。" + +msgid "export_files_deleted" +msgstr "選択のエクスポートファイルは削除されました。" + +msgid "export_options" +msgstr "エクスポートオプション" + +msgid "export_type" +msgstr "エクスポートタイプ" diff --git a/components/ILIAS/Export/lang/exp_ka.po b/components/ILIAS/Export/lang/exp_ka.po new file mode 100644 index 000000000000..bbe72243d011 --- /dev/null +++ b/components/ILIAS/Export/lang/exp_ka.po @@ -0,0 +1,100 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "ექსპორტი ფაილის შექმნა" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +msgid "exp_export_files" +msgstr "ექსპორტის ფაილები" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +#, fuzzy +msgid "exp_file_created" +msgstr "The export file has been created." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +msgid "exp_really_delete" +msgstr "ნამდვილად გსურთ ამ საექპორტო ფაილების წაშლა?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +msgid "exp_xml" +msgstr "ექს ემ ელ" + +msgid "export_created" +msgstr "ახალი საექსპორტო ფაილი შექმნილია" + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_lt.po b/components/ILIAS/Export/lang/exp_lt.po new file mode 100644 index 000000000000..f8a6f0f39314 --- /dev/null +++ b/components/ILIAS/Export/lang/exp_lt.po @@ -0,0 +1,105 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: exp\n" + +#, fuzzy +msgid "exp_create_file" +msgstr "Create Export File" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +#, fuzzy +msgid "exp_export_files" +msgstr "Export Files" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +#, fuzzy +msgid "exp_file_created" +msgstr "The export file has been created." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +#, fuzzy +msgid "exp_really_delete" +msgstr "Do you really want to delete these export files?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +#, fuzzy +msgid "exp_xml" +msgstr "XML" + +#, fuzzy +msgid "export_created" +msgstr "A new export file has been created." + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_nl.po b/components/ILIAS/Export/lang/exp_nl.po new file mode 100644 index 000000000000..f647c5cc3163 --- /dev/null +++ b/components/ILIAS/Export/lang/exp_nl.po @@ -0,0 +1,99 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "Aanmaken Export Bestand" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +msgid "exp_export_files" +msgstr "Exportbestanden" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +msgid "exp_file_created" +msgstr "Het exportbestand is aangemaakt." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +msgid "exp_really_delete" +msgstr "Do you really want to delete these export files" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +msgid "exp_xml" +msgstr "XML" + +msgid "export_created" +msgstr "Een nieuwe export file is aangemaakt" + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_pl.po b/components/ILIAS/Export/lang/exp_pl.po new file mode 100644 index 000000000000..daced7c1490f --- /dev/null +++ b/components/ILIAS/Export/lang/exp_pl.po @@ -0,0 +1,99 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "Utwórz plik eksportu" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +msgid "exp_export_files" +msgstr "Pliki eksportu" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +msgid "exp_file_created" +msgstr "Utworzono plik eksportowy." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +msgid "exp_really_delete" +msgstr "Czy naprawdę chcesz usunąć te pliki eksportowe?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +msgid "exp_xml" +msgstr "XML" + +msgid "export_created" +msgstr "Utworzono nowy plik eksportowy." + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_pt.po b/components/ILIAS/Export/lang/exp_pt.po new file mode 100644 index 000000000000..3291e028c8b4 --- /dev/null +++ b/components/ILIAS/Export/lang/exp_pt.po @@ -0,0 +1,98 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "Criar ficheiro de exportação" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +msgid "exp_export_files" +msgstr "Exportar ficheiros" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +msgid "exp_file_created" +msgstr "Foi criado um ficheiro de exportação." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please select \"Print to PDF\" in the print modal that appears after clicking on ‘Print View’." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +msgid "exp_really_delete" +msgstr "Tem a certeza que quer apagar estes ficheiros de exportação?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +msgid "exp_xml" +msgstr "XML" + +msgid "export_created" +msgstr "Foi criado um novo ficheiro de exportação." + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_ro.po b/components/ILIAS/Export/lang/exp_ro.po new file mode 100644 index 000000000000..e95b298658c5 --- /dev/null +++ b/components/ILIAS/Export/lang/exp_ro.po @@ -0,0 +1,105 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: exp\n" + +#, fuzzy +msgid "exp_create_file" +msgstr "Create Export File" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +#, fuzzy +msgid "exp_export_files" +msgstr "Export Files" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +#, fuzzy +msgid "exp_file_created" +msgstr "The export file has been created." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +#, fuzzy +msgid "exp_really_delete" +msgstr "Do you really want to delete these export files?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +#, fuzzy +msgid "exp_xml" +msgstr "XML" + +#, fuzzy +msgid "export_created" +msgstr "A new export file has been created." + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_ru.po b/components/ILIAS/Export/lang/exp_ru.po new file mode 100644 index 000000000000..dc0d1fb72dc0 --- /dev/null +++ b/components/ILIAS/Export/lang/exp_ru.po @@ -0,0 +1,99 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "Создать файл экспорта" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +msgid "exp_export_files" +msgstr "Файлы экспорта" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +msgid "exp_file_created" +msgstr "The export file has been created." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +msgid "exp_really_delete" +msgstr "Do you really want to delete these export files?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +msgid "exp_xml" +msgstr "XML" + +msgid "export_created" +msgstr "A new export file has been created." + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_sk.po b/components/ILIAS/Export/lang/exp_sk.po new file mode 100644 index 000000000000..56f0eece348e --- /dev/null +++ b/components/ILIAS/Export/lang/exp_sk.po @@ -0,0 +1,101 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "Vytvořit Exportní soubor" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +msgid "exp_export_files" +msgstr "Exportovat soubory" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +#, fuzzy +msgid "exp_file_created" +msgstr "The export file has been created." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +msgid "exp_really_delete" +msgstr "Skutečně chcete smazat tyto exportní soubory?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +msgid "exp_xml" +msgstr "XML" + +#, fuzzy +msgid "export_created" +msgstr "Nový exportní soubor byl vytvořen." + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_sl.po b/components/ILIAS/Export/lang/exp_sl.po new file mode 100644 index 000000000000..446d02a0ab69 --- /dev/null +++ b/components/ILIAS/Export/lang/exp_sl.po @@ -0,0 +1,97 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "Ustvari datoteko za izvoz" + +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +msgid "exp_export_files" +msgstr "Datoteke za izvoz" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +msgid "exp_file_created" +msgstr "Datoteka za izvoz je bila ustvarjena." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +msgid "exp_really_delete" +msgstr "Ali res želite izbrisati te datoteke za izvoz?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +msgid "exp_xml" +msgstr "XML" + +msgid "export_created" +msgstr "Ustvarjena je bila nova datoteka za izvoz." + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_sq.po b/components/ILIAS/Export/lang/exp_sq.po new file mode 100644 index 000000000000..663a8925496e --- /dev/null +++ b/components/ILIAS/Export/lang/exp_sq.po @@ -0,0 +1,105 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exp\n" + +#, fuzzy +msgid "exp_create_file" +msgstr "Create Export File" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +#, fuzzy +msgid "exp_export_files" +msgstr "Export Files" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +#, fuzzy +msgid "exp_file_created" +msgstr "The export file has been created." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +#, fuzzy +msgid "exp_really_delete" +msgstr "Do you really want to delete these export files?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +#, fuzzy +msgid "exp_xml" +msgstr "XML" + +#, fuzzy +msgid "export_created" +msgstr "A new export file has been created." + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_sr.po b/components/ILIAS/Export/lang/exp_sr.po new file mode 100644 index 000000000000..5cdf355c3b2a --- /dev/null +++ b/components/ILIAS/Export/lang/exp_sr.po @@ -0,0 +1,105 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: exp\n" + +#, fuzzy +msgid "exp_create_file" +msgstr "Create Export File" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +#, fuzzy +msgid "exp_export_files" +msgstr "Export Files" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +#, fuzzy +msgid "exp_file_created" +msgstr "The export file has been created." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +#, fuzzy +msgid "exp_really_delete" +msgstr "Do you really want to delete these export files?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +#, fuzzy +msgid "exp_xml" +msgstr "XML" + +#, fuzzy +msgid "export_created" +msgstr "A new export file has been created." + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_sv.po b/components/ILIAS/Export/lang/exp_sv.po new file mode 100644 index 000000000000..e09d0aae8c91 --- /dev/null +++ b/components/ILIAS/Export/lang/exp_sv.po @@ -0,0 +1,94 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "Skapa exportfil" + +msgid "exp_error_disabled" +msgstr "Exporten av containerobjekt är avaktiverad. Om du har några frågor, vänligen kontakta den tekniska supporten." + +msgid "exp_error_too_many_objects" +msgstr "Exporten överskrider det maximalt tillåtna antalet objekt (%1). Välj ett mindre antal objekt." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +msgid "exp_export_files" +msgstr "Exportera filer" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +msgid "exp_file_created" +msgstr "En exportfil har skapats." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +msgid "exp_print_pdf" +msgstr "Print/PDF" + +msgid "exp_print_pdf_info" +msgstr "För att skapa en PDF, välj \"Spara som PDF\" som destination i utskriftsvyn." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +msgid "exp_really_delete" +msgstr "Vill du verkligen ta bort dessa exportfiler?" + +msgid "exp_show_print_view" +msgstr "Visa utskriftsvy" + +msgid "exp_xml" +msgstr "XML" + +msgid "export_created" +msgstr "En ny exportfil har skapats." + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_tr.po b/components/ILIAS/Export/lang/exp_tr.po new file mode 100644 index 000000000000..8f9c655f0e36 --- /dev/null +++ b/components/ILIAS/Export/lang/exp_tr.po @@ -0,0 +1,100 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "Dışa Aktarma Dosyası Oluştur" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +msgid "exp_export_files" +msgstr "Dosyaları Dışa Aktar" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +#, fuzzy +msgid "exp_file_created" +msgstr "The export file has been created." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +msgid "exp_really_delete" +msgstr "Bu dışa aktarım dosyalarını silmek istediğinizden emin misiniz?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +msgid "exp_xml" +msgstr "XML" + +msgid "export_created" +msgstr "yeni dışa aktarma dosyası oluşturuldu." + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_uk.po b/components/ILIAS/Export/lang/exp_uk.po new file mode 100644 index 000000000000..6ab969ed4d75 --- /dev/null +++ b/components/ILIAS/Export/lang/exp_uk.po @@ -0,0 +1,105 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: exp\n" + +#, fuzzy +msgid "exp_create_file" +msgstr "Create Export File" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +#, fuzzy +msgid "exp_export_files" +msgstr "Export Files" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +#, fuzzy +msgid "exp_file_created" +msgstr "The export file has been created." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +#, fuzzy +msgid "exp_really_delete" +msgstr "Do you really want to delete these export files?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +#, fuzzy +msgid "exp_xml" +msgstr "XML" + +#, fuzzy +msgid "export_created" +msgstr "A new export file has been created." + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_vi.po b/components/ILIAS/Export/lang/exp_vi.po new file mode 100644 index 000000000000..7bf284c633b2 --- /dev/null +++ b/components/ILIAS/Export/lang/exp_vi.po @@ -0,0 +1,105 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: exp\n" + +#, fuzzy +msgid "exp_create_file" +msgstr "Create Export File" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +#, fuzzy +msgid "exp_export_files" +msgstr "Export Files" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +#, fuzzy +msgid "exp_file_created" +msgstr "The export file has been created." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +#, fuzzy +msgid "exp_really_delete" +msgstr "Do you really want to delete these export files?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +#, fuzzy +msgid "exp_xml" +msgstr "XML" + +#, fuzzy +msgid "export_created" +msgstr "A new export file has been created." + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/exp_zh.po b/components/ILIAS/Export/lang/exp_zh.po new file mode 100644 index 000000000000..e208fcd9513e --- /dev/null +++ b/components/ILIAS/Export/lang/exp_zh.po @@ -0,0 +1,100 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: exp\n" + +msgid "exp_create_file" +msgstr "创建导出文件" + +#, fuzzy +msgid "exp_error_disabled" +msgstr "The export feature is disabled for containers. You may contact your system administrator." + +#, fuzzy +msgid "exp_error_too_many_objects" +msgstr "The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects." + +#, fuzzy +msgid "exp_export_dropdown" +msgstr "Export" + +msgid "exp_export_files" +msgstr "导出文件" + +#, fuzzy +msgid "exp_export_single_option" +msgstr "Export %s" + +#, fuzzy +msgid "exp_file_created" +msgstr "The export file has been created." + +#, fuzzy +msgid "exp_format_dropdown-csv" +msgstr "as CSV" + +#, fuzzy +msgid "exp_format_dropdown-html" +msgstr "as HTML" + +#, fuzzy +msgid "exp_format_dropdown-xls" +msgstr "as XLS" + +#, fuzzy +msgid "exp_format_dropdown-xml" +msgstr "as XML" + +#, fuzzy +msgid "exp_html" +msgstr "HTML" + +#, fuzzy +msgid "exp_import_validation_err_no_matching_xsd" +msgstr "No valid schema file for version %s exists." + +#, fuzzy +msgid "exp_not_public_access_status" +msgstr "Not published" + +#, fuzzy +msgid "exp_print_pdf" +msgstr "Print/PDF" + +#, fuzzy +msgid "exp_print_pdf_info" +msgstr "To create a PDF please use the \"Print to PDF\" target as soon as the print view is presented." + +#, fuzzy +msgid "exp_public_access_status" +msgstr "Available in ‘Info’-tab" + +msgid "exp_really_delete" +msgstr "您确定想删除这些导出文件吗?" + +#, fuzzy +msgid "exp_show_print_view" +msgstr "Show Print View" + +msgid "exp_xml" +msgstr "XML" + +msgid "export_created" +msgstr "一个新导出文件被创建。" + +#, fuzzy +msgid "export_files_deleted" +msgstr "The selected export files have been deleted." + +#, fuzzy +msgid "export_options" +msgstr "Export Options" + +#, fuzzy +msgid "export_type" +msgstr "Export Type" diff --git a/components/ILIAS/Export/lang/export.pot b/components/ILIAS/Export/lang/export.pot new file mode 100644 index 000000000000..968e5181c20c --- /dev/null +++ b/components/ILIAS/Export/lang/export.pot @@ -0,0 +1,69 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: export\n" + +msgid "exp_file" +msgstr "" + +msgid "exp_public_access" +msgstr "" + +msgid "exp_size" +msgstr "" + +msgid "exp_timestamp" +msgstr "" + +msgid "exp_toggle_public_access" +msgstr "" + +msgid "exp_type" +msgstr "" + +msgid "export_create" +msgstr "" + +msgid "export_create_new_file" +msgstr "" + +msgid "export_existing" +msgstr "" + +msgid "export_export_date" +msgstr "" + +msgid "export_info_public_access" +msgstr "" + +msgid "export_info_public_access_download" +msgstr "" + +msgid "export_last_export" +msgstr "" + +msgid "export_last_export_file" +msgstr "" + +msgid "export_last_file" +msgstr "" + +msgid "export_omit" +msgstr "" + +msgid "export_omit_resource" +msgstr "" + +msgid "export_resource" +msgstr "" + +msgid "export_save_selection" +msgstr "" + +msgid "export_select_resources" +msgstr "" + +msgid "no_file" +msgstr "" diff --git a/components/ILIAS/Export/lang/export_ar.po b/components/ILIAS/Export/lang/export_ar.po new file mode 100644 index 000000000000..5f4a95824eeb --- /dev/null +++ b/components/ILIAS/Export/lang/export_ar.po @@ -0,0 +1,81 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +msgid "export_create" +msgstr "انشاء" + +msgid "export_create_new_file" +msgstr "انشاء ملف تصدير جديد" + +msgid "export_existing" +msgstr "Reuse" + +msgid "export_export_date" +msgstr "Export Date" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +msgid "export_last_export" +msgstr "Last Export" + +msgid "export_last_export_file" +msgstr "Use Last Export File" + +msgid "export_last_file" +msgstr "Last File" + +msgid "export_omit" +msgstr "Omit" + +msgid "export_omit_resource" +msgstr "Omit Resource" + +msgid "export_resource" +msgstr "Resource" + +msgid "export_save_selection" +msgstr "Start Export" + +msgid "export_select_resources" +msgstr "إختر موارد" + +#, fuzzy +msgid "no_file" +msgstr "No file" diff --git a/components/ILIAS/Export/lang/export_bg.po b/components/ILIAS/Export/lang/export_bg.po new file mode 100644 index 000000000000..924020afba5b --- /dev/null +++ b/components/ILIAS/Export/lang/export_bg.po @@ -0,0 +1,93 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +#, fuzzy +msgid "export_create" +msgstr "Create" + +#, fuzzy +msgid "export_create_new_file" +msgstr "Create New Export File" + +#, fuzzy +msgid "export_existing" +msgstr "Reuse" + +#, fuzzy +msgid "export_export_date" +msgstr "Export Date" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +#, fuzzy +msgid "export_last_export" +msgstr "Last Export" + +#, fuzzy +msgid "export_last_export_file" +msgstr "Use Last Export File" + +#, fuzzy +msgid "export_last_file" +msgstr "Last File" + +#, fuzzy +msgid "export_omit" +msgstr "Omit" + +#, fuzzy +msgid "export_omit_resource" +msgstr "Omit Resource" + +#, fuzzy +msgid "export_resource" +msgstr "Resource" + +#, fuzzy +msgid "export_save_selection" +msgstr "Start Export" + +#, fuzzy +msgid "export_select_resources" +msgstr "Select Resources" + +#, fuzzy +msgid "no_file" +msgstr "No file" diff --git a/components/ILIAS/Export/lang/export_cs.po b/components/ILIAS/Export/lang/export_cs.po new file mode 100644 index 000000000000..e3d7c91a07fc --- /dev/null +++ b/components/ILIAS/Export/lang/export_cs.po @@ -0,0 +1,80 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +msgid "export_create" +msgstr "Vytvořit" + +msgid "export_create_new_file" +msgstr "Vytvořit nový exportní soubor" + +msgid "export_existing" +msgstr "Použít znovu" + +msgid "export_export_date" +msgstr "Datum exportování" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +msgid "export_last_export" +msgstr "Poslední export" + +msgid "export_last_export_file" +msgstr "Použít poslední exportní soubor" + +msgid "export_last_file" +msgstr "Poslední soubor" + +msgid "export_omit" +msgstr "Vynechat" + +msgid "export_omit_resource" +msgstr "Vynechat objekt" + +msgid "export_resource" +msgstr "Zdroj" + +msgid "export_save_selection" +msgstr "Spustit Export" + +msgid "export_select_resources" +msgstr "Vybrat objekt" + +msgid "no_file" +msgstr "Žádný soubor" diff --git a/components/ILIAS/Export/lang/export_da.po b/components/ILIAS/Export/lang/export_da.po new file mode 100644 index 000000000000..22abd399e233 --- /dev/null +++ b/components/ILIAS/Export/lang/export_da.po @@ -0,0 +1,83 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +msgid "export_create" +msgstr "Lav" + +msgid "export_create_new_file" +msgstr "Lav ny eksportfil" + +#, fuzzy +msgid "export_existing" +msgstr "Reuse" + +msgid "export_export_date" +msgstr "Eksportdato" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +msgid "export_last_export" +msgstr "Sidste eksport" + +msgid "export_last_export_file" +msgstr "Brug sidste eksportfil" + +msgid "export_last_file" +msgstr "Sidste fil" + +msgid "export_omit" +msgstr "Udelad" + +msgid "export_omit_resource" +msgstr "Udelad resurse" + +msgid "export_resource" +msgstr "Resurse" + +#, fuzzy +msgid "export_save_selection" +msgstr "Start Export" + +msgid "export_select_resources" +msgstr "Vælg resurser" + +#, fuzzy +msgid "no_file" +msgstr "No file" diff --git a/components/ILIAS/Export/lang/export_de.po b/components/ILIAS/Export/lang/export_de.po new file mode 100644 index 000000000000..5ff2b5691d45 --- /dev/null +++ b/components/ILIAS/Export/lang/export_de.po @@ -0,0 +1,72 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: export\n" + +msgid "exp_file" +msgstr "Dateiname" + +msgid "exp_public_access" +msgstr "Öffentlicher Zugriff aktiv" + +msgid "exp_size" +msgstr "Dateigröße (MB)" + +msgid "exp_timestamp" +msgstr "Erstellungsdatum" + +msgid "exp_toggle_public_access" +msgstr "Öffentlichen Zugriff (de-)aktivieren" + +msgid "exp_type" +msgstr "Type" + +msgid "export_create" +msgstr "Neu erstellen" + +msgid "export_create_new_file" +msgstr "Neue Exportdatei erstellen" + +msgid "export_existing" +msgstr "Wiederverwenden" + +msgid "export_export_date" +msgstr "Exportdatum" + +msgid "export_info_public_access" +msgstr "Öffentliche Exportdatei" + +msgid "export_info_public_access_download" +msgstr "Download" + +msgid "export_last_export" +msgstr "Letzter Export" + +msgid "export_last_export_file" +msgstr "Letzte Exportdatei benutzen" + +msgid "export_last_file" +msgstr "Letzte Datei" + +msgid "export_omit" +msgstr "Auslassen" + +msgid "export_omit_resource" +msgstr "Objekt auslassen" + +msgid "export_resource" +msgstr "Ressource" + +msgid "export_save_selection" +msgstr "Export starten" + +msgid "export_select_resources" +msgstr "Objekte auswählen" + +msgid "no_file" +msgstr "Keine Datei" diff --git a/components/ILIAS/Export/lang/export_el.po b/components/ILIAS/Export/lang/export_el.po new file mode 100644 index 000000000000..57f45c19afd7 --- /dev/null +++ b/components/ILIAS/Export/lang/export_el.po @@ -0,0 +1,93 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +#, fuzzy +msgid "export_create" +msgstr "Create" + +#, fuzzy +msgid "export_create_new_file" +msgstr "Create New Export File" + +#, fuzzy +msgid "export_existing" +msgstr "Reuse" + +#, fuzzy +msgid "export_export_date" +msgstr "Export Date" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +#, fuzzy +msgid "export_last_export" +msgstr "Last Export" + +#, fuzzy +msgid "export_last_export_file" +msgstr "Use Last Export File" + +#, fuzzy +msgid "export_last_file" +msgstr "Last File" + +#, fuzzy +msgid "export_omit" +msgstr "Omit" + +#, fuzzy +msgid "export_omit_resource" +msgstr "Omit Resource" + +#, fuzzy +msgid "export_resource" +msgstr "Resource" + +#, fuzzy +msgid "export_save_selection" +msgstr "Start Export" + +#, fuzzy +msgid "export_select_resources" +msgstr "Select Resources" + +#, fuzzy +msgid "no_file" +msgstr "No file" diff --git a/components/ILIAS/Export/lang/export_en.po b/components/ILIAS/Export/lang/export_en.po new file mode 100644 index 000000000000..07183b544e8f --- /dev/null +++ b/components/ILIAS/Export/lang/export_en.po @@ -0,0 +1,72 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: export\n" + +msgid "exp_file" +msgstr "File Name" + +msgid "exp_public_access" +msgstr "Public Access" + +msgid "exp_size" +msgstr "File Size (MB)" + +msgid "exp_timestamp" +msgstr "Creation Date" + +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +msgid "exp_type" +msgstr "Type" + +msgid "export_create" +msgstr "Create" + +msgid "export_create_new_file" +msgstr "Create New Export File" + +msgid "export_existing" +msgstr "Reuse" + +msgid "export_export_date" +msgstr "Export Date" + +msgid "export_info_public_access" +msgstr "Public Export" + +msgid "export_info_public_access_download" +msgstr "Download" + +msgid "export_last_export" +msgstr "Last Export" + +msgid "export_last_export_file" +msgstr "Use Last Export File" + +msgid "export_last_file" +msgstr "Last File" + +msgid "export_omit" +msgstr "Omit" + +msgid "export_omit_resource" +msgstr "Omit Resource" + +msgid "export_resource" +msgstr "Resource" + +msgid "export_save_selection" +msgstr "Start Export" + +msgid "export_select_resources" +msgstr "Select Resources" + +msgid "no_file" +msgstr "No file" diff --git a/components/ILIAS/Export/lang/export_es.po b/components/ILIAS/Export/lang/export_es.po new file mode 100644 index 000000000000..2c6f1c6a5c6c --- /dev/null +++ b/components/ILIAS/Export/lang/export_es.po @@ -0,0 +1,72 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: export\n" + +msgid "exp_file" +msgstr "Nombre del archivo" + +msgid "exp_public_access" +msgstr "Disponible en la pestaña 'Información'" + +msgid "exp_size" +msgstr "Tamaño del archivo (MB)" + +msgid "exp_timestamp" +msgstr "Fecha de creación" + +msgid "exp_toggle_public_access" +msgstr "Alternar acceso público" + +msgid "exp_type" +msgstr "Tipo" + +msgid "export_create" +msgstr "Crear" + +msgid "export_create_new_file" +msgstr "Crear nuevo archivo de exportación" + +msgid "export_existing" +msgstr "Reutilizar" + +msgid "export_export_date" +msgstr "Fecha de exportación" + +msgid "export_info_public_access" +msgstr "Exportación pública" + +msgid "export_info_public_access_download" +msgstr "Descargar" + +msgid "export_last_export" +msgstr "Última exportación" + +msgid "export_last_export_file" +msgstr "Usar el último archivo de exportación" + +msgid "export_last_file" +msgstr "Último archivo" + +msgid "export_omit" +msgstr "Omitir" + +msgid "export_omit_resource" +msgstr "Omitir recurso" + +msgid "export_resource" +msgstr "Recurso" + +msgid "export_save_selection" +msgstr "Iniciar exportación" + +msgid "export_select_resources" +msgstr "Seleccionar recursos" + +msgid "no_file" +msgstr "Ningún archivo" diff --git a/components/ILIAS/Export/lang/export_et.po b/components/ILIAS/Export/lang/export_et.po new file mode 100644 index 000000000000..019e9c7a5c11 --- /dev/null +++ b/components/ILIAS/Export/lang/export_et.po @@ -0,0 +1,81 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +msgid "export_create" +msgstr "Loo" + +msgid "export_create_new_file" +msgstr "Loo uus eksportfail" + +msgid "export_existing" +msgstr "Kasuta uuesti" + +msgid "export_export_date" +msgstr "Eksportimise kuupäev" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +msgid "export_last_export" +msgstr "Viimane eksport" + +msgid "export_last_export_file" +msgstr "Kasuta viimast ekspordi faili" + +msgid "export_last_file" +msgstr "Viimane fail" + +msgid "export_omit" +msgstr "Jäta vahele" + +msgid "export_omit_resource" +msgstr "Jäta allikas välja" + +msgid "export_resource" +msgstr "Allikas" + +msgid "export_save_selection" +msgstr "Alusta eksporti" + +msgid "export_select_resources" +msgstr "Valige allikad" + +#, fuzzy +msgid "no_file" +msgstr "No file" diff --git a/components/ILIAS/Export/lang/export_fa.po b/components/ILIAS/Export/lang/export_fa.po new file mode 100644 index 000000000000..0e9e5fb96a7c --- /dev/null +++ b/components/ILIAS/Export/lang/export_fa.po @@ -0,0 +1,81 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +msgid "export_create" +msgstr "Create" + +msgid "export_create_new_file" +msgstr "ساختن فایل صدور جدید" + +msgid "export_existing" +msgstr "Reuse" + +msgid "export_export_date" +msgstr "صدور تاریخ" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +msgid "export_last_export" +msgstr "آخرین صدور" + +msgid "export_last_export_file" +msgstr "Use Last Export File" + +msgid "export_last_file" +msgstr "Last File" + +msgid "export_omit" +msgstr "Omit" + +msgid "export_omit_resource" +msgstr "Omit Resource" + +msgid "export_resource" +msgstr "Resource" + +msgid "export_save_selection" +msgstr "Start Export" + +msgid "export_select_resources" +msgstr "Select Resources" + +#, fuzzy +msgid "no_file" +msgstr "No file" diff --git a/components/ILIAS/Export/lang/export_fr.po b/components/ILIAS/Export/lang/export_fr.po new file mode 100644 index 000000000000..f01c64129ae2 --- /dev/null +++ b/components/ILIAS/Export/lang/export_fr.po @@ -0,0 +1,80 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +msgid "export_create" +msgstr "Créer" + +msgid "export_create_new_file" +msgstr "Créer nouveau fichier d'export" + +msgid "export_existing" +msgstr "Réutiliser" + +msgid "export_export_date" +msgstr "Exporter date" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +msgid "export_last_export" +msgstr "Dernier export" + +msgid "export_last_export_file" +msgstr "Utiliser dernier fichier d'export" + +msgid "export_last_file" +msgstr "Dernier fichier" + +msgid "export_omit" +msgstr "Omettre" + +msgid "export_omit_resource" +msgstr "Omettre objet" + +msgid "export_resource" +msgstr "Objet" + +msgid "export_save_selection" +msgstr "Exporter" + +msgid "export_select_resources" +msgstr "Sélectionner objets" + +msgid "no_file" +msgstr "Pas de fichier" diff --git a/components/ILIAS/Export/lang/export_hr.po b/components/ILIAS/Export/lang/export_hr.po new file mode 100644 index 000000000000..9a79dfdc625f --- /dev/null +++ b/components/ILIAS/Export/lang/export_hr.po @@ -0,0 +1,80 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +msgid "export_create" +msgstr "Kreiraj" + +msgid "export_create_new_file" +msgstr "Kreiraj novu datoteku za izvoz" + +msgid "export_existing" +msgstr "Ponovna upotreba" + +msgid "export_export_date" +msgstr "Datum izvoza" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +msgid "export_last_export" +msgstr "Posljednji izvoz" + +msgid "export_last_export_file" +msgstr "Koristi posljednju datoteku za izvoz" + +msgid "export_last_file" +msgstr "Posljednja datoteka" + +msgid "export_omit" +msgstr "Izostavi" + +msgid "export_omit_resource" +msgstr "Izostavi resurs" + +msgid "export_resource" +msgstr "Resurs" + +msgid "export_save_selection" +msgstr "Pokreni izvoz" + +msgid "export_select_resources" +msgstr "Odaberi resurse" + +msgid "no_file" +msgstr "Nema datoteke" diff --git a/components/ILIAS/Export/lang/export_hu.po b/components/ILIAS/Export/lang/export_hu.po new file mode 100644 index 000000000000..eed58b531b74 --- /dev/null +++ b/components/ILIAS/Export/lang/export_hu.po @@ -0,0 +1,72 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: export\n" + +msgid "exp_file" +msgstr "Fáj neve" + +msgid "exp_public_access" +msgstr "Elérhető az ‘Információó’ lapon" + +msgid "exp_size" +msgstr "Fájl mérete (MB)" + +msgid "exp_timestamp" +msgstr "Létrehozás dátuma" + +msgid "exp_toggle_public_access" +msgstr "Nyilvános elérés módosítása" + +msgid "exp_type" +msgstr "Típus" + +msgid "export_create" +msgstr "Létrehozás" + +msgid "export_create_new_file" +msgstr "Új exportfájl létrehozása" + +msgid "export_existing" +msgstr "Újrafelhasználás" + +msgid "export_export_date" +msgstr "Exportálási dátum" + +msgid "export_info_public_access" +msgstr "Exportálás nyilvános elérése" + +msgid "export_info_public_access_download" +msgstr "Letöltés" + +msgid "export_last_export" +msgstr "Utolsó exportálás" + +msgid "export_last_export_file" +msgstr "Utolsó exportfájl használata" + +msgid "export_last_file" +msgstr "Utolsó fájl" + +msgid "export_omit" +msgstr "Kihagyás" + +msgid "export_omit_resource" +msgstr "Forrás kihagyása" + +msgid "export_resource" +msgstr "Forrás" + +msgid "export_save_selection" +msgstr "Export indítása" + +msgid "export_select_resources" +msgstr "Források kiválasztása" + +msgid "no_file" +msgstr "Nincs fájl" diff --git a/components/ILIAS/Export/lang/export_it.po b/components/ILIAS/Export/lang/export_it.po new file mode 100644 index 000000000000..286196a8f495 --- /dev/null +++ b/components/ILIAS/Export/lang/export_it.po @@ -0,0 +1,80 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +msgid "export_create" +msgstr "Crea" + +msgid "export_create_new_file" +msgstr "Crea Nuovo File di Esportazione" + +msgid "export_existing" +msgstr "Riutilizza" + +msgid "export_export_date" +msgstr "Data di Esportazione" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +msgid "export_last_export" +msgstr "Ultima esportazione" + +msgid "export_last_export_file" +msgstr "Usa Data dell'Ultima Esportazione" + +msgid "export_last_file" +msgstr "Ultlimo File" + +msgid "export_omit" +msgstr "Ometti" + +msgid "export_omit_resource" +msgstr "Ometti Risorsa" + +msgid "export_resource" +msgstr "Risorsa" + +msgid "export_save_selection" +msgstr "Inizia Export" + +msgid "export_select_resources" +msgstr "Seleziona Risorsa" + +msgid "no_file" +msgstr "Nessun file" diff --git a/components/ILIAS/Export/lang/export_ja.po b/components/ILIAS/Export/lang/export_ja.po new file mode 100644 index 000000000000..b3d3af20d90d --- /dev/null +++ b/components/ILIAS/Export/lang/export_ja.po @@ -0,0 +1,72 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: export\n" + +msgid "exp_file" +msgstr "ファイル名" + +msgid "exp_public_access" +msgstr "公開アクセス" + +msgid "exp_size" +msgstr "ファイルサイズ(MB)" + +msgid "exp_timestamp" +msgstr "作成日" + +msgid "exp_toggle_public_access" +msgstr "公開アクセスを切り替え" + +msgid "exp_type" +msgstr "タイプ" + +msgid "export_create" +msgstr "作成" + +msgid "export_create_new_file" +msgstr "新規エクスポート ファイルを作成" + +msgid "export_existing" +msgstr "再利用" + +msgid "export_export_date" +msgstr "エクスポート日" + +msgid "export_info_public_access" +msgstr "公開アクセスエクスポート" + +msgid "export_info_public_access_download" +msgstr "ダウンロード" + +msgid "export_last_export" +msgstr "最終エクスポート" + +msgid "export_last_export_file" +msgstr "最終のエクスポート ファイルを使用" + +msgid "export_last_file" +msgstr "最終ファイル" + +msgid "export_omit" +msgstr "省略" + +msgid "export_omit_resource" +msgstr "リソースを省略" + +msgid "export_resource" +msgstr "リソース" + +msgid "export_save_selection" +msgstr "エクスポート開始" + +msgid "export_select_resources" +msgstr "リソースを選択" + +msgid "no_file" +msgstr "No file" diff --git a/components/ILIAS/Export/lang/export_ka.po b/components/ILIAS/Export/lang/export_ka.po new file mode 100644 index 000000000000..abaf2c029325 --- /dev/null +++ b/components/ILIAS/Export/lang/export_ka.po @@ -0,0 +1,81 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +msgid "export_create" +msgstr "შექმნა" + +msgid "export_create_new_file" +msgstr "ახალი საექსპორტო ფაილის შექმნა" + +msgid "export_existing" +msgstr "ხელახლა გამოყენება" + +msgid "export_export_date" +msgstr "ესპორტის თარიღი" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +msgid "export_last_export" +msgstr "ბოლო ექსპორტი" + +msgid "export_last_export_file" +msgstr "ბოლო ექსპორტის ფაილის გამოყენება" + +msgid "export_last_file" +msgstr "ბოლო ფაილი" + +msgid "export_omit" +msgstr "გამოტოვება" + +msgid "export_omit_resource" +msgstr "რესურსის გამოტოვება" + +msgid "export_resource" +msgstr "რესურსი" + +msgid "export_save_selection" +msgstr "ექსპორტი დაწყება" + +msgid "export_select_resources" +msgstr "რესურსების მონიშვნა" + +#, fuzzy +msgid "no_file" +msgstr "No file" diff --git a/components/ILIAS/Export/lang/export_lt.po b/components/ILIAS/Export/lang/export_lt.po new file mode 100644 index 000000000000..d23832785a88 --- /dev/null +++ b/components/ILIAS/Export/lang/export_lt.po @@ -0,0 +1,93 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +#, fuzzy +msgid "export_create" +msgstr "Create" + +#, fuzzy +msgid "export_create_new_file" +msgstr "Create New Export File" + +#, fuzzy +msgid "export_existing" +msgstr "Reuse" + +#, fuzzy +msgid "export_export_date" +msgstr "Export Date" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +#, fuzzy +msgid "export_last_export" +msgstr "Last Export" + +#, fuzzy +msgid "export_last_export_file" +msgstr "Use Last Export File" + +#, fuzzy +msgid "export_last_file" +msgstr "Last File" + +#, fuzzy +msgid "export_omit" +msgstr "Omit" + +#, fuzzy +msgid "export_omit_resource" +msgstr "Omit Resource" + +#, fuzzy +msgid "export_resource" +msgstr "Resource" + +#, fuzzy +msgid "export_save_selection" +msgstr "Start Export" + +#, fuzzy +msgid "export_select_resources" +msgstr "Select Resources" + +#, fuzzy +msgid "no_file" +msgstr "No file" diff --git a/components/ILIAS/Export/lang/export_nl.po b/components/ILIAS/Export/lang/export_nl.po new file mode 100644 index 000000000000..a5584a15b82c --- /dev/null +++ b/components/ILIAS/Export/lang/export_nl.po @@ -0,0 +1,81 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +msgid "export_create" +msgstr "Create" + +msgid "export_create_new_file" +msgstr "Aanmaken van nieuw exportbestand" + +msgid "export_existing" +msgstr "Hergebruiken" + +msgid "export_export_date" +msgstr "Exportdatum" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +msgid "export_last_export" +msgstr "Laatste export" + +msgid "export_last_export_file" +msgstr "Gebruik laatste exportbestand" + +msgid "export_last_file" +msgstr "Last File" + +msgid "export_omit" +msgstr "Omit" + +msgid "export_omit_resource" +msgstr "Hulpmiddel weglaten" + +msgid "export_resource" +msgstr "Hulpmiddel" + +msgid "export_save_selection" +msgstr "Exporteren" + +msgid "export_select_resources" +msgstr "Selecteer hulpmiddelen" + +#, fuzzy +msgid "no_file" +msgstr "No file" diff --git a/components/ILIAS/Export/lang/export_pl.po b/components/ILIAS/Export/lang/export_pl.po new file mode 100644 index 000000000000..524fb35f26df --- /dev/null +++ b/components/ILIAS/Export/lang/export_pl.po @@ -0,0 +1,80 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +msgid "export_create" +msgstr "Utwórz nowy" + +msgid "export_create_new_file" +msgstr "Utwórz nowy plik eksportowy" + +msgid "export_existing" +msgstr "Użyj ponownie" + +msgid "export_export_date" +msgstr "Data eksportu" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +msgid "export_last_export" +msgstr "Ostatni eksport" + +msgid "export_last_export_file" +msgstr "Użyj ostatniego pliku eksportu" + +msgid "export_last_file" +msgstr "Ostatni plik" + +msgid "export_omit" +msgstr "Pomiń" + +msgid "export_omit_resource" +msgstr "Pomiń obiekt" + +msgid "export_resource" +msgstr "Źródło" + +msgid "export_save_selection" +msgstr "Uruchom eksport" + +msgid "export_select_resources" +msgstr "Wybierz obiekty" + +msgid "no_file" +msgstr "Brak pliku" diff --git a/components/ILIAS/Export/lang/export_pt.po b/components/ILIAS/Export/lang/export_pt.po new file mode 100644 index 000000000000..a84ad98153c9 --- /dev/null +++ b/components/ILIAS/Export/lang/export_pt.po @@ -0,0 +1,80 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Available in ‘Info’-tab" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +msgid "export_create" +msgstr "Criar" + +msgid "export_create_new_file" +msgstr "Criar ficheiro de exportação novo" + +msgid "export_existing" +msgstr "Reutilizar" + +msgid "export_export_date" +msgstr "Exportar data" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +msgid "export_last_export" +msgstr "Última exportação" + +msgid "export_last_export_file" +msgstr "Usar o último ficheiro de exportação" + +msgid "export_last_file" +msgstr "Último ficheiro" + +msgid "export_omit" +msgstr "Omitir" + +msgid "export_omit_resource" +msgstr "Omitir recurso" + +msgid "export_resource" +msgstr "Recurso" + +msgid "export_save_selection" +msgstr "Iniciar exportação" + +msgid "export_select_resources" +msgstr "Selecionar recursos" + +msgid "no_file" +msgstr "Nenhum ficheiro" diff --git a/components/ILIAS/Export/lang/export_ro.po b/components/ILIAS/Export/lang/export_ro.po new file mode 100644 index 000000000000..f6ee67b2acdf --- /dev/null +++ b/components/ILIAS/Export/lang/export_ro.po @@ -0,0 +1,93 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +#, fuzzy +msgid "export_create" +msgstr "Create" + +#, fuzzy +msgid "export_create_new_file" +msgstr "Create New Export File" + +#, fuzzy +msgid "export_existing" +msgstr "Reuse" + +#, fuzzy +msgid "export_export_date" +msgstr "Export Date" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +#, fuzzy +msgid "export_last_export" +msgstr "Last Export" + +#, fuzzy +msgid "export_last_export_file" +msgstr "Use Last Export File" + +#, fuzzy +msgid "export_last_file" +msgstr "Last File" + +#, fuzzy +msgid "export_omit" +msgstr "Omit" + +#, fuzzy +msgid "export_omit_resource" +msgstr "Omit Resource" + +#, fuzzy +msgid "export_resource" +msgstr "Resource" + +#, fuzzy +msgid "export_save_selection" +msgstr "Start Export" + +#, fuzzy +msgid "export_select_resources" +msgstr "Select Resources" + +#, fuzzy +msgid "no_file" +msgstr "No file" diff --git a/components/ILIAS/Export/lang/export_ru.po b/components/ILIAS/Export/lang/export_ru.po new file mode 100644 index 000000000000..2f6234589340 --- /dev/null +++ b/components/ILIAS/Export/lang/export_ru.po @@ -0,0 +1,81 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +msgid "export_create" +msgstr "Create" + +msgid "export_create_new_file" +msgstr "Create New Export File" + +msgid "export_existing" +msgstr "Reuse" + +msgid "export_export_date" +msgstr "Export Date" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +msgid "export_last_export" +msgstr "Last Export" + +msgid "export_last_export_file" +msgstr "Use Last Export File" + +msgid "export_last_file" +msgstr "Last File" + +msgid "export_omit" +msgstr "Omit" + +msgid "export_omit_resource" +msgstr "Omit Resource" + +msgid "export_resource" +msgstr "Resource" + +msgid "export_save_selection" +msgstr "Start Export" + +msgid "export_select_resources" +msgstr "Select Resources" + +#, fuzzy +msgid "no_file" +msgstr "No file" diff --git a/components/ILIAS/Export/lang/export_sk.po b/components/ILIAS/Export/lang/export_sk.po new file mode 100644 index 000000000000..2a7e39a348a7 --- /dev/null +++ b/components/ILIAS/Export/lang/export_sk.po @@ -0,0 +1,81 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +msgid "export_create" +msgstr "Vytvořit" + +msgid "export_create_new_file" +msgstr "Vytvořit nový exportní soubor" + +msgid "export_existing" +msgstr "Použít znovu" + +msgid "export_export_date" +msgstr "Export termínu" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +msgid "export_last_export" +msgstr "Poslední export" + +msgid "export_last_export_file" +msgstr "Použít poslední exportní soubor" + +msgid "export_last_file" +msgstr "Poslední soubor" + +msgid "export_omit" +msgstr "Vynechat" + +msgid "export_omit_resource" +msgstr "Vynechat zdroj" + +msgid "export_resource" +msgstr "Zdroj" + +msgid "export_save_selection" +msgstr "Spustit Export" + +msgid "export_select_resources" +msgstr "Vybrat zdroj" + +#, fuzzy +msgid "no_file" +msgstr "No file" diff --git a/components/ILIAS/Export/lang/export_sl.po b/components/ILIAS/Export/lang/export_sl.po new file mode 100644 index 000000000000..d1608233c08e --- /dev/null +++ b/components/ILIAS/Export/lang/export_sl.po @@ -0,0 +1,80 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +msgid "export_create" +msgstr "Ustvari novo" + +msgid "export_create_new_file" +msgstr "Ustvari novo datoteko za izvoz" + +msgid "export_existing" +msgstr "Ponovno uporabi" + +msgid "export_export_date" +msgstr "Datum izvoza" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +msgid "export_last_export" +msgstr "Zadnji izvoz" + +msgid "export_last_export_file" +msgstr "Uporabite zadnjo datoteko za izvoz" + +msgid "export_last_file" +msgstr "Zadnja datoteka" + +msgid "export_omit" +msgstr "Izpusti" + +msgid "export_omit_resource" +msgstr "Izpusti objekt" + +msgid "export_resource" +msgstr "Vir" + +msgid "export_save_selection" +msgstr "Začni izvoz" + +msgid "export_select_resources" +msgstr "Izberi objekte" + +msgid "no_file" +msgstr "Ni datoteke" diff --git a/components/ILIAS/Export/lang/export_sq.po b/components/ILIAS/Export/lang/export_sq.po new file mode 100644 index 000000000000..28e91571ddd1 --- /dev/null +++ b/components/ILIAS/Export/lang/export_sq.po @@ -0,0 +1,93 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +#, fuzzy +msgid "export_create" +msgstr "Create" + +#, fuzzy +msgid "export_create_new_file" +msgstr "Create New Export File" + +#, fuzzy +msgid "export_existing" +msgstr "Reuse" + +#, fuzzy +msgid "export_export_date" +msgstr "Export Date" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +#, fuzzy +msgid "export_last_export" +msgstr "Last Export" + +#, fuzzy +msgid "export_last_export_file" +msgstr "Use Last Export File" + +#, fuzzy +msgid "export_last_file" +msgstr "Last File" + +#, fuzzy +msgid "export_omit" +msgstr "Omit" + +#, fuzzy +msgid "export_omit_resource" +msgstr "Omit Resource" + +#, fuzzy +msgid "export_resource" +msgstr "Resource" + +#, fuzzy +msgid "export_save_selection" +msgstr "Start Export" + +#, fuzzy +msgid "export_select_resources" +msgstr "Select Resources" + +#, fuzzy +msgid "no_file" +msgstr "No file" diff --git a/components/ILIAS/Export/lang/export_sr.po b/components/ILIAS/Export/lang/export_sr.po new file mode 100644 index 000000000000..ae361039083d --- /dev/null +++ b/components/ILIAS/Export/lang/export_sr.po @@ -0,0 +1,93 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +#, fuzzy +msgid "export_create" +msgstr "Create" + +#, fuzzy +msgid "export_create_new_file" +msgstr "Create New Export File" + +#, fuzzy +msgid "export_existing" +msgstr "Reuse" + +#, fuzzy +msgid "export_export_date" +msgstr "Export Date" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +#, fuzzy +msgid "export_last_export" +msgstr "Last Export" + +#, fuzzy +msgid "export_last_export_file" +msgstr "Use Last Export File" + +#, fuzzy +msgid "export_last_file" +msgstr "Last File" + +#, fuzzy +msgid "export_omit" +msgstr "Omit" + +#, fuzzy +msgid "export_omit_resource" +msgstr "Omit Resource" + +#, fuzzy +msgid "export_resource" +msgstr "Resource" + +#, fuzzy +msgid "export_save_selection" +msgstr "Start Export" + +#, fuzzy +msgid "export_select_resources" +msgstr "Select Resources" + +#, fuzzy +msgid "no_file" +msgstr "No file" diff --git a/components/ILIAS/Export/lang/export_sv.po b/components/ILIAS/Export/lang/export_sv.po new file mode 100644 index 000000000000..e51da7261f92 --- /dev/null +++ b/components/ILIAS/Export/lang/export_sv.po @@ -0,0 +1,80 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +msgid "export_create" +msgstr "Skapa ny" + +msgid "export_create_new_file" +msgstr "Skapa ny exportfil" + +msgid "export_existing" +msgstr "Återanvändning" + +msgid "export_export_date" +msgstr "Exportdatum" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +msgid "export_last_export" +msgstr "Senaste export" + +msgid "export_last_export_file" +msgstr "Använd den senaste exportfilen" + +msgid "export_last_file" +msgstr "Sista filen" + +msgid "export_omit" +msgstr "Uppdrag" + +msgid "export_omit_resource" +msgstr "Omit objekt" + +msgid "export_resource" +msgstr "Resurs" + +msgid "export_save_selection" +msgstr "Starta export" + +msgid "export_select_resources" +msgstr "Välj objekt" + +msgid "no_file" +msgstr "Ingen fil" diff --git a/components/ILIAS/Export/lang/export_tr.po b/components/ILIAS/Export/lang/export_tr.po new file mode 100644 index 000000000000..01125c159178 --- /dev/null +++ b/components/ILIAS/Export/lang/export_tr.po @@ -0,0 +1,81 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +msgid "export_create" +msgstr "Oluştur" + +msgid "export_create_new_file" +msgstr "Yeni Dışa Aktarma Dosyası Oluştur" + +msgid "export_existing" +msgstr "Yeniden" + +msgid "export_export_date" +msgstr "Verme Tarihi" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +msgid "export_last_export" +msgstr "Son Dışa Aktarma" + +msgid "export_last_export_file" +msgstr "kullanımlar Son Verme Dosyası" + +msgid "export_last_file" +msgstr "Son Dosya" + +msgid "export_omit" +msgstr "Gözardı" + +msgid "export_omit_resource" +msgstr "Kaynak Gözardı" + +msgid "export_resource" +msgstr "Kaynak" + +msgid "export_save_selection" +msgstr "Dışarı Aktarıma Başla" + +msgid "export_select_resources" +msgstr "Seç Kaynakları" + +#, fuzzy +msgid "no_file" +msgstr "No file" diff --git a/components/ILIAS/Export/lang/export_uk.po b/components/ILIAS/Export/lang/export_uk.po new file mode 100644 index 000000000000..858a0c2f8845 --- /dev/null +++ b/components/ILIAS/Export/lang/export_uk.po @@ -0,0 +1,93 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +#, fuzzy +msgid "export_create" +msgstr "Create" + +#, fuzzy +msgid "export_create_new_file" +msgstr "Create New Export File" + +#, fuzzy +msgid "export_existing" +msgstr "Reuse" + +#, fuzzy +msgid "export_export_date" +msgstr "Export Date" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +#, fuzzy +msgid "export_last_export" +msgstr "Last Export" + +#, fuzzy +msgid "export_last_export_file" +msgstr "Use Last Export File" + +#, fuzzy +msgid "export_last_file" +msgstr "Last File" + +#, fuzzy +msgid "export_omit" +msgstr "Omit" + +#, fuzzy +msgid "export_omit_resource" +msgstr "Omit Resource" + +#, fuzzy +msgid "export_resource" +msgstr "Resource" + +#, fuzzy +msgid "export_save_selection" +msgstr "Start Export" + +#, fuzzy +msgid "export_select_resources" +msgstr "Select Resources" + +#, fuzzy +msgid "no_file" +msgstr "No file" diff --git a/components/ILIAS/Export/lang/export_vi.po b/components/ILIAS/Export/lang/export_vi.po new file mode 100644 index 000000000000..577476dac884 --- /dev/null +++ b/components/ILIAS/Export/lang/export_vi.po @@ -0,0 +1,93 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +#, fuzzy +msgid "export_create" +msgstr "Create" + +#, fuzzy +msgid "export_create_new_file" +msgstr "Create New Export File" + +#, fuzzy +msgid "export_existing" +msgstr "Reuse" + +#, fuzzy +msgid "export_export_date" +msgstr "Export Date" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +#, fuzzy +msgid "export_last_export" +msgstr "Last Export" + +#, fuzzy +msgid "export_last_export_file" +msgstr "Use Last Export File" + +#, fuzzy +msgid "export_last_file" +msgstr "Last File" + +#, fuzzy +msgid "export_omit" +msgstr "Omit" + +#, fuzzy +msgid "export_omit_resource" +msgstr "Omit Resource" + +#, fuzzy +msgid "export_resource" +msgstr "Resource" + +#, fuzzy +msgid "export_save_selection" +msgstr "Start Export" + +#, fuzzy +msgid "export_select_resources" +msgstr "Select Resources" + +#, fuzzy +msgid "no_file" +msgstr "No file" diff --git a/components/ILIAS/Export/lang/export_zh.po b/components/ILIAS/Export/lang/export_zh.po new file mode 100644 index 000000000000..793897515811 --- /dev/null +++ b/components/ILIAS/Export/lang/export_zh.po @@ -0,0 +1,81 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: export\n" + +#, fuzzy +msgid "exp_file" +msgstr "File Name" + +#, fuzzy +msgid "exp_public_access" +msgstr "Public Access" + +#, fuzzy +msgid "exp_size" +msgstr "File Size (MB)" + +#, fuzzy +msgid "exp_timestamp" +msgstr "Creation Date" + +#, fuzzy +msgid "exp_toggle_public_access" +msgstr "Toggle Public Access" + +#, fuzzy +msgid "exp_type" +msgstr "Type" + +msgid "export_create" +msgstr "创建" + +msgid "export_create_new_file" +msgstr "创建新的导出文件" + +msgid "export_existing" +msgstr "重用" + +msgid "export_export_date" +msgstr "导出日期" + +#, fuzzy +msgid "export_info_public_access" +msgstr "Public Access Export" + +#, fuzzy +msgid "export_info_public_access_download" +msgstr "Download" + +msgid "export_last_export" +msgstr "最后导出的" + +msgid "export_last_export_file" +msgstr "使用最后导出的文件" + +msgid "export_last_file" +msgstr "最后文件" + +msgid "export_omit" +msgstr "省略" + +msgid "export_omit_resource" +msgstr "省略资源" + +msgid "export_resource" +msgstr "资源" + +msgid "export_save_selection" +msgstr "开始导出" + +msgid "export_select_resources" +msgstr "选择资源" + +#, fuzzy +msgid "no_file" +msgstr "No file" diff --git a/components/ILIAS/FileServices/FileServices.php b/components/ILIAS/FileServices/FileServices.php index fea14d63d484..5bf12a54f30d 100644 --- a/components/ILIAS/FileServices/FileServices.php +++ b/components/ILIAS/FileServices/FileServices.php @@ -31,6 +31,8 @@ use ILIAS\Filesystem\Configuration\FilesystemConfig; use ILIAS\FileServices\Policy\UploadRestrictionBypass; use ILIAS\FileServices\Policy\UploadRestrictionBypassLegacyProxy; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; class FileServices implements Component { @@ -58,5 +60,9 @@ public function init( $contribute[PreProcessor::class] = static fn() => new FileServicesPreProcessor($use[FilesystemConfig::class]); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'fils' + ); } } diff --git a/components/ILIAS/FileServices/lang/fils.pot b/components/ILIAS/FileServices/lang/fils.pot new file mode 100644 index 000000000000..89919e667dbb --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils.pot @@ -0,0 +1,102 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: fils\n" + +msgid "add_upload_policy" +msgstr "" + +msgid "edit_upload_policy" +msgstr "" + +msgid "file_services" +msgstr "" + +msgid "file_services_description" +msgstr "" + +msgid "file_suffix_custom_expl_negative" +msgstr "" + +msgid "file_suffix_custom_expl_negative_info" +msgstr "" + +msgid "file_suffix_custom_negative" +msgstr "" + +msgid "file_suffix_custom_negative_info" +msgstr "" + +msgid "file_suffix_custom_positive" +msgstr "" + +msgid "file_suffix_custom_positive_info" +msgstr "" + +msgid "file_suffix_default_positive" +msgstr "" + +msgid "file_suffix_default_positive_info" +msgstr "" + +msgid "file_suffix_overall_positive" +msgstr "" + +msgid "file_suffix_overall_positive_info" +msgstr "" + +msgid "policy_audience" +msgstr "" + +msgid "policy_audience_all_users_option_desc" +msgstr "" + +msgid "policy_audience_global_roles_option_desc" +msgstr "" + +msgid "policy_confirm_deletion" +msgstr "" + +msgid "policy_deletion_failure_not_found" +msgstr "" + +msgid "policy_deletion_successful" +msgstr "" + +msgid "policy_filter" +msgstr "" + +msgid "policy_no_validity_limitation_set" +msgstr "" + +msgid "policy_scope" +msgstr "" + +msgid "policy_table_info_no_policies" +msgstr "" + +msgid "policy_title_desc" +msgstr "" + +msgid "policy_upload_limit" +msgstr "" + +msgid "policy_upload_limit_desc" +msgstr "" + +msgid "policy_valid_until" +msgstr "" + +msgid "policy_valid_until_desc" +msgstr "" + +msgid "policy_validity" +msgstr "" + +msgid "upload_limits" +msgstr "" + +msgid "upload_policies" +msgstr "" diff --git a/components/ILIAS/FileServices/lang/fils_ar.po b/components/ILIAS/FileServices/lang/fils_ar.po new file mode 100644 index 000000000000..add6d3c949a0 --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_ar.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_bg.po b/components/ILIAS/FileServices/lang/fils_bg.po new file mode 100644 index 000000000000..003f6f607abe --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_bg.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_cs.po b/components/ILIAS/FileServices/lang/fils_cs.po new file mode 100644 index 000000000000..b7e5434c6774 --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_cs.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_da.po b/components/ILIAS/FileServices/lang/fils_da.po new file mode 100644 index 000000000000..58272df50e61 --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_da.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_de.po b/components/ILIAS/FileServices/lang/fils_de.po new file mode 100644 index 000000000000..79f43d36bba2 --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_de.po @@ -0,0 +1,105 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: fils\n" + +msgid "add_upload_policy" +msgstr "Richtlinie hinzufügen" + +msgid "edit_upload_policy" +msgstr "Richtlinie bearbeiten" + +msgid "file_services" +msgstr "Datei-Services" + +msgid "file_services_description" +msgstr "Konfiguration der Datei-Service Einstellungen." + +msgid "file_suffix_custom_expl_negative" +msgstr "Verbotene Dateiendungen" + +msgid "file_suffix_custom_expl_negative_info" +msgstr "Dateien mit diesen Endungen werden beim Upload nicht akzeptiert." + +msgid "file_suffix_custom_negative" +msgstr "Dateiendungen: Negativliste (Anpassungen)" + +msgid "file_suffix_custom_negative_info" +msgstr "Diese Dateiendungen werden aus der obigen Positivliste entfernt." + +msgid "file_suffix_custom_positive" +msgstr "Dateiendungen: Positivliste (Anpassungen)" + +msgid "file_suffix_custom_positive_info" +msgstr "Diese Dateiendungen werden der obigen Positivliste hinzugefügt." + +msgid "file_suffix_default_positive" +msgstr "Dateiendungen: Positivliste (Ausgangsliste)" + +msgid "file_suffix_default_positive_info" +msgstr "Voreingestellte Ausgangsliste für akzeptierte Dateiendungen." + +msgid "file_suffix_overall_positive" +msgstr "Effektive Positivliste" + +msgid "file_suffix_overall_positive_info" +msgstr "Dies ist die endgültige Liste akzeptierter Dateiendungen." + +msgid "policy_audience" +msgstr "Zielgruppe" + +msgid "policy_audience_all_users_option_desc" +msgstr "Richtlinie für alle Benutzer:innen anwenden." + +msgid "policy_audience_global_roles_option_desc" +msgstr "Richtlinie für Benutzer:innen, welche bestimmte globale Rollen innehaben, anwenden." + +msgid "policy_confirm_deletion" +msgstr "Wollen Sie die Richtlinie mit den nachfolgenden Eigenschaften wirklich löschen?:" + +msgid "policy_deletion_failure_not_found" +msgstr "Fehler: Die Richtlinie konnte nicht gelöscht werden, da sie nicht gefunden wurde." + +msgid "policy_deletion_successful" +msgstr "Löschung der Richtlinie war erfolgreich." + +msgid "policy_filter" +msgstr "Richtlinien-Filter" + +msgid "policy_no_validity_limitation_set" +msgstr "Unbefristet gültig" + +msgid "policy_scope" +msgstr "Anwendungsbereich" + +msgid "policy_table_info_no_policies" +msgstr "Es wurden noch keine Upload-Richtlinien angelegt." + +msgid "policy_title_desc" +msgstr "Beschreibender Titel für die Richtlinie." + +msgid "policy_upload_limit" +msgstr "Upload Limite" + +msgid "policy_upload_limit_desc" +msgstr "Upload Limite welche durch diese Richtlinie gesetzt wird in MB." + +msgid "policy_valid_until" +msgstr "Gültig bis" + +msgid "policy_valid_until_desc" +msgstr "Legen Sie ein optionales \"Gültig bis\"-Datum fest, nach welchem die Richtlinie abläuft." + +msgid "policy_validity" +msgstr "Gültigkeit" + +msgid "upload_limits" +msgstr "Upload Limits" + +msgid "upload_policies" +msgstr "Upload Richtlinien" diff --git a/components/ILIAS/FileServices/lang/fils_el.po b/components/ILIAS/FileServices/lang/fils_el.po new file mode 100644 index 000000000000..5652c11df757 --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_el.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_en.po b/components/ILIAS/FileServices/lang/fils_en.po new file mode 100644 index 000000000000..01d3a7f9cc4c --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_en.po @@ -0,0 +1,105 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: fils\n" + +msgid "add_upload_policy" +msgstr "Add Policy" + +msgid "edit_upload_policy" +msgstr "Edit Policy" + +msgid "file_services" +msgstr "File Services" + +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Additions)" + +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +msgid "policy_audience" +msgstr "Target Group" + +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +msgid "policy_filter" +msgstr "Policy Filter" + +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +msgid "policy_scope" +msgstr "Scope" + +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +msgid "policy_upload_limit" +msgstr "Upload Limit" + +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +msgid "policy_valid_until" +msgstr "Valid Until" + +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +msgid "policy_validity" +msgstr "Validity" + +msgid "upload_limits" +msgstr "Upload Limits" + +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_es.po b/components/ILIAS/FileServices/lang/fils_es.po new file mode 100644 index 000000000000..a557056e9b90 --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_es.po @@ -0,0 +1,105 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: fils\n" + +msgid "add_upload_policy" +msgstr "Añadir política" + +msgid "edit_upload_policy" +msgstr "Editar política" + +msgid "file_services" +msgstr "Servicios de archivos" + +msgid "file_services_description" +msgstr "Configuración de los ajustes del servicio de archivos." + +msgid "file_suffix_custom_expl_negative" +msgstr "Sufijos de archivo prohibidos" + +msgid "file_suffix_custom_expl_negative_info" +msgstr "Los archivos con estos sufijos no se aceptarán para la subida." + +msgid "file_suffix_custom_negative" +msgstr "Sufijos de archivo: Lista negativa (adaptaciones)" + +msgid "file_suffix_custom_negative_info" +msgstr "Estos sufijos de archivo se eliminarán de la lista positiva." + +msgid "file_suffix_custom_positive" +msgstr "Sufijos de archivo: Lista positiva (adiciones)" + +msgid "file_suffix_custom_positive_info" +msgstr "Estos sufijos de archivo se añadirán a la lista positiva." + +msgid "file_suffix_default_positive" +msgstr "Sufijos de archivo: Lista positiva (lista por defecto)" + +msgid "file_suffix_default_positive_info" +msgstr "Lista predeterminada de sufijos de archivo aceptados." + +msgid "file_suffix_overall_positive" +msgstr "Lista positiva global" + +msgid "file_suffix_overall_positive_info" +msgstr "Esta es la lista final de sufijos de archivo aceptados." + +msgid "policy_audience" +msgstr "Grupo objetivo" + +msgid "policy_audience_all_users_option_desc" +msgstr "Aplicar política a todos los usuarios." + +msgid "policy_audience_global_roles_option_desc" +msgstr "Aplicar política a usuarios con roles globales específicos." + +msgid "policy_confirm_deletion" +msgstr "¿Está seguro de que desea eliminar la política con las siguientes propiedades?:" + +msgid "policy_deletion_failure_not_found" +msgstr "Error: La eliminación falló porque no se pudo encontrar la política." + +msgid "policy_deletion_successful" +msgstr "Política eliminada con éxito." + +msgid "policy_filter" +msgstr "Filtro de políticas" + +msgid "policy_no_validity_limitation_set" +msgstr "Válido indefinidamente" + +msgid "policy_scope" +msgstr "Alcance" + +msgid "policy_table_info_no_policies" +msgstr "Aún no se han creado políticas de carga." + +msgid "policy_title_desc" +msgstr "Título descriptivo para esta política." + +msgid "policy_upload_limit" +msgstr "Límite de carga" + +msgid "policy_upload_limit_desc" +msgstr "Límite de carga (en MB) impuesto por esta política." + +msgid "policy_valid_until" +msgstr "Válido hasta" + +msgid "policy_valid_until_desc" +msgstr "Establezca una fecha opcional de 'válido hasta', después de la cual la política expira." + +msgid "policy_validity" +msgstr "Validez" + +msgid "upload_limits" +msgstr "Límites de carga" + +msgid "upload_policies" +msgstr "Políticas de carga" diff --git a/components/ILIAS/FileServices/lang/fils_et.po b/components/ILIAS/FileServices/lang/fils_et.po new file mode 100644 index 000000000000..1cec210d4c68 --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_et.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_fa.po b/components/ILIAS/FileServices/lang/fils_fa.po new file mode 100644 index 000000000000..bed472ba61e8 --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_fa.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_fr.po b/components/ILIAS/FileServices/lang/fils_fr.po new file mode 100644 index 000000000000..b0157cffa90e --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_fr.po @@ -0,0 +1,125 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +msgid "file_services" +msgstr "File Services" + +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Audience" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy for all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy for users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed due to policy not being found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Deletion of policy was successful." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for the policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit which is set by this policy in MB." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional 'valid until' date after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_hr.po b/components/ILIAS/FileServices/lang/fils_hr.po new file mode 100644 index 000000000000..64cfb9d80404 --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_hr.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_hu.po b/components/ILIAS/FileServices/lang/fils_hu.po new file mode 100644 index 000000000000..3e8263ce5fdb --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_hu.po @@ -0,0 +1,105 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: fils\n" + +msgid "add_upload_policy" +msgstr "Szabály hozzáadása" + +msgid "edit_upload_policy" +msgstr "Szabály módosítása" + +msgid "file_services" +msgstr "Fájlszolgáltatás" + +msgid "file_services_description" +msgstr "A Fájlszolgáltatás beállításai." + +msgid "file_suffix_custom_expl_negative" +msgstr "Tiltott kiterjesztések" + +msgid "file_suffix_custom_expl_negative_info" +msgstr "Ezeket a fájlnévkiterjesztéseket nem fogadjuk el feltöltéskor." + +msgid "file_suffix_custom_negative" +msgstr "Negatív kiterjesztések (kiegészítés)" + +msgid "file_suffix_custom_negative_info" +msgstr "Ezek a fájlnévkiterjesztések kikerülnek a pozitív listából." + +msgid "file_suffix_custom_positive" +msgstr "Pozitív kiterjesztések (kiegészítés)" + +msgid "file_suffix_custom_positive_info" +msgstr "Ezek a fájlnévkiterjesztések bekerülnek a pozitív listába." + +msgid "file_suffix_default_positive" +msgstr "Pozitív kiterjesztések (alapértelmezett lista)" + +msgid "file_suffix_default_positive_info" +msgstr "Az alapértelmezetten elfogadott fájlnévkiterjesztések." + +msgid "file_suffix_overall_positive" +msgstr "Összesített pozitív lista" + +msgid "file_suffix_overall_positive_info" +msgstr "Ez az elfogadott fájlnévkiterjesztések végleges listája." + +msgid "policy_audience" +msgstr "Felhasználói kör" + +msgid "policy_audience_all_users_option_desc" +msgstr "Szabály alkalmazása az összes felhasználóra." + +msgid "policy_audience_global_roles_option_desc" +msgstr "Szabály alkalmazása meghatározott szerepkörrel rendelkező felhasználókra." + +msgid "policy_confirm_deletion" +msgstr "Biztos, hogy törli a következő szabályt?" + +msgid "policy_deletion_failure_not_found" +msgstr "HIBA: A szabály nem található." + +msgid "policy_deletion_successful" +msgstr "A szabályt sikeresen törölte." + +msgid "policy_filter" +msgstr "Szűrő" + +msgid "policy_no_validity_limitation_set" +msgstr "Korlátlan ideig érvényes" + +msgid "policy_scope" +msgstr "Hatókör" + +msgid "policy_table_info_no_policies" +msgstr "Még egy feltöltési szabály sincs." + +msgid "policy_title_desc" +msgstr "A szabály leíró címe" + +msgid "policy_upload_limit" +msgstr "Feltöltési korlát" + +msgid "policy_upload_limit_desc" +msgstr "A szabályban beállított felöltési korlát MB-ban." + +msgid "policy_valid_until" +msgstr "Érvényességi idő" + +msgid "policy_valid_until_desc" +msgstr "Az ‘Érvényességi idő’ után a szabály lejár." + +msgid "policy_validity" +msgstr "Érvényesség" + +msgid "upload_limits" +msgstr "Feltöltési korlátok" + +msgid "upload_policies" +msgstr "Feltöltési szabályok" diff --git a/components/ILIAS/FileServices/lang/fils_it.po b/components/ILIAS/FileServices/lang/fils_it.po new file mode 100644 index 000000000000..aaf48cfcb260 --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_it.po @@ -0,0 +1,125 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +msgid "file_services" +msgstr "File Services" + +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Audience" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy for all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy for users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed due to policy not being found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Deletion of policy was successful." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for the policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit which is set by this policy in MB." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional 'valid until' date after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_ja.po b/components/ILIAS/FileServices/lang/fils_ja.po new file mode 100644 index 000000000000..378b2de1faee --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_ja.po @@ -0,0 +1,105 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: fils\n" + +msgid "add_upload_policy" +msgstr "ポリシーを追加" + +msgid "edit_upload_policy" +msgstr "ポリシーを編集" + +msgid "file_services" +msgstr "ファイルサービス" + +msgid "file_services_description" +msgstr "ファイルサービス設定の構成" + +msgid "file_suffix_custom_expl_negative" +msgstr "禁止のファイル拡張子" + +msgid "file_suffix_custom_expl_negative_info" +msgstr "これらの拡張子ファイルはuploadできません。" + +msgid "file_suffix_custom_negative" +msgstr "ファイル拡張子: Negative List (Adaptations)" + +msgid "file_suffix_custom_negative_info" +msgstr "これらの拡張子はpositiveリストから削除されます。" + +msgid "file_suffix_custom_positive" +msgstr "ファイル拡張子: Positive List (Adaptations)" + +msgid "file_suffix_custom_positive_info" +msgstr "これらの拡張子はpositiveリストへ追加されます。" + +msgid "file_suffix_default_positive" +msgstr "ファイル拡張子: Positive List (Default List)" + +msgid "file_suffix_default_positive_info" +msgstr "承認済ファイル拡張子既定のプリセットリスト" + +msgid "file_suffix_overall_positive" +msgstr "Positive List全体" + +msgid "file_suffix_overall_positive_info" +msgstr "これは最終の承認済ファイルリストです。" + +msgid "policy_audience" +msgstr "視聴者" + +msgid "policy_audience_all_users_option_desc" +msgstr "全ユーザへポリシーを適用" + +msgid "policy_audience_global_roles_option_desc" +msgstr "特殊グローバル役割を持つユーザ用のポリシーを適用" + +msgid "policy_confirm_deletion" +msgstr "次のプロパティのポリシーを本当に削除しますか?" + +msgid "policy_deletion_failure_not_found" +msgstr "エラー: ポリシーが見つからないので削除失敗" + +msgid "policy_deletion_successful" +msgstr "ポリシーを正しく削除しました。" + +msgid "policy_filter" +msgstr "ポリシーフィルター" + +msgid "policy_no_validity_limitation_set" +msgstr "無期限有効" + +msgid "policy_scope" +msgstr "範囲" + +msgid "policy_table_info_no_policies" +msgstr "アップロードされたポリシーがまだ作成されていません。" + +msgid "policy_title_desc" +msgstr "ポリシーの説明タイトル" + +msgid "policy_upload_limit" +msgstr "アップロード制限" + +msgid "policy_upload_limit_desc" +msgstr "このポリシーで設定されたアップロード制限(MB表示)" + +msgid "policy_valid_until" +msgstr "有効期限" + +msgid "policy_valid_until_desc" +msgstr "ポリシーが切れた後の'有効期限'オプション設定" + +msgid "policy_validity" +msgstr "有効性" + +msgid "upload_limits" +msgstr "アップロード制限" + +msgid "upload_policies" +msgstr "アップロードポリシー" diff --git a/components/ILIAS/FileServices/lang/fils_ka.po b/components/ILIAS/FileServices/lang/fils_ka.po new file mode 100644 index 000000000000..8d30747bb1ce --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_ka.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_lt.po b/components/ILIAS/FileServices/lang/fils_lt.po new file mode 100644 index 000000000000..0a4c0541ec05 --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_lt.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_nl.po b/components/ILIAS/FileServices/lang/fils_nl.po new file mode 100644 index 000000000000..a174198a4df4 --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_nl.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_pl.po b/components/ILIAS/FileServices/lang/fils_pl.po new file mode 100644 index 000000000000..e2f96762f4c1 --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_pl.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_pt.po b/components/ILIAS/FileServices/lang/fils_pt.po new file mode 100644 index 000000000000..8998eb07d333 --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_pt.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_ro.po b/components/ILIAS/FileServices/lang/fils_ro.po new file mode 100644 index 000000000000..fc3e7e0eb35a --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_ro.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_ru.po b/components/ILIAS/FileServices/lang/fils_ru.po new file mode 100644 index 000000000000..b22d5f2e75c0 --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_ru.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_sk.po b/components/ILIAS/FileServices/lang/fils_sk.po new file mode 100644 index 000000000000..a1a9bae0f9d1 --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_sk.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_sl.po b/components/ILIAS/FileServices/lang/fils_sl.po new file mode 100644 index 000000000000..9bdb8f297029 --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_sl.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_sq.po b/components/ILIAS/FileServices/lang/fils_sq.po new file mode 100644 index 000000000000..ccccef8d979b --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_sq.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_sr.po b/components/ILIAS/FileServices/lang/fils_sr.po new file mode 100644 index 000000000000..17e41762027f --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_sr.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_sv.po b/components/ILIAS/FileServices/lang/fils_sv.po new file mode 100644 index 000000000000..1147ea73a8c9 --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_sv.po @@ -0,0 +1,125 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +msgid "file_services" +msgstr "Filtjänster" + +msgid "file_services_description" +msgstr "Konfigurera inställningarna för filservicen." + +msgid "file_suffix_custom_expl_negative" +msgstr "Förbjudna filtillägg" + +msgid "file_suffix_custom_expl_negative_info" +msgstr "Filer med dessa tillägg accepteras inte vid uppladdning." + +msgid "file_suffix_custom_negative" +msgstr "Filtillägg" + +msgid "file_suffix_custom_negative_info" +msgstr "Dessa filändelser är borttagna från positivlistan ovan." + +msgid "file_suffix_custom_positive" +msgstr "Filtillägg" + +msgid "file_suffix_custom_positive_info" +msgstr "Dessa filändelser läggs till i den positiva listan ovan." + +msgid "file_suffix_default_positive" +msgstr "Filtillägg" + +msgid "file_suffix_default_positive_info" +msgstr "Förinställd utdatalista för accepterade filtillägg." + +msgid "file_suffix_overall_positive" +msgstr "Effektiv positiv lista" + +msgid "file_suffix_overall_positive_info" +msgstr "Detta är den slutliga listan över godkända filändelser." + +#, fuzzy +msgid "policy_audience" +msgstr "Audience" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy for all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy for users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed due to policy not being found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Deletion of policy was successful." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for the policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit which is set by this policy in MB." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional 'valid until' date after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_tr.po b/components/ILIAS/FileServices/lang/fils_tr.po new file mode 100644 index 000000000000..38cdd35357dc --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_tr.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_uk.po b/components/ILIAS/FileServices/lang/fils_uk.po new file mode 100644 index 000000000000..480cc7d3e976 --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_uk.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_vi.po b/components/ILIAS/FileServices/lang/fils_vi.po new file mode 100644 index 000000000000..97e01f1758bc --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_vi.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/FileServices/lang/fils_zh.po b/components/ILIAS/FileServices/lang/fils_zh.po new file mode 100644 index 000000000000..5e7c6cff2a5f --- /dev/null +++ b/components/ILIAS/FileServices/lang/fils_zh.po @@ -0,0 +1,137 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: fils\n" + +#, fuzzy +msgid "add_upload_policy" +msgstr "Add Policy" + +#, fuzzy +msgid "edit_upload_policy" +msgstr "Edit Policy" + +#, fuzzy +msgid "file_services" +msgstr "File Services" + +#, fuzzy +msgid "file_services_description" +msgstr "Configuration of File Service Settings." + +#, fuzzy +msgid "file_suffix_custom_expl_negative" +msgstr "Prohibited File Suffixes" + +#, fuzzy +msgid "file_suffix_custom_expl_negative_info" +msgstr "Files with these suffixes won't be accepted for upload." + +#, fuzzy +msgid "file_suffix_custom_negative" +msgstr "File Suffixes: Negative List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_negative_info" +msgstr "These file suffixes will be removed from the positive list." + +#, fuzzy +msgid "file_suffix_custom_positive" +msgstr "File Suffixes: Positive List (Adaptations)" + +#, fuzzy +msgid "file_suffix_custom_positive_info" +msgstr "These file suffixes will be added to the positive list." + +#, fuzzy +msgid "file_suffix_default_positive" +msgstr "File Suffixes: Positive List (Default List)" + +#, fuzzy +msgid "file_suffix_default_positive_info" +msgstr "Preset default list of accepted file suffixes." + +#, fuzzy +msgid "file_suffix_overall_positive" +msgstr "Overall Positive List" + +#, fuzzy +msgid "file_suffix_overall_positive_info" +msgstr "This is the final list of accepted file suffixes." + +#, fuzzy +msgid "policy_audience" +msgstr "Target Group" + +#, fuzzy +msgid "policy_audience_all_users_option_desc" +msgstr "Apply policy to all users." + +#, fuzzy +msgid "policy_audience_global_roles_option_desc" +msgstr "Apply policy to users with specific global roles." + +#, fuzzy +msgid "policy_confirm_deletion" +msgstr "Are you sure you want to delete the policy with the following properties?:" + +#, fuzzy +msgid "policy_deletion_failure_not_found" +msgstr "Error: Deletion failed because policy could not be found." + +#, fuzzy +msgid "policy_deletion_successful" +msgstr "Policy successfully deleted." + +#, fuzzy +msgid "policy_filter" +msgstr "Policy Filter" + +#, fuzzy +msgid "policy_no_validity_limitation_set" +msgstr "Valid indefinitely" + +#, fuzzy +msgid "policy_scope" +msgstr "Scope" + +#, fuzzy +msgid "policy_table_info_no_policies" +msgstr "No upload policies have been created yet." + +#, fuzzy +msgid "policy_title_desc" +msgstr "Descriptive title for this policy." + +#, fuzzy +msgid "policy_upload_limit" +msgstr "Upload Limit" + +#, fuzzy +msgid "policy_upload_limit_desc" +msgstr "Upload limit (in MB) imposed by this policy." + +#, fuzzy +msgid "policy_valid_until" +msgstr "Valid Until" + +#, fuzzy +msgid "policy_valid_until_desc" +msgstr "Set an optional ‘valid until’ date, after which the policy expires." + +#, fuzzy +msgid "policy_validity" +msgstr "Validity" + +#, fuzzy +msgid "upload_limits" +msgstr "Upload Limits" + +#, fuzzy +msgid "upload_policies" +msgstr "Upload Policies" diff --git a/components/ILIAS/Forum/classes/class.ilForumTopicTableGUI.php b/components/ILIAS/Forum/classes/class.ilForumTopicTableGUI.php index 2198eb2b7fbb..f69d6113d76f 100755 --- a/components/ILIAS/Forum/classes/class.ilForumTopicTableGUI.php +++ b/components/ILIAS/Forum/classes/class.ilForumTopicTableGUI.php @@ -94,7 +94,7 @@ public function initTopicsOverviewTable(): void $this->addColumn($this->lng->txt('visits'), 'num_visit'); if ($this->is_post_draft_allowed) { - $this->addColumn($this->lng->txt('drafts', '')); + $this->addColumn($this->lng->txt('drafts')); } $this->addColumn($this->lng->txt('forums_last_post'), 'post_date'); @@ -135,7 +135,7 @@ public function initMergeThreadsTable(): void $this->addColumn($this->lng->txt('forums_articles'), 'num_posts'); $this->addColumn($this->lng->txt('visits'), 'num_visit'); if ($this->is_post_draft_allowed) { - $this->addColumn($this->lng->txt('drafts', '')); + $this->addColumn($this->lng->txt('drafts')); } $this->addColumn($this->lng->txt('forums_last_post'), 'lp_date'); diff --git a/components/ILIAS/HTMLLearningModule/HTMLLearningModule.php b/components/ILIAS/HTMLLearningModule/HTMLLearningModule.php index db796162675d..631755164a10 100644 --- a/components/ILIAS/HTMLLearningModule/HTMLLearningModule.php +++ b/components/ILIAS/HTMLLearningModule/HTMLLearningModule.php @@ -20,6 +20,9 @@ namespace ILIAS; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; + class HTMLLearningModule implements Component\Component { public function init( @@ -36,5 +39,9 @@ public function init( new \ilHTLMSetupAgent( $pull[\ILIAS\Refinery\Factory::class] ); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'htlm' + ); } } diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm.pot b/components/ILIAS/HTMLLearningModule/lang/htlm.pot new file mode 100644 index 000000000000..2ad967c9d9f0 --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm.pot @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: htlm\n" + +msgid "file_import_from_upload_dir_failed" +msgstr "" + +msgid "file_imported_from_upload_dir" +msgstr "" + +msgid "import_from_upload_dir" +msgstr "" + +msgid "import_from_upload_dir_file_name" +msgstr "" + +msgid "import_from_upload_dir_info" +msgstr "" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_ar.po b/components/ILIAS/HTMLLearningModule/lang/htlm_ar.po new file mode 100644 index 000000000000..8feb3ea57655 --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_ar.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_bg.po b/components/ILIAS/HTMLLearningModule/lang/htlm_bg.po new file mode 100644 index 000000000000..7f45cbfd3fc9 --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_bg.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_cs.po b/components/ILIAS/HTMLLearningModule/lang/htlm_cs.po new file mode 100644 index 000000000000..1b2147bb88c2 --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_cs.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_da.po b/components/ILIAS/HTMLLearningModule/lang/htlm_da.po new file mode 100644 index 000000000000..cdaa2d4d1b3d --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_da.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_de.po b/components/ILIAS/HTMLLearningModule/lang/htlm_de.po new file mode 100644 index 000000000000..d5f5d3e01325 --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_de.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: htlm\n" + +msgid "file_import_from_upload_dir_failed" +msgstr "Datei aus Uploadverzeichnis nicht importiert" + +msgid "file_imported_from_upload_dir" +msgstr "Datei aus Uploadverzeichnis importiert" + +msgid "import_from_upload_dir" +msgstr "Import aus Uploadverzeichnis" + +msgid "import_from_upload_dir_file_name" +msgstr "Dateiname" + +msgid "import_from_upload_dir_info" +msgstr "Bitte Datei zur Übernahme auswählen" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_el.po b/components/ILIAS/HTMLLearningModule/lang/htlm_el.po new file mode 100644 index 000000000000..b35949fe6b9c --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_el.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_en.po b/components/ILIAS/HTMLLearningModule/lang/htlm_en.po new file mode 100644 index 000000000000..d8afc94c905b --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_en.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: htlm\n" + +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_es.po b/components/ILIAS/HTMLLearningModule/lang/htlm_es.po new file mode 100644 index 000000000000..181e537b2dc9 --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_es.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: htlm\n" + +msgid "file_import_from_upload_dir_failed" +msgstr "No se ha podido importar el archivo desde el directorio de carga" + +msgid "file_imported_from_upload_dir" +msgstr "Archivo importado desde el directorio de carga" + +msgid "import_from_upload_dir" +msgstr "Importar desde el directorio de carga" + +msgid "import_from_upload_dir_file_name" +msgstr "Nombre de archivo" + +msgid "import_from_upload_dir_info" +msgstr "Por favor, seleccione el archivo para importar" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_et.po b/components/ILIAS/HTMLLearningModule/lang/htlm_et.po new file mode 100644 index 000000000000..5b758086b09e --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_et.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_fa.po b/components/ILIAS/HTMLLearningModule/lang/htlm_fa.po new file mode 100644 index 000000000000..c40e39c37728 --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_fa.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_fr.po b/components/ILIAS/HTMLLearningModule/lang/htlm_fr.po new file mode 100644 index 000000000000..f83185bf1488 --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_fr.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_hr.po b/components/ILIAS/HTMLLearningModule/lang/htlm_hr.po new file mode 100644 index 000000000000..bd0d52cfaca5 --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_hr.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_hu.po b/components/ILIAS/HTMLLearningModule/lang/htlm_hu.po new file mode 100644 index 000000000000..804980c50b80 --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_hu.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: htlm\n" + +msgid "file_import_from_upload_dir_failed" +msgstr "A fájlt importálása a Feltöltési mappából sikertelen" + +msgid "file_imported_from_upload_dir" +msgstr "A fájlt sikeresen importálta a Feltöltési mappából" + +msgid "import_from_upload_dir" +msgstr "Importálás a Feltöltési mappából" + +msgid "import_from_upload_dir_file_name" +msgstr "Fáj neve" + +msgid "import_from_upload_dir_info" +msgstr "Válasszon egy importfájlt" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_it.po b/components/ILIAS/HTMLLearningModule/lang/htlm_it.po new file mode 100644 index 000000000000..dac6a3b32b97 --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_it.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_ja.po b/components/ILIAS/HTMLLearningModule/lang/htlm_ja.po new file mode 100644 index 000000000000..dca4bc676d53 --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_ja.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: htlm\n" + +msgid "file_import_from_upload_dir_failed" +msgstr "アップロードディレクトリからファイルはインポートされませんでした" + +msgid "file_imported_from_upload_dir" +msgstr "アップロードディレクトリからファイルをインポート" + +msgid "import_from_upload_dir" +msgstr "アップロードディレクイトリからインポート" + +msgid "import_from_upload_dir_file_name" +msgstr "ファイル名" + +msgid "import_from_upload_dir_info" +msgstr "インポート用のファイルを選択してください。" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_ka.po b/components/ILIAS/HTMLLearningModule/lang/htlm_ka.po new file mode 100644 index 000000000000..81cde05050e9 --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_ka.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_lt.po b/components/ILIAS/HTMLLearningModule/lang/htlm_lt.po new file mode 100644 index 000000000000..8616e311f57a --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_lt.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_nl.po b/components/ILIAS/HTMLLearningModule/lang/htlm_nl.po new file mode 100644 index 000000000000..bb59380057e8 --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_nl.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_pl.po b/components/ILIAS/HTMLLearningModule/lang/htlm_pl.po new file mode 100644 index 000000000000..e32a407b05e3 --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_pl.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_pt.po b/components/ILIAS/HTMLLearningModule/lang/htlm_pt.po new file mode 100644 index 000000000000..e6b5167929ba --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_pt.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_ro.po b/components/ILIAS/HTMLLearningModule/lang/htlm_ro.po new file mode 100644 index 000000000000..bceda68e5030 --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_ro.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_ru.po b/components/ILIAS/HTMLLearningModule/lang/htlm_ru.po new file mode 100644 index 000000000000..759539affb7f --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_ru.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_sk.po b/components/ILIAS/HTMLLearningModule/lang/htlm_sk.po new file mode 100644 index 000000000000..e21d35a2dbc6 --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_sk.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_sl.po b/components/ILIAS/HTMLLearningModule/lang/htlm_sl.po new file mode 100644 index 000000000000..710cfaacee5e --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_sl.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_sq.po b/components/ILIAS/HTMLLearningModule/lang/htlm_sq.po new file mode 100644 index 000000000000..0c0873472435 --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_sq.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_sr.po b/components/ILIAS/HTMLLearningModule/lang/htlm_sr.po new file mode 100644 index 000000000000..0655fe3efc06 --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_sr.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_sv.po b/components/ILIAS/HTMLLearningModule/lang/htlm_sv.po new file mode 100644 index 000000000000..7f631595cd3a --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_sv.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_tr.po b/components/ILIAS/HTMLLearningModule/lang/htlm_tr.po new file mode 100644 index 000000000000..b5091142c325 --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_tr.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_uk.po b/components/ILIAS/HTMLLearningModule/lang/htlm_uk.po new file mode 100644 index 000000000000..93f45a425edb --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_uk.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_vi.po b/components/ILIAS/HTMLLearningModule/lang/htlm_vi.po new file mode 100644 index 000000000000..f5aee838e9a8 --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_vi.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/HTMLLearningModule/lang/htlm_zh.po b/components/ILIAS/HTMLLearningModule/lang/htlm_zh.po new file mode 100644 index 000000000000..b65680defb6d --- /dev/null +++ b/components/ILIAS/HTMLLearningModule/lang/htlm_zh.po @@ -0,0 +1,29 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: htlm\n" + +#, fuzzy +msgid "file_import_from_upload_dir_failed" +msgstr "File from Upload-Directory not imported" + +#, fuzzy +msgid "file_imported_from_upload_dir" +msgstr "File imported from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir" +msgstr "Import from Upload-Directory" + +#, fuzzy +msgid "import_from_upload_dir_file_name" +msgstr "Filename" + +#, fuzzy +msgid "import_from_upload_dir_info" +msgstr "Please select file for import" diff --git a/components/ILIAS/Help/Help.php b/components/ILIAS/Help/Help.php index bb28a1bf8bd8..ed88531232af 100644 --- a/components/ILIAS/Help/Help.php +++ b/components/ILIAS/Help/Help.php @@ -20,6 +20,9 @@ namespace ILIAS; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; + class Help implements Component\Component { public function init( @@ -47,5 +50,9 @@ public function init( $contribute[User\Settings\UserSettings::class] = fn() => new Help\UserSettings\Settings(); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'help' + ); } } diff --git a/components/ILIAS/Help/lang/help.pot b/components/ILIAS/Help/lang/help.pot new file mode 100644 index 000000000000..f1c9e41a7964 --- /dev/null +++ b/components/ILIAS/Help/lang/help.pot @@ -0,0 +1,246 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: help\n" + +msgid "gdtr_active" +msgstr "" + +msgid "gdtr_add_step" +msgstr "" + +msgid "gdtr_add_tour" +msgstr "" + +msgid "gdtr_close" +msgstr "" + +msgid "gdtr_delete_step" +msgstr "" + +msgid "gdtr_delete_step_mess" +msgstr "" + +msgid "gdtr_delete_tour" +msgstr "" + +msgid "gdtr_delete_tour_mess" +msgstr "" + +msgid "gdtr_deleted_step" +msgstr "" + +msgid "gdtr_deleted_tour" +msgstr "" + +msgid "gdtr_edit_content" +msgstr "" + +msgid "gdtr_edit_page_info" +msgstr "" + +msgid "gdtr_edit_properties" +msgstr "" + +msgid "gdtr_edit_step_info" +msgstr "" + +msgid "gdtr_edit_steps" +msgstr "" + +msgid "gdtr_element_id" +msgstr "" + +msgid "gdtr_form" +msgstr "" + +msgid "gdtr_form_info" +msgstr "" + +msgid "gdtr_guided_tours" +msgstr "" + +msgid "gdtr_id_pres_users" +msgstr "" + +msgid "gdtr_id_pres_users_info" +msgstr "" + +msgid "gdtr_id_settings" +msgstr "" + +msgid "gdtr_import_tour" +msgstr "" + +msgid "gdtr_language" +msgstr "" + +msgid "gdtr_language_info" +msgstr "" + +msgid "gdtr_list_tours_mess" +msgstr "" + +msgid "gdtr_mainbar" +msgstr "" + +msgid "gdtr_mainbar_ID_info" +msgstr "" + +msgid "gdtr_mainbar_info" +msgstr "" + +msgid "gdtr_metabar" +msgstr "" + +msgid "gdtr_metabar_ID_info" +msgstr "" + +msgid "gdtr_metabar_info" +msgstr "" + +msgid "gdtr_next_step" +msgstr "" + +msgid "gdtr_permission" +msgstr "" + +msgid "gdtr_permission_info" +msgstr "" + +msgid "gdtr_presentation_limitation" +msgstr "" + +msgid "gdtr_primary_button" +msgstr "" + +msgid "gdtr_primary_button_info" +msgstr "" + +msgid "gdtr_reset_tour" +msgstr "" + +msgid "gdtr_reset_tour_mess" +msgstr "" + +msgid "gdtr_screen_ids" +msgstr "" + +msgid "gdtr_screen_ids_info" +msgstr "" + +msgid "gdtr_step" +msgstr "" + +msgid "gdtr_step_type" +msgstr "" + +msgid "gdtr_table" +msgstr "" + +msgid "gdtr_table_info" +msgstr "" + +msgid "gdtr_tabs" +msgstr "" + +msgid "gdtr_tabs_ID_info" +msgstr "" + +msgid "gdtr_tabs_info" +msgstr "" + +msgid "gdtr_toolbar" +msgstr "" + +msgid "gdtr_toolbar_info" +msgstr "" + +msgid "gdtr_tour_has_been_reset" +msgstr "" + +msgid "gdtr_tour_settings" +msgstr "" + +msgid "gdtr_tour_steps" +msgstr "" + +msgid "gdtr_tours" +msgstr "" + +msgid "gdtr_type" +msgstr "" + +msgid "guided_tour" +msgstr "" + +msgid "help_all" +msgstr "" + +msgid "help_component" +msgstr "" + +msgid "help_filter" +msgstr "" + +msgid "help_help_file" +msgstr "" + +msgid "help_help_only" +msgstr "" + +msgid "help_imported_on" +msgstr "" + +msgid "help_module_uploaded" +msgstr "" + +msgid "help_modules" +msgstr "" + +msgid "help_no_content" +msgstr "" + +msgid "help_open_online_help" +msgstr "" + +msgid "help_order" +msgstr "" + +msgid "help_search_label" +msgstr "" + +msgid "help_select_a_file" +msgstr "" + +msgid "help_set_mode" +msgstr "" + +msgid "help_sure_delete_help_modules" +msgstr "" + +msgid "help_toggle_tooltips" +msgstr "" + +msgid "help_toggle_tooltips_info" +msgstr "" + +msgid "help_tooltip_id" +msgstr "" + +msgid "help_tooltips" +msgstr "" + +msgid "help_tooltips_and_help" +msgstr "" + +msgid "help_tooltips_only" +msgstr "" + +msgid "help_topcis" +msgstr "" + +msgid "help_tt_text" +msgstr "" diff --git a/components/ILIAS/Help/lang/help_ar.po b/components/ILIAS/Help/lang/help_ar.po new file mode 100644 index 000000000000..f6ddb4622fb8 --- /dev/null +++ b/components/ILIAS/Help/lang/help_ar.po @@ -0,0 +1,312 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +msgid "help_all" +msgstr "All" + +msgid "help_component" +msgstr "Component" + +msgid "help_filter" +msgstr "Filter" + +msgid "help_help_file" +msgstr "Help Package File" + +msgid "help_help_only" +msgstr "Workflow Help Only" + +msgid "help_imported_on" +msgstr "Imported on" + +msgid "help_module_uploaded" +msgstr "Help package uploaded." + +msgid "help_modules" +msgstr "Help Packages" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +msgid "help_open_online_help" +msgstr "Open Online Help" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +msgid "help_set_mode" +msgstr "Set Mode" + +msgid "help_sure_delete_help_modules" +msgstr "Are you sure that these packages should be deleted?" + +msgid "help_toggle_tooltips" +msgstr "Toggle Help Tooltips" + +#, fuzzy +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +msgid "help_tooltip_id" +msgstr "Tooltip ID" + +msgid "help_tooltips" +msgstr "Help Tooltips" + +msgid "help_tooltips_and_help" +msgstr "Tooltips and Workflow Help" + +msgid "help_tooltips_only" +msgstr "Tooltips Only" + +#, fuzzy +msgid "help_topcis" +msgstr "Topics" + +msgid "help_tt_text" +msgstr "Text" diff --git a/components/ILIAS/Help/lang/help_bg.po b/components/ILIAS/Help/lang/help_bg.po new file mode 100644 index 000000000000..bde29d20e864 --- /dev/null +++ b/components/ILIAS/Help/lang/help_bg.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +#, fuzzy +msgid "help_all" +msgstr "All" + +#, fuzzy +msgid "help_component" +msgstr "Component" + +#, fuzzy +msgid "help_filter" +msgstr "Filter" + +#, fuzzy +msgid "help_help_file" +msgstr "Help Package File" + +#, fuzzy +msgid "help_help_only" +msgstr "Workflow Help Only" + +#, fuzzy +msgid "help_imported_on" +msgstr "Imported on" + +#, fuzzy +msgid "help_module_uploaded" +msgstr "Help package uploaded." + +#, fuzzy +msgid "help_modules" +msgstr "Help Packages" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +#, fuzzy +msgid "help_open_online_help" +msgstr "Open Online Help" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +#, fuzzy +msgid "help_set_mode" +msgstr "Set Mode" + +#, fuzzy +msgid "help_sure_delete_help_modules" +msgstr "Are you sure that these packages should be deleted?" + +#, fuzzy +msgid "help_toggle_tooltips" +msgstr "Toggle Help Tooltips" + +#, fuzzy +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +#, fuzzy +msgid "help_tooltip_id" +msgstr "Tooltip ID" + +#, fuzzy +msgid "help_tooltips" +msgstr "Help Tooltips" + +#, fuzzy +msgid "help_tooltips_and_help" +msgstr "Tooltips and Workflow Help" + +#, fuzzy +msgid "help_tooltips_only" +msgstr "Tooltips Only" + +#, fuzzy +msgid "help_topcis" +msgstr "Topics" + +#, fuzzy +msgid "help_tt_text" +msgstr "Text" diff --git a/components/ILIAS/Help/lang/help_cs.po b/components/ILIAS/Help/lang/help_cs.po new file mode 100644 index 000000000000..902be9d92e72 --- /dev/null +++ b/components/ILIAS/Help/lang/help_cs.po @@ -0,0 +1,310 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +msgid "help_all" +msgstr "Vše" + +msgid "help_component" +msgstr "Komponenta" + +msgid "help_filter" +msgstr "Filtr" + +msgid "help_help_file" +msgstr "Soubor balíčku nápovědy" + +msgid "help_help_only" +msgstr "Pouze nápověda k pracovnímu postupu" + +msgid "help_imported_on" +msgstr "Importováno" + +msgid "help_module_uploaded" +msgstr "Nahraný balíček nápovědy." + +msgid "help_modules" +msgstr "Balíčky nápovědy" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +msgid "help_open_online_help" +msgstr "Otevřít online nápovědu" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +msgid "help_set_mode" +msgstr "Nastavit režim" + +msgid "help_sure_delete_help_modules" +msgstr "Jste si jisti, že mají být tyto balíčky smazány?" + +msgid "help_toggle_tooltips" +msgstr "Přepnout nápovědné bubliny" + +msgid "help_toggle_tooltips_info" +msgstr "Zobrazit nápovědné bubliny pro nabídky a záložky." + +msgid "help_tooltip_id" +msgstr "ID nápovědné bubliny" + +msgid "help_tooltips" +msgstr "Nápovědné bubliny" + +msgid "help_tooltips_and_help" +msgstr "Nápovědné bubliny a nápověda k pracovnímu postupu" + +msgid "help_tooltips_only" +msgstr "Pouze nápovědné bubliny" + +msgid "help_topcis" +msgstr "Témata" + +msgid "help_tt_text" +msgstr "Text" diff --git a/components/ILIAS/Help/lang/help_da.po b/components/ILIAS/Help/lang/help_da.po new file mode 100644 index 000000000000..b69cd3cecd6c --- /dev/null +++ b/components/ILIAS/Help/lang/help_da.po @@ -0,0 +1,319 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +msgid "help_all" +msgstr "Alt" + +msgid "help_component" +msgstr "Komplnent" + +msgid "help_filter" +msgstr "Filter" + +#, fuzzy +msgid "help_help_file" +msgstr "Help Package File" + +msgid "help_help_only" +msgstr "Kun arbejdsgangshjælp" + +msgid "help_imported_on" +msgstr "Importeret den" + +#, fuzzy +msgid "help_module_uploaded" +msgstr "Help package uploaded." + +#, fuzzy +msgid "help_modules" +msgstr "Help Packages" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +msgid "help_open_online_help" +msgstr "Åben onlinehjælp" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +#, fuzzy +msgid "help_set_mode" +msgstr "Set Mode" + +#, fuzzy +msgid "help_sure_delete_help_modules" +msgstr "Are you sure that these packages should be deleted?" + +msgid "help_toggle_tooltips" +msgstr "Skift hjælpetips" + +#, fuzzy +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +#, fuzzy +msgid "help_tooltip_id" +msgstr "Tooltip ID" + +#, fuzzy +msgid "help_tooltips" +msgstr "Help Tooltips" + +msgid "help_tooltips_and_help" +msgstr "Tips og hjælp til arbejdsgang" + +msgid "help_tooltips_only" +msgstr "Kun værktøjstip" + +#, fuzzy +msgid "help_topcis" +msgstr "Topics" + +msgid "help_tt_text" +msgstr "Tekst" diff --git a/components/ILIAS/Help/lang/help_de.po b/components/ILIAS/Help/lang/help_de.po new file mode 100644 index 000000000000..b122b3f35588 --- /dev/null +++ b/components/ILIAS/Help/lang/help_de.po @@ -0,0 +1,249 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: help\n" + +msgid "gdtr_active" +msgstr "Aktiv" + +msgid "gdtr_add_step" +msgstr "Schritt hinzufügen" + +msgid "gdtr_add_tour" +msgstr "Tour hinzufügen" + +msgid "gdtr_close" +msgstr "Tour beenden" + +msgid "gdtr_delete_step" +msgstr "Schritt löschen" + +msgid "gdtr_delete_step_mess" +msgstr "Sind Sie sicher, dass dieser Schritt gelöscht werden soll?" + +msgid "gdtr_delete_tour" +msgstr "Tour löschen" + +msgid "gdtr_delete_tour_mess" +msgstr "Sind Sie sicher, dass diese Tour gelöscht werden soll?" + +msgid "gdtr_deleted_step" +msgstr "Der Schritt wurde gelöscht." + +msgid "gdtr_deleted_tour" +msgstr "Die Tour wurde gelöscht." + +msgid "gdtr_edit_content" +msgstr "Inhalt bearbeiten" + +msgid "gdtr_edit_page_info" +msgstr "Bearbeiten Sie den Inhalt, der erscheinen soll um das ausgewählte Bedienelement zu beschreiben." + +msgid "gdtr_edit_properties" +msgstr "Bedienelemente bearbeiten" + +msgid "gdtr_edit_step_info" +msgstr "Wählen Sie das Bedienelement aus, das mit einem Erklärungstext versehen werden soll." + +msgid "gdtr_edit_steps" +msgstr "Schritte bearbeiten" + +msgid "gdtr_element_id" +msgstr "Element-ID" + +msgid "gdtr_form" +msgstr "Formular" + +msgid "gdtr_form_info" +msgstr "Das erste Formular einer Seite" + +msgid "gdtr_guided_tours" +msgstr "Touren" + +msgid "gdtr_id_pres_users" +msgstr "IDs anzeigen für" + +msgid "gdtr_id_pres_users_info" +msgstr "Tragen Sie einen oder mehrere Anmeldenamen ein. Diesen Personen werden auf der Bedienoberfläche Tooltipps mit den IDs der einzelnen Elemente angezeigt. Fahren Sie mit der Maus über die Elemente, um die Tooltipps zu sehen." + +msgid "gdtr_id_settings" +msgstr "Einstellungen" + +msgid "gdtr_import_tour" +msgstr "Tour importieren" + +msgid "gdtr_language" +msgstr "Nach Sprache" + +msgid "gdtr_language_info" +msgstr "Nur Personen mit der ausgewählten Sprache sehen die Tour." + +msgid "gdtr_list_tours_mess" +msgstr "Mit einer interaktiven Tour können Sie die Bedienelemente auf einer Seite in ILIAS erklären. Um Touren überhaupt ausarbeiten zu können, müssen Sie zunächst Ihren Anmeldenamen im Unterreiter „Einstellungen“ eintragen." + +msgid "gdtr_mainbar" +msgstr "Mainbar" + +msgid "gdtr_mainbar_ID_info" +msgstr "ID des gewünschten Eintrags im Hauptmenü. Fahren Sie mit der Maus über den Eintrag, um die ID als Tooltipp zu sehen." + +msgid "gdtr_mainbar_info" +msgstr "Die Mainbar ist das Hauptmenü, das auf großen Bildschirmen auf der linken Seite angezeigt wird." + +msgid "gdtr_metabar" +msgstr "Metabar" + +msgid "gdtr_metabar_ID_info" +msgstr "ID des gewünschten Elements in der Metabar. Fahren Sie mit der Maus über das Element, um die ID als Tooltipp zu sehen." + +msgid "gdtr_metabar_info" +msgstr "Die Metabar ist das Menü im rechten, oberen Bildrand." + +msgid "gdtr_next_step" +msgstr "Nächster Schritt" + +msgid "gdtr_permission" +msgstr "Nach Rechten" + +msgid "gdtr_permission_info" +msgstr "Nur Personen mit den ausgewählten Rechten sehen die Tour. Diese Einstellung sollte nur zusammen mit der Einstellung „Nach Screen-ID“ genutzt werden." + +msgid "gdtr_presentation_limitation" +msgstr "Anzeige einschränken" + +msgid "gdtr_primary_button" +msgstr "Primary Button" + +msgid "gdtr_primary_button_info" +msgstr "Diese besonderen Buttons gibt es nur auf wenigen Seiten in ILIAS. Sie sind farblich besonders hervorgehoben und kennzeichnen die wichtigste Aktion, die auf der Seite vorgenommen werden kann." + +msgid "gdtr_reset_tour" +msgstr "Tour zurücksetzen" + +msgid "gdtr_reset_tour_mess" +msgstr "Wenn Sie die Tour zurücksetzen, werden alle diejenigen, die zuvor die Tour abgeschlossen haben, die Tour erneut präsentiert bekommen. Möchten Sie fortfahren?" + +msgid "gdtr_screen_ids" +msgstr "Nach Screen-IDs" + +msgid "gdtr_screen_ids_info" +msgstr "Tragen Sie hier die Screen-IDs der Seiten ein, auf denen die Tour angezeigt wird – falls diese nicht überall gezeigt werden soll. Mehrere Screen-IDs müssen durch Kommas getrennt werden." + +msgid "gdtr_step" +msgstr "Schritt" + +msgid "gdtr_step_type" +msgstr "Bedienelement" + +msgid "gdtr_table" +msgstr "Tabelle" + +msgid "gdtr_table_info" +msgstr "Die erste Tabelle einer Seite" + +msgid "gdtr_tabs" +msgstr "Reiter" + +msgid "gdtr_tabs_ID_info" +msgstr "ID des gewünschten Reiters. Fahren Sie mit der Maus über einen Reiter, um die ID als Tooltipp zu sehen." + +msgid "gdtr_tabs_info" +msgstr "Reiter werden unter dem Titel einer Seite dargestellt." + +msgid "gdtr_toolbar" +msgstr "Toolbar" + +msgid "gdtr_toolbar_info" +msgstr "Die Toolbar wird auf einigen Seiten unterhalb der Reiter dargestellt und enthält meistens mehrere Buttons." + +msgid "gdtr_tour_has_been_reset" +msgstr "Die Tour wurde zurückgesetzt." + +msgid "gdtr_tour_settings" +msgstr "Einstellungen bearbeiten" + +msgid "gdtr_tour_steps" +msgstr "Schritte" + +msgid "gdtr_tours" +msgstr "Touren" + +msgid "gdtr_type" +msgstr "Bedienelemente" + +msgid "guided_tour" +msgstr "Interaktive Touren" + +msgid "help_all" +msgstr "Alle" + +msgid "help_component" +msgstr "Komponente" + +msgid "help_filter" +msgstr "Filter" + +msgid "help_help_file" +msgstr "Online-Hilfe-Paket" + +msgid "help_help_only" +msgstr "Nur Handlungsanweisungen" + +msgid "help_imported_on" +msgstr "Importiert am" + +msgid "help_module_uploaded" +msgstr "Hilfe-Paket hochgeladen" + +msgid "help_modules" +msgstr "Hilfe-Pakete" + +msgid "help_no_content" +msgstr "Zur aktuellen Ansicht steht leider keine Hilfe zur Verfügung. Sie können die Suche nutzen um Hilfeinhalte zu finden." + +msgid "help_open_online_help" +msgstr "Online-Hilfe öffnen" + +msgid "help_order" +msgstr "Order" + +msgid "help_search_label" +msgstr "Suche in Hilfe" + +msgid "help_select_a_file" +msgstr "Bitte wählen Sie eine Datei." + +msgid "help_set_mode" +msgstr "Hilfemodus setzen" + +msgid "help_sure_delete_help_modules" +msgstr "Wollen Sie diese Pakete wirklich löschen?" + +msgid "help_toggle_tooltips" +msgstr "Hilfe-Tooltipps" + +msgid "help_toggle_tooltips_info" +msgstr "Hilfe-Tooltipps zu Menüs und Reitern anzeigen." + +msgid "help_tooltip_id" +msgstr "Tooltipp-ID" + +msgid "help_tooltips" +msgstr "Hilfe-Tooltipps" + +msgid "help_tooltips_and_help" +msgstr "Tooltipps und Handlungsanweisungen" + +msgid "help_tooltips_only" +msgstr "Nur Tooltipps" + +msgid "help_topcis" +msgstr "Themen" + +msgid "help_tt_text" +msgstr "Text" diff --git a/components/ILIAS/Help/lang/help_el.po b/components/ILIAS/Help/lang/help_el.po new file mode 100644 index 000000000000..705eb0ca88b4 --- /dev/null +++ b/components/ILIAS/Help/lang/help_el.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +#, fuzzy +msgid "help_all" +msgstr "All" + +#, fuzzy +msgid "help_component" +msgstr "Component" + +#, fuzzy +msgid "help_filter" +msgstr "Filter" + +#, fuzzy +msgid "help_help_file" +msgstr "Help Package File" + +#, fuzzy +msgid "help_help_only" +msgstr "Workflow Help Only" + +#, fuzzy +msgid "help_imported_on" +msgstr "Imported on" + +#, fuzzy +msgid "help_module_uploaded" +msgstr "Help package uploaded." + +#, fuzzy +msgid "help_modules" +msgstr "Help Packages" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +#, fuzzy +msgid "help_open_online_help" +msgstr "Open Online Help" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +#, fuzzy +msgid "help_set_mode" +msgstr "Set Mode" + +#, fuzzy +msgid "help_sure_delete_help_modules" +msgstr "Are you sure that these packages should be deleted?" + +#, fuzzy +msgid "help_toggle_tooltips" +msgstr "Toggle Help Tooltips" + +#, fuzzy +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +#, fuzzy +msgid "help_tooltip_id" +msgstr "Tooltip ID" + +#, fuzzy +msgid "help_tooltips" +msgstr "Help Tooltips" + +#, fuzzy +msgid "help_tooltips_and_help" +msgstr "Tooltips and Workflow Help" + +#, fuzzy +msgid "help_tooltips_only" +msgstr "Tooltips Only" + +#, fuzzy +msgid "help_topcis" +msgstr "Topics" + +#, fuzzy +msgid "help_tt_text" +msgstr "Text" diff --git a/components/ILIAS/Help/lang/help_en.po b/components/ILIAS/Help/lang/help_en.po new file mode 100644 index 000000000000..7df8e946d211 --- /dev/null +++ b/components/ILIAS/Help/lang/help_en.po @@ -0,0 +1,249 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: help\n" + +msgid "gdtr_active" +msgstr "Active" + +msgid "gdtr_add_step" +msgstr "Add Step" + +msgid "gdtr_add_tour" +msgstr "Add Tour" + +msgid "gdtr_close" +msgstr "End Tour" + +msgid "gdtr_delete_step" +msgstr "Delete Step" + +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +msgid "gdtr_edit_content" +msgstr "Edit Content" + +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +msgid "gdtr_edit_properties" +msgstr "Edit UI Elements" + +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +msgid "gdtr_element_id" +msgstr "Element ID" + +msgid "gdtr_form" +msgstr "Form" + +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +msgid "gdtr_id_settings" +msgstr "ID Settings" + +msgid "gdtr_import_tour" +msgstr "Import Tour" + +msgid "gdtr_language" +msgstr "Language" + +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +msgid "gdtr_mainbar" +msgstr "Mainbar" + +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side." + +msgid "gdtr_metabar" +msgstr "Metabar" + +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right." + +msgid "gdtr_next_step" +msgstr "Next Step" + +msgid "gdtr_permission" +msgstr "Permission" + +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +msgid "gdtr_primary_button" +msgstr "Primary Button" + +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +msgid "gdtr_step" +msgstr "Step" + +msgid "gdtr_step_type" +msgstr "User Interface Element" + +msgid "gdtr_table" +msgstr "Table" + +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +msgid "gdtr_tabs" +msgstr "Tabs" + +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen." + +msgid "gdtr_toolbar" +msgstr "Toolbar" + +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +msgid "gdtr_tours" +msgstr "Tours" + +msgid "gdtr_type" +msgstr "UI Elements" + +msgid "guided_tour" +msgstr "Guided Tour" + +msgid "help_all" +msgstr "All" + +msgid "help_component" +msgstr "Component" + +msgid "help_filter" +msgstr "Filter" + +msgid "help_help_file" +msgstr "Help Package File" + +msgid "help_help_only" +msgstr "Workflow Help Only" + +msgid "help_imported_on" +msgstr "Imported on" + +msgid "help_module_uploaded" +msgstr "Help package uploaded." + +msgid "help_modules" +msgstr "Help Packages" + +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +msgid "help_open_online_help" +msgstr "Open Online Help" + +msgid "help_order" +msgstr "Order" + +msgid "help_search_label" +msgstr "Search Help" + +msgid "help_select_a_file" +msgstr "Please select a file." + +msgid "help_set_mode" +msgstr "Set Mode" + +msgid "help_sure_delete_help_modules" +msgstr "Are you sure that these packages should be deleted?" + +msgid "help_toggle_tooltips" +msgstr "Help Tooltips" + +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +msgid "help_tooltip_id" +msgstr "Tooltip ID" + +msgid "help_tooltips" +msgstr "Help Tooltips" + +msgid "help_tooltips_and_help" +msgstr "Tooltips and Workflow Help" + +msgid "help_tooltips_only" +msgstr "Tooltips Only" + +msgid "help_topcis" +msgstr "Topics" + +msgid "help_tt_text" +msgstr "Text" diff --git a/components/ILIAS/Help/lang/help_es.po b/components/ILIAS/Help/lang/help_es.po new file mode 100644 index 000000000000..5ac6c81c1525 --- /dev/null +++ b/components/ILIAS/Help/lang/help_es.po @@ -0,0 +1,249 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: help\n" + +msgid "gdtr_active" +msgstr "Active" + +msgid "gdtr_add_step" +msgstr "Add Step" + +msgid "gdtr_add_tour" +msgstr "Add Tour" + +msgid "gdtr_close" +msgstr "End Tour" + +msgid "gdtr_delete_step" +msgstr "Delete Step" + +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +msgid "gdtr_edit_content" +msgstr "Edit Content" + +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +msgid "gdtr_element_id" +msgstr "Element ID" + +msgid "gdtr_form" +msgstr "Form" + +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +msgid "gdtr_id_settings" +msgstr "ID Settings" + +msgid "gdtr_import_tour" +msgstr "Import Tour" + +msgid "gdtr_language" +msgstr "Language" + +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +msgid "gdtr_mainbar" +msgstr "Mainbar" + +msgid "gdtr_mainbar_ID_info" +msgstr "ID de la entrada deseada en el menú principal. Mueve el ratón sobre la entrada para ver el ID como información emergente." + +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side." + +msgid "gdtr_metabar" +msgstr "Metabar" + +msgid "gdtr_metabar_ID_info" +msgstr "ID del elemento deseado en la barra de metadatos. Mueve el ratón sobre el elemento para ver el ID como información emergente." + +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right." + +msgid "gdtr_next_step" +msgstr "Next Step" + +msgid "gdtr_permission" +msgstr "Permission" + +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +msgid "gdtr_presentation_limitation" +msgstr "Limitación de presentación" + +msgid "gdtr_primary_button" +msgstr "Primary Button" + +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +msgid "gdtr_step" +msgstr "Step" + +msgid "gdtr_step_type" +msgstr "User Interface Element" + +msgid "gdtr_table" +msgstr "Table" + +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +msgid "gdtr_tabs" +msgstr "Tabs" + +msgid "gdtr_tabs_ID_info" +msgstr "ID de la pestaña deseada. Mueve el ratón sobre una pestaña para ver el ID como información emergente." + +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen." + +msgid "gdtr_toolbar" +msgstr "Toolbar" + +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +msgid "gdtr_tour_settings" +msgstr "Editar configuración" + +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +msgid "gdtr_tours" +msgstr "Tours" + +msgid "gdtr_type" +msgstr "Type" + +msgid "guided_tour" +msgstr "Guided Tour" + +msgid "help_all" +msgstr "Todo" + +msgid "help_component" +msgstr "Componente" + +msgid "help_filter" +msgstr "Filtrar" + +msgid "help_help_file" +msgstr "Archivo del paquete de ayuda" + +msgid "help_help_only" +msgstr "Solo ayuda de flujo de trabajo" + +msgid "help_imported_on" +msgstr "Importado el" + +msgid "help_module_uploaded" +msgstr "Paquete de ayuda subido." + +msgid "help_modules" +msgstr "Paquetes de ayuda" + +msgid "help_no_content" +msgstr "No hay contenido de ayuda disponible para la pantalla actual. Puede utilizar la herramienta de búsqueda." + +msgid "help_open_online_help" +msgstr "Abrir ayuda en línea" + +msgid "help_order" +msgstr "Orden" + +msgid "help_search_label" +msgstr "Buscar en la ayuda" + +msgid "help_select_a_file" +msgstr "Por favor, seleccione un archivo." + +msgid "help_set_mode" +msgstr "Establecer modo" + +msgid "help_sure_delete_help_modules" +msgstr "¿Está seguro de que desea eliminar estos paquetes?" + +msgid "help_toggle_tooltips" +msgstr "Sugerencias de ayuda (Tooltips)" + +msgid "help_toggle_tooltips_info" +msgstr "Mostrar sugerencias de ayuda para menús y pestañas." + +msgid "help_tooltip_id" +msgstr "ID de la sugerencia" + +msgid "help_tooltips" +msgstr "Sugerencias de ayuda (Tooltips)" + +msgid "help_tooltips_and_help" +msgstr "Sugerencias y ayuda de flujo de trabajo" + +msgid "help_tooltips_only" +msgstr "Solo sugerencias" + +msgid "help_topcis" +msgstr "Temas" + +msgid "help_tt_text" +msgstr "Texto" diff --git a/components/ILIAS/Help/lang/help_et.po b/components/ILIAS/Help/lang/help_et.po new file mode 100644 index 000000000000..ab47de645903 --- /dev/null +++ b/components/ILIAS/Help/lang/help_et.po @@ -0,0 +1,311 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +msgid "help_all" +msgstr "All" + +msgid "help_component" +msgstr "Component" + +msgid "help_filter" +msgstr "Filter" + +msgid "help_help_file" +msgstr "Help Package File" + +msgid "help_help_only" +msgstr "Workflow Help Only" + +msgid "help_imported_on" +msgstr "Imported on" + +msgid "help_module_uploaded" +msgstr "Help package uploaded." + +msgid "help_modules" +msgstr "Help Packages" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +msgid "help_open_online_help" +msgstr "Open Online Help" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +msgid "help_set_mode" +msgstr "Set Mode" + +msgid "help_sure_delete_help_modules" +msgstr "Are you sure that these packages should be deleted?" + +msgid "help_toggle_tooltips" +msgstr "Toggle Help Tooltips" + +#, fuzzy +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +msgid "help_tooltip_id" +msgstr "Tooltip ID" + +msgid "help_tooltips" +msgstr "Help Tooltips" + +msgid "help_tooltips_and_help" +msgstr "Tooltips and Workflow Help" + +msgid "help_tooltips_only" +msgstr "Tooltips Only" + +msgid "help_topcis" +msgstr "Topics" + +msgid "help_tt_text" +msgstr "Text" diff --git a/components/ILIAS/Help/lang/help_fa.po b/components/ILIAS/Help/lang/help_fa.po new file mode 100644 index 000000000000..317e8b2eb149 --- /dev/null +++ b/components/ILIAS/Help/lang/help_fa.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +#, fuzzy +msgid "help_all" +msgstr "All" + +#, fuzzy +msgid "help_component" +msgstr "Component" + +#, fuzzy +msgid "help_filter" +msgstr "Filter" + +#, fuzzy +msgid "help_help_file" +msgstr "Help Package File" + +#, fuzzy +msgid "help_help_only" +msgstr "Workflow Help Only" + +#, fuzzy +msgid "help_imported_on" +msgstr "Imported on" + +#, fuzzy +msgid "help_module_uploaded" +msgstr "Help package uploaded." + +#, fuzzy +msgid "help_modules" +msgstr "Help Packages" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +#, fuzzy +msgid "help_open_online_help" +msgstr "Open Online Help" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +#, fuzzy +msgid "help_set_mode" +msgstr "Set Mode" + +#, fuzzy +msgid "help_sure_delete_help_modules" +msgstr "Are you sure that these packages should be deleted?" + +#, fuzzy +msgid "help_toggle_tooltips" +msgstr "Toggle Help Tooltips" + +#, fuzzy +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +#, fuzzy +msgid "help_tooltip_id" +msgstr "Tooltip ID" + +#, fuzzy +msgid "help_tooltips" +msgstr "Help Tooltips" + +#, fuzzy +msgid "help_tooltips_and_help" +msgstr "Tooltips and Workflow Help" + +#, fuzzy +msgid "help_tooltips_only" +msgstr "Tooltips Only" + +#, fuzzy +msgid "help_topcis" +msgstr "Topics" + +#, fuzzy +msgid "help_tt_text" +msgstr "Text" diff --git a/components/ILIAS/Help/lang/help_fr.po b/components/ILIAS/Help/lang/help_fr.po new file mode 100644 index 000000000000..7d10c92c8239 --- /dev/null +++ b/components/ILIAS/Help/lang/help_fr.po @@ -0,0 +1,308 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +msgid "help_all" +msgstr "Tous" + +msgid "help_component" +msgstr "Composant" + +msgid "help_filter" +msgstr "Filtre" + +msgid "help_help_file" +msgstr "Fichier du Package d'Aide" + +msgid "help_help_only" +msgstr "Workflow Seulement" + +msgid "help_imported_on" +msgstr "Importé le" + +msgid "help_module_uploaded" +msgstr "Package d'aide déposé." + +msgid "help_modules" +msgstr "Packages d'Aide" + +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +msgid "help_open_online_help" +msgstr "Aide En-Ligne Ouverte" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +msgid "help_set_mode" +msgstr "Changer Mode" + +msgid "help_sure_delete_help_modules" +msgstr "Etes-vous sûr de vouloir supprimer ce package d'aide ?" + +msgid "help_toggle_tooltips" +msgstr "Activer Etiquettes d'Aide" + +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +msgid "help_tooltip_id" +msgstr "ID d'Etiquette" + +msgid "help_tooltips" +msgstr "Etiquettes d'Aide" + +msgid "help_tooltips_and_help" +msgstr "Etiquettes et Workflow" + +msgid "help_tooltips_only" +msgstr "Etiquettes Seulement" + +msgid "help_topcis" +msgstr "Sujets" + +msgid "help_tt_text" +msgstr "Texte" diff --git a/components/ILIAS/Help/lang/help_hr.po b/components/ILIAS/Help/lang/help_hr.po new file mode 100644 index 000000000000..09c7cdf75a0a --- /dev/null +++ b/components/ILIAS/Help/lang/help_hr.po @@ -0,0 +1,310 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +msgid "help_all" +msgstr "Opće informacije" + +msgid "help_component" +msgstr "Ocjenjivanje" + +msgid "help_filter" +msgstr "Informacije o ocjenjivanju" + +msgid "help_help_file" +msgstr "Zapis o ocjenjivanju" + +msgid "help_help_only" +msgstr "Izradite individualnu procjenu" + +msgid "help_imported_on" +msgstr "Nije moguće dodati jednog ili više korisnika." + +msgid "help_module_uploaded" +msgstr "Korisnik je dodan kao sudionik." + +msgid "help_modules" +msgstr "Help Packages" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +msgid "help_open_online_help" +msgstr "Open Online Help" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +msgid "help_set_mode" +msgstr "Set Mode" + +msgid "help_sure_delete_help_modules" +msgstr "Are you sure that these packages should be deleted?" + +msgid "help_toggle_tooltips" +msgstr "Help Tooltips" + +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +msgid "help_tooltip_id" +msgstr "Tooltip ID" + +msgid "help_tooltips" +msgstr "Help Tooltips" + +msgid "help_tooltips_and_help" +msgstr "Tooltips and Workflow Help" + +msgid "help_tooltips_only" +msgstr "Tooltips Only" + +msgid "help_topcis" +msgstr "Topics" + +msgid "help_tt_text" +msgstr "Text" diff --git a/components/ILIAS/Help/lang/help_hu.po b/components/ILIAS/Help/lang/help_hu.po new file mode 100644 index 000000000000..bd7ab6873954 --- /dev/null +++ b/components/ILIAS/Help/lang/help_hu.po @@ -0,0 +1,249 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: help\n" + +msgid "gdtr_active" +msgstr "Aktív" + +msgid "gdtr_add_step" +msgstr "Lépés hozzáadása" + +msgid "gdtr_add_tour" +msgstr "Túra hozzáadása" + +msgid "gdtr_close" +msgstr "Túra vége" + +msgid "gdtr_delete_step" +msgstr "Lépés törlése" + +msgid "gdtr_delete_step_mess" +msgstr "Biztos, hogy törli ezt a lépést?" + +msgid "gdtr_delete_tour" +msgstr "Túra törlése" + +msgid "gdtr_delete_tour_mess" +msgstr "Biztos, hogy törli ezt a túrát?" + +msgid "gdtr_deleted_step" +msgstr "A lépést sikeresen törölte." + +msgid "gdtr_deleted_tour" +msgstr "A túrát sikeresen törölte." + +msgid "gdtr_edit_content" +msgstr "Tartalom módosítása" + +msgid "gdtr_edit_page_info" +msgstr "A kiválasztott felhasználói felület elemét elmagyarázó tartalom szerkesztése." + +msgid "gdtr_edit_properties" +msgstr "Tulajdonságok módosítása" + +msgid "gdtr_edit_step_info" +msgstr "Itt azt határozhatja meg, hogy a képernyőn melyik elemét magyarázzuk a túra következő lépésében. Egy erre az elemre mutató felugró ablak az Ön által meghatározott magyarázó szöveggel jelenik meg." + +msgid "gdtr_edit_steps" +msgstr "Lépések módosítása" + +msgid "gdtr_element_id" +msgstr "Elem ID" + +msgid "gdtr_form" +msgstr "Űrlap" + +msgid "gdtr_form_info" +msgstr "A fő tartalomterület első űrlapja. Minden nézet általában egy ilyen űrlapot tartalmaz." + +msgid "gdtr_guided_tours" +msgstr "Vezetett túrák" + +msgid "gdtr_id_pres_users" +msgstr "Felhasználók, akiknek az ID-k megjelenítések" + +msgid "gdtr_id_pres_users_info" +msgstr "Felhasználónevek, akiknek a SCREEN-ID és túra lépésihez megadandó elem-ID-k megjelenjenek. Ha többet ad meg, azokat vesszővel válassza el." + +msgid "gdtr_id_settings" +msgstr "ID beállítások" + +msgid "gdtr_import_tour" +msgstr "Túra importálása" + +msgid "gdtr_language" +msgstr "Nyelv" + +msgid "gdtr_language_info" +msgstr "Túra aktiválása csak a kiválasztott nyelvet használó felhasználók számára." + +msgid "gdtr_list_tours_mess" +msgstr "A képernyő- és az elem-ID-k megjelenítéséhez, menjen az ID-beállításokhoz és adja meg felhasználónevét." + +msgid "gdtr_mainbar" +msgstr "Fősáv" + +msgid "gdtr_mainbar_ID_info" +msgstr "A fősáv adott elemének ID-je. Húzza az egeret az elem fölé, hogy az ID buboréksúgóban megjelenjen." + +msgid "gdtr_mainbar_info" +msgstr "A bal oldali menű a Fősáv. Ha az elem-ID megjelenítése aktív, az ID-k ez elemek buboréksúgójában jelennek meg." + +msgid "gdtr_metabar" +msgstr "Metasáv" + +msgid "gdtr_metabar_ID_info" +msgstr "A metasáv adott elemének ID-je. Húzza az egeret az elem fölé, hogy az ID a buboréksúgóban megjelenjen." + +msgid "gdtr_metabar_info" +msgstr "A metasáv a felül, jobb oldalon található menü. Ha az elem-ID megjelenítése be van kapcsolva, az ID-k az adott elem buboréksúgójában jelennek meg." + +msgid "gdtr_next_step" +msgstr "Következő lépés" + +msgid "gdtr_permission" +msgstr "Jogosultság" + +msgid "gdtr_permission_info" +msgstr "A vezetett túrát csak az objektumhoz adott jogosultsággal rendelkező felhasználóknak kapcsoljuk be, például egy kurzuhoz csak ‘beállítások módosítása’ jogosultságggal rendelkezőknek. Amennyiben a ‘Létrehozás’-t választja, a vezetett túra csak a létrehozási jogosultsággal rendelkezőknek jelenik meg." + +msgid "gdtr_presentation_limitation" +msgstr "A megjelenítés korlátja" + +msgid "gdtr_primary_button" +msgstr "Elsődleges gomb" + +msgid "gdtr_primary_button_info" +msgstr "A fő tartalomterület első elsődleges gombja. Az elsődleges gombok kiemelten jelennek meg a standard gombokhoz képest. Minden nézet általában egy ilyen gombot tartalmaz." + +msgid "gdtr_reset_tour" +msgstr "Túra visszaállítása" + +msgid "gdtr_reset_tour_mess" +msgstr "Ha visszaállítja a túrát, akkor minden felhasználó, aki korábban befejezte a túrát, újra látni fogja azt. Biztos, hogy folytatja?" + +msgid "gdtr_screen_ids" +msgstr "Screen-ID-k" + +msgid "gdtr_screen_ids_info" +msgstr "Csak a rendszer különböző nézeteihez engedélyezzen vezetett túrát. Ha az elem-ID-k aktiválva vannak, az aktuális nézet Screen-ID a fejléc tetején található. Több ID-t vesszővel válasszon el." + +msgid "gdtr_step" +msgstr "Lépés" + +msgid "gdtr_step_type" +msgstr "Felhasználói interfész elem" + +msgid "gdtr_table" +msgstr "Tábla" + +msgid "gdtr_table_info" +msgstr "A fő tartalomterület első táblázata. Minden nézet általában egy ilyen eszköztárat tartalmaz." + +msgid "gdtr_tabs" +msgstr "Fülek" + +msgid "gdtr_tabs_ID_info" +msgstr "A fül azonosítója. Vigye az egérmutatót egy fül fölé, hogy az azonosító jelenjen meg." + +msgid "gdtr_tabs_info" +msgstr "A fülek a képernyő fő fejléce alatt jelennek meg. Amennyiben az elem-ID megjelenítése be van kapcsolva, az ID-k az adott elem buboréksúgójában jelennek meg." + +msgid "gdtr_toolbar" +msgstr "Eszköztár" + +msgid "gdtr_toolbar_info" +msgstr "A fő tartalomterület első eszköztára, amely általában a fülek alatt jelenik meg. Minden nézet csak egy ilyen eszköztárat tartalmaz." + +msgid "gdtr_tour_has_been_reset" +msgstr "A túrát sikeresen reszetelte." + +msgid "gdtr_tour_settings" +msgstr "Beállítások módosítása" + +msgid "gdtr_tour_steps" +msgstr "Túra lépései" + +msgid "gdtr_tours" +msgstr "Túrák" + +msgid "gdtr_type" +msgstr "Típus" + +msgid "guided_tour" +msgstr "Vezetett túra" + +msgid "help_all" +msgstr "Összes" + +msgid "help_component" +msgstr "Komponens" + +msgid "help_filter" +msgstr "Szűrő" + +msgid "help_help_file" +msgstr "Súgó csomagfájl" + +msgid "help_help_only" +msgstr "Csak munkamenet súgó" + +msgid "help_imported_on" +msgstr "Importálva itt:" + +msgid "help_module_uploaded" +msgstr "Súgócsomag feltöltve." + +msgid "help_modules" +msgstr "Súgócsomagok" + +msgid "help_no_content" +msgstr "Nincs segítő tartalom ehhez a képernyőhöz. Megpróbálhatja a keresővel." + +msgid "help_open_online_help" +msgstr "Online súgó megnyitása" + +msgid "help_order" +msgstr "Rendezés" + +msgid "help_search_label" +msgstr "Súgó keresése" + +msgid "help_select_a_file" +msgstr "Válasszon egy fájlt." + +msgid "help_set_mode" +msgstr "Mód beállítása" + +msgid "help_sure_delete_help_modules" +msgstr "Biztos, hogy törli ezeket a csomagokat?" + +msgid "help_toggle_tooltips" +msgstr "Buboréksúgók" + +msgid "help_toggle_tooltips_info" +msgstr "Menüpontok és lapok buboréksúgójának megjelenítése." + +msgid "help_tooltip_id" +msgstr "Buboréksúgó-ID" + +msgid "help_tooltips" +msgstr "Buboréksúgó" + +msgid "help_tooltips_and_help" +msgstr "Buboréksúgók és munkamenet súgó" + +msgid "help_tooltips_only" +msgstr "Csak buboréksúgók" + +msgid "help_topcis" +msgstr "Témasúgó" + +msgid "help_tt_text" +msgstr "Szöveg" diff --git a/components/ILIAS/Help/lang/help_it.po b/components/ILIAS/Help/lang/help_it.po new file mode 100644 index 000000000000..ce8ce0e8299a --- /dev/null +++ b/components/ILIAS/Help/lang/help_it.po @@ -0,0 +1,308 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +msgid "help_all" +msgstr "Tutte" + +msgid "help_component" +msgstr "Componente" + +msgid "help_filter" +msgstr "Filtro" + +msgid "help_help_file" +msgstr "File del pacchetto della Guida" + +msgid "help_help_only" +msgstr "Solo guida del flusso di lavoro" + +msgid "help_imported_on" +msgstr "Importato in" + +msgid "help_module_uploaded" +msgstr "Pacchetto della Guida caricato." + +msgid "help_modules" +msgstr "Pacchetti di Guida" + +msgid "help_no_content" +msgstr "Non è disponibile una sezione di aiuto per questa pagina. Puoi provare a utilizzare il tool di ricerca." + +msgid "help_open_online_help" +msgstr "Apri la guida in linea" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +msgid "help_search_label" +msgstr "Aiuto sulla ricerca" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +msgid "help_set_mode" +msgstr "Modalità impostazione" + +msgid "help_sure_delete_help_modules" +msgstr "Sei sicuro che questi pacchetti devono essere eliminati?" + +msgid "help_toggle_tooltips" +msgstr "Attiva descrizione comando di aiuto" + +msgid "help_toggle_tooltips_info" +msgstr "Mostra suggerimenti per menu e tab" + +msgid "help_tooltip_id" +msgstr "ID descrizione comando" + +msgid "help_tooltips" +msgstr "Descrizione comando di aiuto" + +msgid "help_tooltips_and_help" +msgstr "Descrizioni comandi e guida del flusso di lavoro" + +msgid "help_tooltips_only" +msgstr "Solo descrizioni comandi" + +msgid "help_topcis" +msgstr "Argomenti" + +msgid "help_tt_text" +msgstr "Testo" diff --git a/components/ILIAS/Help/lang/help_ja.po b/components/ILIAS/Help/lang/help_ja.po new file mode 100644 index 000000000000..5d98f3dc19e3 --- /dev/null +++ b/components/ILIAS/Help/lang/help_ja.po @@ -0,0 +1,249 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: help\n" + +msgid "gdtr_active" +msgstr "有効化" + +msgid "gdtr_add_step" +msgstr "ステップを追加" + +msgid "gdtr_add_tour" +msgstr "ツアーを追加" + +msgid "gdtr_close" +msgstr "ツアーを終了" + +msgid "gdtr_delete_step" +msgstr "ステップを削除" + +msgid "gdtr_delete_step_mess" +msgstr "このステップを削除してもよろしいですか?" + +msgid "gdtr_delete_tour" +msgstr "ツアーを削除" + +msgid "gdtr_delete_tour_mess" +msgstr "このツアーを削除しますか?" + +msgid "gdtr_deleted_step" +msgstr "ステップは削除されました。" + +msgid "gdtr_deleted_tour" +msgstr "ツアーは削除されました。" + +msgid "gdtr_edit_content" +msgstr "コンテンツを編集" + +msgid "gdtr_edit_page_info" +msgstr "選択したUI要素を説明するために提示すべき内容を編集します。" + +msgid "gdtr_edit_properties" +msgstr "プロパティを編集" + +msgid "gdtr_edit_step_info" +msgstr "この画面では、ツアーのこのステップで画面上のどの要素を説明するかを定義します。定義した説明文を表示するポップオーバーが、この要素を指す形で表示されます。" + +msgid "gdtr_edit_steps" +msgstr "編集ステップ" + +msgid "gdtr_element_id" +msgstr "要素ID" + +msgid "gdtr_form" +msgstr "フォーム" + +msgid "gdtr_form_info" +msgstr "メインコンテンツエリアの最初のフォーム。通常、ビューには1つのフォームのみ含める必要があります。" + +msgid "gdtr_guided_tours" +msgstr "ガイド付きツアー" + +msgid "gdtr_id_pres_users" +msgstr "ユーザアカウントのIDを表示" + +msgid "gdtr_id_pres_users_info" +msgstr "要素IDを表示する必要があるユーザーのログイン名。複数のエントリはカンマで区切ってください。" + +msgid "gdtr_id_settings" +msgstr "ID設定" + +msgid "gdtr_import_tour" +msgstr "ツアーをインポート" + +msgid "gdtr_language" +msgstr "言語" + +msgid "gdtr_language_info" +msgstr "選択された言語のユーザーにのみガイド付きツアーを有効にします。" + +msgid "gdtr_list_tours_mess" +msgstr "画面および要素のIDをツールチップとして表示するには、ID設定に切り替えてアカウント名を入力してください。" + +msgid "gdtr_mainbar" +msgstr "メインバー" + +msgid "gdtr_mainbar_ID_info" +msgstr "メインメニュー内の希望するエントリのID。エントリの上にマウスを移動すると、ツールチップとしてIDが表示されます。" + +msgid "gdtr_mainbar_info" +msgstr "メインバーは左側のメインメニューです。" + +msgid "gdtr_metabar" +msgstr "メタバー" + +msgid "gdtr_metabar_ID_info" +msgstr "メタバー内の目的の要素のID。要素にマウスを移動すると、IDがツールチップとして表示されます。" + +msgid "gdtr_metabar_info" +msgstr "メタバーは右上のメニューです" + +msgid "gdtr_next_step" +msgstr "次のステップ" + +msgid "gdtr_permission" +msgstr "許可" + +msgid "gdtr_permission_info" +msgstr "現在のリポジトリオブジェクトに対して特定の権限を持つユーザーのみが利用できるガイド付きツアーを有効にします。例えば、コースの「設定を編集」権限を持つユーザーのみが対象です。「作成」が選択されている場合、ユーザーが任意の作成権限を持っていればツアーが有効になります。" + +msgid "gdtr_presentation_limitation" +msgstr "プレゼンテーションの制限" + +msgid "gdtr_primary_button" +msgstr "プライマリーボタン" + +msgid "gdtr_primary_button_info" +msgstr "メインコンテンツエリアの最初のプライマリボタン。プライマリボタンは、標準ボタンと比べて強調して表示されます。通常、ビューにはプライマリボタンは1つだけ含めるべきです。" + +msgid "gdtr_reset_tour" +msgstr "ツアーを再スタート" + +msgid "gdtr_reset_tour_mess" +msgstr "ツアーをリセットすると、以前にツアーを終了したすべてのユーザーに再びツアーが表示されます。本当に続行してよろしいですか?" + +msgid "gdtr_screen_ids" +msgstr "スクリーンID" + +msgid "gdtr_screen_ids_info" +msgstr "システムの異なるビューに対してのみガイド付きツアーを有効にします。要素IDが有効になっている場合、現在のビューの画面IDはヘッダーの上部で確認できます。複数のIDはカンマで区切る必要があります。" + +msgid "gdtr_step" +msgstr "ステップ" + +msgid "gdtr_step_type" +msgstr "ユーザインタフェース要素" + +msgid "gdtr_table" +msgstr "テーブル" + +msgid "gdtr_table_info" +msgstr "メインコンテンツエリアの最初のテーブル。通常、ビューはテーブルを1つだけ含める必要があります。" + +msgid "gdtr_tabs" +msgstr "タブ" + +msgid "gdtr_tabs_ID_info" +msgstr "目的のタブのID。タブにマウスを重ねると、ツールチップとしてIDが表示されます。" + +msgid "gdtr_tabs_info" +msgstr "タブは画面のメインヘッダーの下に表示されます。" + +msgid "gdtr_toolbar" +msgstr "ツールバー" + +msgid "gdtr_toolbar_info" +msgstr "メインコンテンツエリアの最初のツールバーは、通常タブの下に表示されます。ビューにはツールバーは1つだけ含める必要があります。" + +msgid "gdtr_tour_has_been_reset" +msgstr "ツアーが再開されました。" + +msgid "gdtr_tour_settings" +msgstr "設定を編集" + +msgid "gdtr_tour_steps" +msgstr "ツアーステップ" + +msgid "gdtr_tours" +msgstr "ツアー" + +msgid "gdtr_type" +msgstr "タイプ" + +msgid "guided_tour" +msgstr "ガイド付きツアー" + +msgid "help_all" +msgstr "全て" + +msgid "help_component" +msgstr "構成" + +msgid "help_filter" +msgstr "フィルタ" + +msgid "help_help_file" +msgstr "ヘルプパッケージファイル" + +msgid "help_help_only" +msgstr "ワークフローヘルプのみ" + +msgid "help_imported_on" +msgstr "インポートした日付" + +msgid "help_module_uploaded" +msgstr "ヘルプパッケージをアップロードしました。" + +msgid "help_modules" +msgstr "ヘルプパッケージ" + +msgid "help_no_content" +msgstr "この画面にはヘルプコンテンツがありません。検索ツールを利用できます。" + +msgid "help_open_online_help" +msgstr "オンライヘルプを開く" + +msgid "help_order" +msgstr "Order" + +msgid "help_search_label" +msgstr "Help検索" + +msgid "help_select_a_file" +msgstr "ファイルを1個選択して下さい。" + +msgid "help_set_mode" +msgstr "モードをセット" + +msgid "help_sure_delete_help_modules" +msgstr "本当にそれらのパッケージを削除しますか。" + +msgid "help_toggle_tooltips" +msgstr "ツールチップヘルプを切替える" + +msgid "help_toggle_tooltips_info" +msgstr "メニューとタブ用のヘルプツールチップを表示" + +msgid "help_tooltip_id" +msgstr "ツールチップID" + +msgid "help_tooltips" +msgstr "ツールチップヘルプ" + +msgid "help_tooltips_and_help" +msgstr "ツールチップとワークフローヘルプ" + +msgid "help_tooltips_only" +msgstr "ツールチップのみ" + +msgid "help_topcis" +msgstr "トピック" + +msgid "help_tt_text" +msgstr "テキスト" diff --git a/components/ILIAS/Help/lang/help_ka.po b/components/ILIAS/Help/lang/help_ka.po new file mode 100644 index 000000000000..eff970caf7e6 --- /dev/null +++ b/components/ILIAS/Help/lang/help_ka.po @@ -0,0 +1,312 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +msgid "help_all" +msgstr "All" + +msgid "help_component" +msgstr "Component" + +msgid "help_filter" +msgstr "Filter" + +msgid "help_help_file" +msgstr "Help Package File" + +msgid "help_help_only" +msgstr "Workflow Help Only" + +msgid "help_imported_on" +msgstr "Imported on" + +msgid "help_module_uploaded" +msgstr "Help package uploaded." + +msgid "help_modules" +msgstr "Help Packages" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +msgid "help_open_online_help" +msgstr "Open Online Help" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +msgid "help_set_mode" +msgstr "Set Mode" + +msgid "help_sure_delete_help_modules" +msgstr "Are you sure that these packages should be deleted?" + +msgid "help_toggle_tooltips" +msgstr "Toggle Help Tooltips" + +#, fuzzy +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +msgid "help_tooltip_id" +msgstr "Tooltip ID" + +msgid "help_tooltips" +msgstr "Help Tooltips" + +msgid "help_tooltips_and_help" +msgstr "Tooltips and Workflow Help" + +msgid "help_tooltips_only" +msgstr "Tooltips Only" + +#, fuzzy +msgid "help_topcis" +msgstr "Topics" + +msgid "help_tt_text" +msgstr "Text" diff --git a/components/ILIAS/Help/lang/help_lt.po b/components/ILIAS/Help/lang/help_lt.po new file mode 100644 index 000000000000..48035900872f --- /dev/null +++ b/components/ILIAS/Help/lang/help_lt.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +#, fuzzy +msgid "help_all" +msgstr "All" + +#, fuzzy +msgid "help_component" +msgstr "Component" + +#, fuzzy +msgid "help_filter" +msgstr "Filter" + +#, fuzzy +msgid "help_help_file" +msgstr "Help Package File" + +#, fuzzy +msgid "help_help_only" +msgstr "Workflow Help Only" + +#, fuzzy +msgid "help_imported_on" +msgstr "Imported on" + +#, fuzzy +msgid "help_module_uploaded" +msgstr "Help package uploaded." + +#, fuzzy +msgid "help_modules" +msgstr "Help Packages" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +#, fuzzy +msgid "help_open_online_help" +msgstr "Open Online Help" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +#, fuzzy +msgid "help_set_mode" +msgstr "Set Mode" + +#, fuzzy +msgid "help_sure_delete_help_modules" +msgstr "Are you sure that these packages should be deleted?" + +#, fuzzy +msgid "help_toggle_tooltips" +msgstr "Toggle Help Tooltips" + +#, fuzzy +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +#, fuzzy +msgid "help_tooltip_id" +msgstr "Tooltip ID" + +#, fuzzy +msgid "help_tooltips" +msgstr "Help Tooltips" + +#, fuzzy +msgid "help_tooltips_and_help" +msgstr "Tooltips and Workflow Help" + +#, fuzzy +msgid "help_tooltips_only" +msgstr "Tooltips Only" + +#, fuzzy +msgid "help_topcis" +msgstr "Topics" + +#, fuzzy +msgid "help_tt_text" +msgstr "Text" diff --git a/components/ILIAS/Help/lang/help_nl.po b/components/ILIAS/Help/lang/help_nl.po new file mode 100644 index 000000000000..7e4f66391423 --- /dev/null +++ b/components/ILIAS/Help/lang/help_nl.po @@ -0,0 +1,311 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +msgid "help_all" +msgstr "All" + +msgid "help_component" +msgstr "Component" + +msgid "help_filter" +msgstr "Filter" + +msgid "help_help_file" +msgstr "Help Package File" + +msgid "help_help_only" +msgstr "Workflow Help Only" + +msgid "help_imported_on" +msgstr "Imported on" + +msgid "help_module_uploaded" +msgstr "Help package uploaded." + +msgid "help_modules" +msgstr "Help Packages" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +msgid "help_open_online_help" +msgstr "Open Online Help" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +msgid "help_set_mode" +msgstr "Set Mode" + +msgid "help_sure_delete_help_modules" +msgstr "Are you sure that these packages should be deleted?" + +msgid "help_toggle_tooltips" +msgstr "Toggle Help Tooltips" + +#, fuzzy +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +msgid "help_tooltip_id" +msgstr "Tooltip ID" + +msgid "help_tooltips" +msgstr "Help Tooltips" + +msgid "help_tooltips_and_help" +msgstr "Tooltips and Workflow Help" + +msgid "help_tooltips_only" +msgstr "Tooltips Only" + +msgid "help_topcis" +msgstr "Onderwerpen" + +msgid "help_tt_text" +msgstr "Text" diff --git a/components/ILIAS/Help/lang/help_pl.po b/components/ILIAS/Help/lang/help_pl.po new file mode 100644 index 000000000000..630d2b9ab64e --- /dev/null +++ b/components/ILIAS/Help/lang/help_pl.po @@ -0,0 +1,310 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +msgid "help_all" +msgstr "Wszyscy" + +msgid "help_component" +msgstr "Element" + +msgid "help_filter" +msgstr "Filtr" + +msgid "help_help_file" +msgstr "Pakiet wsparcia online" + +msgid "help_help_only" +msgstr "Tylko wskazówki dotyczące postępowania" + +msgid "help_imported_on" +msgstr "Zaimportowano w dniu" + +msgid "help_module_uploaded" +msgstr "Wysłano pakiet wsparcia" + +msgid "help_modules" +msgstr "Pakiety wsparcia" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +msgid "help_open_online_help" +msgstr "Otwórz wsparcie online" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +msgid "help_set_mode" +msgstr "Aktywuj tryb wsparcia" + +msgid "help_sure_delete_help_modules" +msgstr "Czy naprawdę chcesz usunąć ten pakiet wsparcia?" + +msgid "help_toggle_tooltips" +msgstr "Włączy/wyłącz wskazówki i porady" + +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +msgid "help_tooltip_id" +msgstr "Numer ID porady" + +msgid "help_tooltips" +msgstr "Wskazówki i porady" + +msgid "help_tooltips_and_help" +msgstr "Porady i wskazówki dotyczące postępowania" + +msgid "help_tooltips_only" +msgstr "Tylko porady" + +msgid "help_topcis" +msgstr "Tematy" + +msgid "help_tt_text" +msgstr "Tekst" diff --git a/components/ILIAS/Help/lang/help_pt.po b/components/ILIAS/Help/lang/help_pt.po new file mode 100644 index 000000000000..8e0d3858018d --- /dev/null +++ b/components/ILIAS/Help/lang/help_pt.po @@ -0,0 +1,310 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +msgid "help_all" +msgstr "Todos" + +msgid "help_component" +msgstr "Componente" + +msgid "help_filter" +msgstr "Filtrar" + +msgid "help_help_file" +msgstr "Ficheiro de pacote de ajuda" + +msgid "help_help_only" +msgstr "Apenas ajuda para fluxo de trabalho" + +msgid "help_imported_on" +msgstr "Importado em" + +msgid "help_module_uploaded" +msgstr "Pacote de ajuda carregado" + +msgid "help_modules" +msgstr "Pacotes de ajuda" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +msgid "help_open_online_help" +msgstr "Abrir ajuda online" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +msgid "help_set_mode" +msgstr "Definir modo" + +msgid "help_sure_delete_help_modules" +msgstr "Tem a certeza que estes pacotes devem ser apagados?" + +msgid "help_toggle_tooltips" +msgstr "Alternar Ajuda das dicas de contexto" + +msgid "help_toggle_tooltips_info" +msgstr "Namíbia" + +msgid "help_tooltip_id" +msgstr "ID da dica de contexto" + +msgid "help_tooltips" +msgstr "Ajuda dicas de contexto" + +msgid "help_tooltips_and_help" +msgstr "Ajuda dicas de contexto e fluxo de trabalho" + +msgid "help_tooltips_only" +msgstr "Dicas de contexto apenas" + +msgid "help_topcis" +msgstr "Tópicos" + +msgid "help_tt_text" +msgstr "Texto" diff --git a/components/ILIAS/Help/lang/help_ro.po b/components/ILIAS/Help/lang/help_ro.po new file mode 100644 index 000000000000..0f825c5c47d1 --- /dev/null +++ b/components/ILIAS/Help/lang/help_ro.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +#, fuzzy +msgid "help_all" +msgstr "All" + +#, fuzzy +msgid "help_component" +msgstr "Component" + +#, fuzzy +msgid "help_filter" +msgstr "Filter" + +#, fuzzy +msgid "help_help_file" +msgstr "Help Package File" + +#, fuzzy +msgid "help_help_only" +msgstr "Workflow Help Only" + +#, fuzzy +msgid "help_imported_on" +msgstr "Imported on" + +#, fuzzy +msgid "help_module_uploaded" +msgstr "Help package uploaded." + +#, fuzzy +msgid "help_modules" +msgstr "Help Packages" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +#, fuzzy +msgid "help_open_online_help" +msgstr "Open Online Help" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +#, fuzzy +msgid "help_set_mode" +msgstr "Set Mode" + +#, fuzzy +msgid "help_sure_delete_help_modules" +msgstr "Are you sure that these packages should be deleted?" + +#, fuzzy +msgid "help_toggle_tooltips" +msgstr "Toggle Help Tooltips" + +#, fuzzy +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +#, fuzzy +msgid "help_tooltip_id" +msgstr "Tooltip ID" + +#, fuzzy +msgid "help_tooltips" +msgstr "Help Tooltips" + +#, fuzzy +msgid "help_tooltips_and_help" +msgstr "Tooltips and Workflow Help" + +#, fuzzy +msgid "help_tooltips_only" +msgstr "Tooltips Only" + +#, fuzzy +msgid "help_topcis" +msgstr "Topics" + +#, fuzzy +msgid "help_tt_text" +msgstr "Text" diff --git a/components/ILIAS/Help/lang/help_ru.po b/components/ILIAS/Help/lang/help_ru.po new file mode 100644 index 000000000000..ebfa84f95c80 --- /dev/null +++ b/components/ILIAS/Help/lang/help_ru.po @@ -0,0 +1,312 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +msgid "help_all" +msgstr "All" + +msgid "help_component" +msgstr "Component" + +msgid "help_filter" +msgstr "Фильтр" + +msgid "help_help_file" +msgstr "Файл пакета помощи" + +msgid "help_help_only" +msgstr "Только помощь по рабочему процессу" + +msgid "help_imported_on" +msgstr "Импортировано" + +msgid "help_module_uploaded" +msgstr "Help package uploaded." + +msgid "help_modules" +msgstr "Пакеты помощи" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +msgid "help_open_online_help" +msgstr "Open Online Help" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +msgid "help_set_mode" +msgstr "Установить режим" + +msgid "help_sure_delete_help_modules" +msgstr "Are you sure that these packages should be deleted?" + +msgid "help_toggle_tooltips" +msgstr "Toggle Help Tooltips" + +#, fuzzy +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +msgid "help_tooltip_id" +msgstr "Tooltip ID" + +msgid "help_tooltips" +msgstr "Help Tooltips" + +msgid "help_tooltips_and_help" +msgstr "Советы и помощь по рабочему процессу" + +msgid "help_tooltips_only" +msgstr "Только советы" + +#, fuzzy +msgid "help_topcis" +msgstr "Topics" + +msgid "help_tt_text" +msgstr "Text" diff --git a/components/ILIAS/Help/lang/help_sk.po b/components/ILIAS/Help/lang/help_sk.po new file mode 100644 index 000000000000..b69e48cdb293 --- /dev/null +++ b/components/ILIAS/Help/lang/help_sk.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +#, fuzzy +msgid "help_all" +msgstr "All" + +#, fuzzy +msgid "help_component" +msgstr "Component" + +#, fuzzy +msgid "help_filter" +msgstr "Filter" + +#, fuzzy +msgid "help_help_file" +msgstr "Help Package File" + +#, fuzzy +msgid "help_help_only" +msgstr "Workflow Help Only" + +#, fuzzy +msgid "help_imported_on" +msgstr "Imported on" + +#, fuzzy +msgid "help_module_uploaded" +msgstr "Help package uploaded." + +#, fuzzy +msgid "help_modules" +msgstr "Help Packages" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +#, fuzzy +msgid "help_open_online_help" +msgstr "Open Online Help" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +#, fuzzy +msgid "help_set_mode" +msgstr "Set Mode" + +#, fuzzy +msgid "help_sure_delete_help_modules" +msgstr "Are you sure that these packages should be deleted?" + +#, fuzzy +msgid "help_toggle_tooltips" +msgstr "Toggle Help Tooltips" + +#, fuzzy +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +#, fuzzy +msgid "help_tooltip_id" +msgstr "Tooltip ID" + +#, fuzzy +msgid "help_tooltips" +msgstr "Help Tooltips" + +#, fuzzy +msgid "help_tooltips_and_help" +msgstr "Tooltips and Workflow Help" + +#, fuzzy +msgid "help_tooltips_only" +msgstr "Tooltips Only" + +#, fuzzy +msgid "help_topcis" +msgstr "Topics" + +#, fuzzy +msgid "help_tt_text" +msgstr "Text" diff --git a/components/ILIAS/Help/lang/help_sl.po b/components/ILIAS/Help/lang/help_sl.po new file mode 100644 index 000000000000..6bd553e0a395 --- /dev/null +++ b/components/ILIAS/Help/lang/help_sl.po @@ -0,0 +1,308 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +msgid "help_all" +msgstr "All" + +msgid "help_component" +msgstr "Component" + +msgid "help_filter" +msgstr "Filter" + +msgid "help_help_file" +msgstr "Help Package File" + +msgid "help_help_only" +msgstr "Workflow Help Only" + +msgid "help_imported_on" +msgstr "Imported on" + +msgid "help_module_uploaded" +msgstr "Help package uploaded." + +msgid "help_modules" +msgstr "Help Packages" + +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +msgid "help_open_online_help" +msgstr "Open Online Help" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +msgid "help_set_mode" +msgstr "Set Mode" + +msgid "help_sure_delete_help_modules" +msgstr "Are you sure that these packages should be deleted?" + +msgid "help_toggle_tooltips" +msgstr "Help Tooltips" + +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +msgid "help_tooltip_id" +msgstr "Tooltip ID" + +msgid "help_tooltips" +msgstr "Help Tooltips" + +msgid "help_tooltips_and_help" +msgstr "Tooltips and Workflow Help" + +msgid "help_tooltips_only" +msgstr "Tooltips Only" + +msgid "help_topcis" +msgstr "Topics" + +msgid "help_tt_text" +msgstr "Text" diff --git a/components/ILIAS/Help/lang/help_sq.po b/components/ILIAS/Help/lang/help_sq.po new file mode 100644 index 000000000000..2fe4ef60ed05 --- /dev/null +++ b/components/ILIAS/Help/lang/help_sq.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +#, fuzzy +msgid "help_all" +msgstr "All" + +#, fuzzy +msgid "help_component" +msgstr "Component" + +#, fuzzy +msgid "help_filter" +msgstr "Filter" + +#, fuzzy +msgid "help_help_file" +msgstr "Help Package File" + +#, fuzzy +msgid "help_help_only" +msgstr "Workflow Help Only" + +#, fuzzy +msgid "help_imported_on" +msgstr "Imported on" + +#, fuzzy +msgid "help_module_uploaded" +msgstr "Help package uploaded." + +#, fuzzy +msgid "help_modules" +msgstr "Help Packages" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +#, fuzzy +msgid "help_open_online_help" +msgstr "Open Online Help" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +#, fuzzy +msgid "help_set_mode" +msgstr "Set Mode" + +#, fuzzy +msgid "help_sure_delete_help_modules" +msgstr "Are you sure that these packages should be deleted?" + +#, fuzzy +msgid "help_toggle_tooltips" +msgstr "Toggle Help Tooltips" + +#, fuzzy +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +#, fuzzy +msgid "help_tooltip_id" +msgstr "Tooltip ID" + +#, fuzzy +msgid "help_tooltips" +msgstr "Help Tooltips" + +#, fuzzy +msgid "help_tooltips_and_help" +msgstr "Tooltips and Workflow Help" + +#, fuzzy +msgid "help_tooltips_only" +msgstr "Tooltips Only" + +#, fuzzy +msgid "help_topcis" +msgstr "Topics" + +#, fuzzy +msgid "help_tt_text" +msgstr "Text" diff --git a/components/ILIAS/Help/lang/help_sr.po b/components/ILIAS/Help/lang/help_sr.po new file mode 100644 index 000000000000..83871b6662e3 --- /dev/null +++ b/components/ILIAS/Help/lang/help_sr.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +#, fuzzy +msgid "help_all" +msgstr "All" + +#, fuzzy +msgid "help_component" +msgstr "Component" + +#, fuzzy +msgid "help_filter" +msgstr "Filter" + +#, fuzzy +msgid "help_help_file" +msgstr "Help Package File" + +#, fuzzy +msgid "help_help_only" +msgstr "Workflow Help Only" + +#, fuzzy +msgid "help_imported_on" +msgstr "Imported on" + +#, fuzzy +msgid "help_module_uploaded" +msgstr "Help package uploaded." + +#, fuzzy +msgid "help_modules" +msgstr "Help Packages" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +#, fuzzy +msgid "help_open_online_help" +msgstr "Open Online Help" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +#, fuzzy +msgid "help_set_mode" +msgstr "Set Mode" + +#, fuzzy +msgid "help_sure_delete_help_modules" +msgstr "Are you sure that these packages should be deleted?" + +#, fuzzy +msgid "help_toggle_tooltips" +msgstr "Toggle Help Tooltips" + +#, fuzzy +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +#, fuzzy +msgid "help_tooltip_id" +msgstr "Tooltip ID" + +#, fuzzy +msgid "help_tooltips" +msgstr "Help Tooltips" + +#, fuzzy +msgid "help_tooltips_and_help" +msgstr "Tooltips and Workflow Help" + +#, fuzzy +msgid "help_tooltips_only" +msgstr "Tooltips Only" + +#, fuzzy +msgid "help_topcis" +msgstr "Topics" + +#, fuzzy +msgid "help_tt_text" +msgstr "Text" diff --git a/components/ILIAS/Help/lang/help_sv.po b/components/ILIAS/Help/lang/help_sv.po new file mode 100644 index 000000000000..d3d55f04e20b --- /dev/null +++ b/components/ILIAS/Help/lang/help_sv.po @@ -0,0 +1,307 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +msgid "help_all" +msgstr "Alla" + +msgid "help_component" +msgstr "Komponent" + +msgid "help_filter" +msgstr "Filter" + +msgid "help_help_file" +msgstr "Hjälp på nätet" + +msgid "help_help_only" +msgstr "Endast instruktioner för åtgärder" + +msgid "help_imported_on" +msgstr "Importerad på" + +msgid "help_module_uploaded" +msgstr "Hjälppaket uppladdat" + +msgid "help_modules" +msgstr "Hjälp paket" + +msgid "help_no_content" +msgstr "Tyvärr finns ingen hjälp tillgänglig för den aktuella vyn. Du kan använda sökningen för att hitta hjälpinnehåll." + +msgid "help_open_online_help" +msgstr "Öppen hjälp online" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +msgid "help_search_label" +msgstr "Sökning i Help" + +msgid "help_select_a_file" +msgstr "Välj en fil." + +msgid "help_set_mode" +msgstr "Ställ in hjälpläge" + +msgid "help_sure_delete_help_modules" +msgstr "Vill du verkligen ta bort dessa paket?" + +msgid "help_toggle_tooltips" +msgstr "Hjälp Verktygstips" + +msgid "help_toggle_tooltips_info" +msgstr "Visa hjälpverktygstips för menyer och flikar." + +msgid "help_tooltip_id" +msgstr "Tooltip ID" + +msgid "help_tooltips" +msgstr "Hjälp Verktygstips" + +msgid "help_tooltips_and_help" +msgstr "Tooltips och instruktioner för åtgärder" + +msgid "help_tooltips_only" +msgstr "Endast verktygstips" + +msgid "help_topcis" +msgstr "Ämnen" + +msgid "help_tt_text" +msgstr "Text" diff --git a/components/ILIAS/Help/lang/help_tr.po b/components/ILIAS/Help/lang/help_tr.po new file mode 100644 index 000000000000..8b218656644e --- /dev/null +++ b/components/ILIAS/Help/lang/help_tr.po @@ -0,0 +1,312 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +msgid "help_all" +msgstr "Tüm" + +msgid "help_component" +msgstr "Bileşen" + +msgid "help_filter" +msgstr "Filtre" + +msgid "help_help_file" +msgstr "Yardım Paketi Dosyası" + +msgid "help_help_only" +msgstr "İş Akışı Yardımı Sadece" + +msgid "help_imported_on" +msgstr "İçe aktarılma" + +msgid "help_module_uploaded" +msgstr "Yardım paketi yüklendi." + +msgid "help_modules" +msgstr "Yardımı Paketler" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +msgid "help_open_online_help" +msgstr "Açık Çevrimiçi Yardım" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +msgid "help_set_mode" +msgstr "Set Mode" + +msgid "help_sure_delete_help_modules" +msgstr "Bu paketlerin silinmesi gerektiğini emin misiniz?" + +msgid "help_toggle_tooltips" +msgstr "Toggle Yardım Tooltips" + +#, fuzzy +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +msgid "help_tooltip_id" +msgstr "Tooltip Kimliği" + +msgid "help_tooltips" +msgstr "Yardımı Tooltips" + +msgid "help_tooltips_and_help" +msgstr "Tooltips ve İş Akışı Yardım" + +msgid "help_tooltips_only" +msgstr "Tooltips Sadece" + +#, fuzzy +msgid "help_topcis" +msgstr "Topics" + +msgid "help_tt_text" +msgstr "Yazı" diff --git a/components/ILIAS/Help/lang/help_uk.po b/components/ILIAS/Help/lang/help_uk.po new file mode 100644 index 000000000000..3020b3b18ebc --- /dev/null +++ b/components/ILIAS/Help/lang/help_uk.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +#, fuzzy +msgid "help_all" +msgstr "All" + +#, fuzzy +msgid "help_component" +msgstr "Component" + +#, fuzzy +msgid "help_filter" +msgstr "Filter" + +#, fuzzy +msgid "help_help_file" +msgstr "Help Package File" + +#, fuzzy +msgid "help_help_only" +msgstr "Workflow Help Only" + +#, fuzzy +msgid "help_imported_on" +msgstr "Imported on" + +#, fuzzy +msgid "help_module_uploaded" +msgstr "Help package uploaded." + +#, fuzzy +msgid "help_modules" +msgstr "Help Packages" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +#, fuzzy +msgid "help_open_online_help" +msgstr "Open Online Help" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +#, fuzzy +msgid "help_set_mode" +msgstr "Set Mode" + +#, fuzzy +msgid "help_sure_delete_help_modules" +msgstr "Are you sure that these packages should be deleted?" + +#, fuzzy +msgid "help_toggle_tooltips" +msgstr "Toggle Help Tooltips" + +#, fuzzy +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +#, fuzzy +msgid "help_tooltip_id" +msgstr "Tooltip ID" + +#, fuzzy +msgid "help_tooltips" +msgstr "Help Tooltips" + +#, fuzzy +msgid "help_tooltips_and_help" +msgstr "Tooltips and Workflow Help" + +#, fuzzy +msgid "help_tooltips_only" +msgstr "Tooltips Only" + +#, fuzzy +msgid "help_topcis" +msgstr "Topics" + +#, fuzzy +msgid "help_tt_text" +msgstr "Text" diff --git a/components/ILIAS/Help/lang/help_vi.po b/components/ILIAS/Help/lang/help_vi.po new file mode 100644 index 000000000000..841d60da54d7 --- /dev/null +++ b/components/ILIAS/Help/lang/help_vi.po @@ -0,0 +1,329 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +#, fuzzy +msgid "help_all" +msgstr "All" + +#, fuzzy +msgid "help_component" +msgstr "Component" + +#, fuzzy +msgid "help_filter" +msgstr "Filter" + +#, fuzzy +msgid "help_help_file" +msgstr "Help Package File" + +#, fuzzy +msgid "help_help_only" +msgstr "Workflow Help Only" + +#, fuzzy +msgid "help_imported_on" +msgstr "Imported on" + +#, fuzzy +msgid "help_module_uploaded" +msgstr "Help package uploaded." + +#, fuzzy +msgid "help_modules" +msgstr "Help Packages" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +#, fuzzy +msgid "help_open_online_help" +msgstr "Open Online Help" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +#, fuzzy +msgid "help_set_mode" +msgstr "Set Mode" + +#, fuzzy +msgid "help_sure_delete_help_modules" +msgstr "Are you sure that these packages should be deleted?" + +#, fuzzy +msgid "help_toggle_tooltips" +msgstr "Toggle Help Tooltips" + +#, fuzzy +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +#, fuzzy +msgid "help_tooltip_id" +msgstr "Tooltip ID" + +#, fuzzy +msgid "help_tooltips" +msgstr "Help Tooltips" + +#, fuzzy +msgid "help_tooltips_and_help" +msgstr "Tooltips and Workflow Help" + +#, fuzzy +msgid "help_tooltips_only" +msgstr "Tooltips Only" + +#, fuzzy +msgid "help_topcis" +msgstr "Topics" + +#, fuzzy +msgid "help_tt_text" +msgstr "Text" diff --git a/components/ILIAS/Help/lang/help_zh.po b/components/ILIAS/Help/lang/help_zh.po new file mode 100644 index 000000000000..47551fe45ced --- /dev/null +++ b/components/ILIAS/Help/lang/help_zh.po @@ -0,0 +1,312 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: help\n" + +#, fuzzy +msgid "gdtr_active" +msgstr "Active" + +#, fuzzy +msgid "gdtr_add_step" +msgstr "Add Step" + +#, fuzzy +msgid "gdtr_add_tour" +msgstr "Add Tour" + +#, fuzzy +msgid "gdtr_close" +msgstr "End Tour" + +#, fuzzy +msgid "gdtr_delete_step" +msgstr "Delete Step" + +#, fuzzy +msgid "gdtr_delete_step_mess" +msgstr "Are you sure you want to delete this step?" + +#, fuzzy +msgid "gdtr_delete_tour" +msgstr "Delete Tour" + +#, fuzzy +msgid "gdtr_delete_tour_mess" +msgstr "Are you sure you want to delete this tour?" + +#, fuzzy +msgid "gdtr_deleted_step" +msgstr "Step has been deleted." + +#, fuzzy +msgid "gdtr_deleted_tour" +msgstr "Tour has been deleted." + +#, fuzzy +msgid "gdtr_edit_content" +msgstr "Edit Content" + +#, fuzzy +msgid "gdtr_edit_page_info" +msgstr "Edit the content that should be presented to explain the selected UI element." + +#, fuzzy +msgid "gdtr_edit_properties" +msgstr "Edit Properties" + +#, fuzzy +msgid "gdtr_edit_step_info" +msgstr "On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element." + +#, fuzzy +msgid "gdtr_edit_steps" +msgstr "Edit Steps" + +#, fuzzy +msgid "gdtr_element_id" +msgstr "Element ID" + +#, fuzzy +msgid "gdtr_form" +msgstr "Form" + +#, fuzzy +msgid "gdtr_form_info" +msgstr "The first form of the main content area. Usually views should only contain one form." + +#, fuzzy +msgid "gdtr_guided_tours" +msgstr "Guided Tours" + +#, fuzzy +msgid "gdtr_id_pres_users" +msgstr "Show IDs for User Accounts" + +#, fuzzy +msgid "gdtr_id_pres_users_info" +msgstr "Login names of user that should get element IDs presented. Separate multiple entries by comma." + +#, fuzzy +msgid "gdtr_id_settings" +msgstr "ID Settings" + +#, fuzzy +msgid "gdtr_import_tour" +msgstr "Import Tour" + +#, fuzzy +msgid "gdtr_language" +msgstr "Language" + +#, fuzzy +msgid "gdtr_language_info" +msgstr "Activates a guided tour only for users with the selected language." + +#, fuzzy +msgid "gdtr_list_tours_mess" +msgstr "To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name." + +#, fuzzy +msgid "gdtr_mainbar" +msgstr "Mainbar" + +#, fuzzy +msgid "gdtr_mainbar_ID_info" +msgstr "ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_mainbar_info" +msgstr "The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_metabar" +msgstr "Metabar" + +#, fuzzy +msgid "gdtr_metabar_ID_info" +msgstr "ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_metabar_info" +msgstr "The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_next_step" +msgstr "Next Step" + +#, fuzzy +msgid "gdtr_permission" +msgstr "Permission" + +#, fuzzy +msgid "gdtr_permission_info" +msgstr "Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with \"edit settings\" permission for a course. If you \"Create\" is selected, the tour is active, if the user has any creation permission." + +#, fuzzy +msgid "gdtr_presentation_limitation" +msgstr "Presentation Limitation" + +#, fuzzy +msgid "gdtr_primary_button" +msgstr "Primary Button" + +#, fuzzy +msgid "gdtr_primary_button_info" +msgstr "The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button." + +#, fuzzy +msgid "gdtr_reset_tour" +msgstr "Reset Tour" + +#, fuzzy +msgid "gdtr_reset_tour_mess" +msgstr "If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?" + +#, fuzzy +msgid "gdtr_screen_ids" +msgstr "Screen IDs" + +#, fuzzy +msgid "gdtr_screen_ids_info" +msgstr "Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma." + +#, fuzzy +msgid "gdtr_step" +msgstr "Step" + +#, fuzzy +msgid "gdtr_step_type" +msgstr "User Interface Element" + +#, fuzzy +msgid "gdtr_table" +msgstr "Table" + +#, fuzzy +msgid "gdtr_table_info" +msgstr "The first table of the main content area. Usually views should only contain one table." + +#, fuzzy +msgid "gdtr_tabs" +msgstr "Tabs" + +#, fuzzy +msgid "gdtr_tabs_ID_info" +msgstr "ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip." + +#, fuzzy +msgid "gdtr_tabs_info" +msgstr "The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items." + +#, fuzzy +msgid "gdtr_toolbar" +msgstr "Toolbar" + +#, fuzzy +msgid "gdtr_toolbar_info" +msgstr "The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar." + +#, fuzzy +msgid "gdtr_tour_has_been_reset" +msgstr "Tour has been reset." + +#, fuzzy +msgid "gdtr_tour_settings" +msgstr "Edit Settings" + +#, fuzzy +msgid "gdtr_tour_steps" +msgstr "Tour Steps" + +#, fuzzy +msgid "gdtr_tours" +msgstr "Tours" + +#, fuzzy +msgid "gdtr_type" +msgstr "Type" + +#, fuzzy +msgid "guided_tour" +msgstr "Guided Tour" + +msgid "help_all" +msgstr "所有" + +msgid "help_component" +msgstr "组件" + +msgid "help_filter" +msgstr "过滤器" + +msgid "help_help_file" +msgstr "帮助包文件" + +msgid "help_help_only" +msgstr "仅工作流帮助" + +msgid "help_imported_on" +msgstr "已导入在" + +msgid "help_module_uploaded" +msgstr "帮助包已上传。" + +msgid "help_modules" +msgstr "帮助包" + +#, fuzzy +msgid "help_no_content" +msgstr "There is no help content available for the current screen. You may use the search tool." + +msgid "help_open_online_help" +msgstr "打开在线帮助" + +#, fuzzy +msgid "help_order" +msgstr "Order" + +#, fuzzy +msgid "help_search_label" +msgstr "Search Help" + +#, fuzzy +msgid "help_select_a_file" +msgstr "Please select a file." + +msgid "help_set_mode" +msgstr "设置模式" + +msgid "help_sure_delete_help_modules" +msgstr "您确定这些包应该被删除?" + +msgid "help_toggle_tooltips" +msgstr "切换帮助提示" + +#, fuzzy +msgid "help_toggle_tooltips_info" +msgstr "Show Help Tooltips for menues and tabs." + +msgid "help_tooltip_id" +msgstr "提示ID" + +msgid "help_tooltips" +msgstr "帮助提示" + +msgid "help_tooltips_and_help" +msgstr "工具提示和工作流帮助" + +msgid "help_tooltips_only" +msgstr "仅工具提示" + +#, fuzzy +msgid "help_topcis" +msgstr "Topics" + +msgid "help_tt_text" +msgstr "文本" diff --git a/components/ILIAS/Init/Init.php b/components/ILIAS/Init/Init.php index a33d7222552d..4ccac1b07b99 100644 --- a/components/ILIAS/Init/Init.php +++ b/components/ILIAS/Init/Init.php @@ -40,6 +40,8 @@ use ILIAS\Logging; use ILIAS\AccessControl\PublicInterface\Access; use ILIAS\AccessControl\PublicInterface\RBAC; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; class Init implements Component\Component { @@ -173,7 +175,27 @@ public function init( $use[Logging\Logger\LoggerFactoryInterface::class], $use[Logging\Logger\DefaultConfigLoggerFactoryInterface::class], $use[Logging\Config\ConfigInterface::class], - $use[\ILIAS\LTI\View::class] + $use[\ILIAS\LTI\View::class], + $pull[\ILIAS\Language\ComponentTranslation\LanguageFileDirectoryManager::class], + $pull[\ILIAS\Language\Activities\InstallLanguage::class], + $pull[\ILIAS\Language\Activities\UpdateLanguage::class], + $pull[\ILIAS\Language\Activities\UninstallLanguage::class], + $pull[\ILIAS\Language\Activities\RemoveLocalLanguageChanges::class], + $pull[\ILIAS\Language\Activities\AddLanguageEntry::class], + $pull[\ILIAS\Language\Activities\SetLanguageDetectionEnabled::class], + $pull[\ILIAS\Language\Activities\SetLanguageTranslationEnabled::class], ); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'init' + ); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'error' + ); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'pwassist' + ); } } diff --git a/components/ILIAS/Init/lang/error.pot b/components/ILIAS/Init/lang/error.pot new file mode 100644 index 000000000000..d26bca829ebf --- /dev/null +++ b/components/ILIAS/Init/lang/error.pot @@ -0,0 +1,18 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: error\n" + +msgid "error_back_to_repository" +msgstr "" + +msgid "error_sry_error" +msgstr "" + +msgid "http_404_not_found" +msgstr "" + +msgid "http_500_internal_server_error" +msgstr "" diff --git a/components/ILIAS/Init/lang/error_ar.po b/components/ILIAS/Init/lang/error_ar.po new file mode 100644 index 000000000000..42d6a3434755 --- /dev/null +++ b/components/ILIAS/Init/lang/error_ar.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: error\n" + +#, fuzzy +msgid "error_back_to_repository" +msgstr "Back to Repository" + +#, fuzzy +msgid "error_sry_error" +msgstr "Sorry, an error occured." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_bg.po b/components/ILIAS/Init/lang/error_bg.po new file mode 100644 index 000000000000..204cae81ad5c --- /dev/null +++ b/components/ILIAS/Init/lang/error_bg.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: error\n" + +#, fuzzy +msgid "error_back_to_repository" +msgstr "Back to Repository" + +#, fuzzy +msgid "error_sry_error" +msgstr "Sorry, an error occured." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_cs.po b/components/ILIAS/Init/lang/error_cs.po new file mode 100644 index 000000000000..5f99cc1ee0e5 --- /dev/null +++ b/components/ILIAS/Init/lang/error_cs.po @@ -0,0 +1,23 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: error\n" + +msgid "error_back_to_repository" +msgstr "Zpět na úložiště" + +msgid "error_sry_error" +msgstr "Je nám líto, ale došlo k chybě." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_da.po b/components/ILIAS/Init/lang/error_da.po new file mode 100644 index 000000000000..43ed44c2a9c2 --- /dev/null +++ b/components/ILIAS/Init/lang/error_da.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: error\n" + +#, fuzzy +msgid "error_back_to_repository" +msgstr "Back to Repository" + +#, fuzzy +msgid "error_sry_error" +msgstr "Sorry, an error occured." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_de.po b/components/ILIAS/Init/lang/error_de.po new file mode 100644 index 000000000000..b95c3db266d1 --- /dev/null +++ b/components/ILIAS/Init/lang/error_de.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: error\n" + +msgid "error_back_to_repository" +msgstr "Zurück zum Magazin" + +msgid "error_sry_error" +msgstr "Es ist leider ein Fehler aufgetreten." + +msgid "http_404_not_found" +msgstr "Die angeforderte Seite wurde nicht gefunden." + +msgid "http_500_internal_server_error" +msgstr "Es ist ein interner Serverfehler aufgetreten." diff --git a/components/ILIAS/Init/lang/error_el.po b/components/ILIAS/Init/lang/error_el.po new file mode 100644 index 000000000000..9c5f9976b25e --- /dev/null +++ b/components/ILIAS/Init/lang/error_el.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: error\n" + +#, fuzzy +msgid "error_back_to_repository" +msgstr "Back to Repository" + +#, fuzzy +msgid "error_sry_error" +msgstr "Sorry, an error occured." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_en.po b/components/ILIAS/Init/lang/error_en.po new file mode 100644 index 000000000000..5e9a112e2f50 --- /dev/null +++ b/components/ILIAS/Init/lang/error_en.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: error\n" + +msgid "error_back_to_repository" +msgstr "Back to Repository" + +msgid "error_sry_error" +msgstr "Sorry, an error occurred." + +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_es.po b/components/ILIAS/Init/lang/error_es.po new file mode 100644 index 000000000000..53fadd01df65 --- /dev/null +++ b/components/ILIAS/Init/lang/error_es.po @@ -0,0 +1,23 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: error\n" + +msgid "error_back_to_repository" +msgstr "Volver al Repositorio" + +msgid "error_sry_error" +msgstr "Lo sentimos, se ha producido un error." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_et.po b/components/ILIAS/Init/lang/error_et.po new file mode 100644 index 000000000000..c0682f5fa47c --- /dev/null +++ b/components/ILIAS/Init/lang/error_et.po @@ -0,0 +1,23 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: error\n" + +msgid "error_back_to_repository" +msgstr "Back to Repository" + +msgid "error_sry_error" +msgstr "Sorry, an error occured." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_fa.po b/components/ILIAS/Init/lang/error_fa.po new file mode 100644 index 000000000000..c4937befc601 --- /dev/null +++ b/components/ILIAS/Init/lang/error_fa.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: error\n" + +#, fuzzy +msgid "error_back_to_repository" +msgstr "Back to Repository" + +#, fuzzy +msgid "error_sry_error" +msgstr "Sorry, an error occured." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_fr.po b/components/ILIAS/Init/lang/error_fr.po new file mode 100644 index 000000000000..29ccaf276e7a --- /dev/null +++ b/components/ILIAS/Init/lang/error_fr.po @@ -0,0 +1,23 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: error\n" + +msgid "error_back_to_repository" +msgstr "Retour au Catalogue" + +msgid "error_sry_error" +msgstr "Désolé, une erreur s'est produite." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_hr.po b/components/ILIAS/Init/lang/error_hr.po new file mode 100644 index 000000000000..c8e1e3ab3045 --- /dev/null +++ b/components/ILIAS/Init/lang/error_hr.po @@ -0,0 +1,23 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: error\n" + +msgid "error_back_to_repository" +msgstr "Back to Repository" + +msgid "error_sry_error" +msgstr "Sorry, an error occurred." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_hu.po b/components/ILIAS/Init/lang/error_hu.po new file mode 100644 index 000000000000..5e49f087b13e --- /dev/null +++ b/components/ILIAS/Init/lang/error_hu.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: error\n" + +msgid "error_back_to_repository" +msgstr "Vissza a Tartalomtárba" + +msgid "error_sry_error" +msgstr "Sajnáljuk, hiba történt." + +msgid "http_404_not_found" +msgstr "A kért oldal nem található." + +msgid "http_500_internal_server_error" +msgstr "Belső szerverhiba történt." diff --git a/components/ILIAS/Init/lang/error_it.po b/components/ILIAS/Init/lang/error_it.po new file mode 100644 index 000000000000..50cf2353e5ff --- /dev/null +++ b/components/ILIAS/Init/lang/error_it.po @@ -0,0 +1,23 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: error\n" + +msgid "error_back_to_repository" +msgstr "Torna all'archivio" + +msgid "error_sry_error" +msgstr "Ci scusiamo, si é verificato un errore." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_ja.po b/components/ILIAS/Init/lang/error_ja.po new file mode 100644 index 000000000000..e83111db3973 --- /dev/null +++ b/components/ILIAS/Init/lang/error_ja.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: error\n" + +msgid "error_back_to_repository" +msgstr "リポジトリへ戻る" + +msgid "error_sry_error" +msgstr "エラーが発生しました。" + +msgid "http_404_not_found" +msgstr "リクエストされたページは見つかりませんでした。" + +msgid "http_500_internal_server_error" +msgstr "内部サーバーエラーが発生しました。" diff --git a/components/ILIAS/Init/lang/error_ka.po b/components/ILIAS/Init/lang/error_ka.po new file mode 100644 index 000000000000..7ee52145524d --- /dev/null +++ b/components/ILIAS/Init/lang/error_ka.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: error\n" + +#, fuzzy +msgid "error_back_to_repository" +msgstr "Back to Repository" + +#, fuzzy +msgid "error_sry_error" +msgstr "Sorry, an error occured." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_lt.po b/components/ILIAS/Init/lang/error_lt.po new file mode 100644 index 000000000000..1e6e7f852443 --- /dev/null +++ b/components/ILIAS/Init/lang/error_lt.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: error\n" + +#, fuzzy +msgid "error_back_to_repository" +msgstr "Back to Repository" + +#, fuzzy +msgid "error_sry_error" +msgstr "Sorry, an error occured." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_nl.po b/components/ILIAS/Init/lang/error_nl.po new file mode 100644 index 000000000000..dabf40fa58fb --- /dev/null +++ b/components/ILIAS/Init/lang/error_nl.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: error\n" + +#, fuzzy +msgid "error_back_to_repository" +msgstr "Back to Repository" + +#, fuzzy +msgid "error_sry_error" +msgstr "Sorry, an error occurred." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_pl.po b/components/ILIAS/Init/lang/error_pl.po new file mode 100644 index 000000000000..4c0f08201ebd --- /dev/null +++ b/components/ILIAS/Init/lang/error_pl.po @@ -0,0 +1,23 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: error\n" + +msgid "error_back_to_repository" +msgstr "Wróć do dostępnych zasobów" + +msgid "error_sry_error" +msgstr "Niestety pojawił się błąd." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_pt.po b/components/ILIAS/Init/lang/error_pt.po new file mode 100644 index 000000000000..03ac2484903c --- /dev/null +++ b/components/ILIAS/Init/lang/error_pt.po @@ -0,0 +1,23 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: error\n" + +msgid "error_back_to_repository" +msgstr "Voltar ao repositório" + +msgid "error_sry_error" +msgstr "Seleção impossível por não ter sido introduzido nenhum endereço de e-mail" + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_ro.po b/components/ILIAS/Init/lang/error_ro.po new file mode 100644 index 000000000000..faf97e6008a5 --- /dev/null +++ b/components/ILIAS/Init/lang/error_ro.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: error\n" + +#, fuzzy +msgid "error_back_to_repository" +msgstr "Back to Repository" + +#, fuzzy +msgid "error_sry_error" +msgstr "Sorry, an error occured." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_ru.po b/components/ILIAS/Init/lang/error_ru.po new file mode 100644 index 000000000000..f07293f8b63f --- /dev/null +++ b/components/ILIAS/Init/lang/error_ru.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: error\n" + +#, fuzzy +msgid "error_back_to_repository" +msgstr "Back to Repository" + +#, fuzzy +msgid "error_sry_error" +msgstr "Sorry, an error occured." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_sk.po b/components/ILIAS/Init/lang/error_sk.po new file mode 100644 index 000000000000..e8775ccfa440 --- /dev/null +++ b/components/ILIAS/Init/lang/error_sk.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: error\n" + +#, fuzzy +msgid "error_back_to_repository" +msgstr "Back to Repository" + +#, fuzzy +msgid "error_sry_error" +msgstr "Sorry, an error occured." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_sl.po b/components/ILIAS/Init/lang/error_sl.po new file mode 100644 index 000000000000..0cbd70895f8e --- /dev/null +++ b/components/ILIAS/Init/lang/error_sl.po @@ -0,0 +1,23 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: error\n" + +msgid "error_back_to_repository" +msgstr "Back to Repository" + +msgid "error_sry_error" +msgstr "Sorry, an error occurred." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_sq.po b/components/ILIAS/Init/lang/error_sq.po new file mode 100644 index 000000000000..ee665ab5fe86 --- /dev/null +++ b/components/ILIAS/Init/lang/error_sq.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: error\n" + +#, fuzzy +msgid "error_back_to_repository" +msgstr "Back to Repository" + +#, fuzzy +msgid "error_sry_error" +msgstr "Sorry, an error occured." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_sr.po b/components/ILIAS/Init/lang/error_sr.po new file mode 100644 index 000000000000..6113e418e024 --- /dev/null +++ b/components/ILIAS/Init/lang/error_sr.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: error\n" + +#, fuzzy +msgid "error_back_to_repository" +msgstr "Back to Repository" + +#, fuzzy +msgid "error_sry_error" +msgstr "Sorry, an error occured." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_sv.po b/components/ILIAS/Init/lang/error_sv.po new file mode 100644 index 000000000000..02c5d9bc5fe0 --- /dev/null +++ b/components/ILIAS/Init/lang/error_sv.po @@ -0,0 +1,23 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: error\n" + +msgid "error_back_to_repository" +msgstr "Tillbaka till tidningen" + +msgid "error_sry_error" +msgstr "Ett fel har tyvärr uppstått." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_tr.po b/components/ILIAS/Init/lang/error_tr.po new file mode 100644 index 000000000000..4591ddbc41a9 --- /dev/null +++ b/components/ILIAS/Init/lang/error_tr.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: error\n" + +#, fuzzy +msgid "error_back_to_repository" +msgstr "Back to Repository" + +#, fuzzy +msgid "error_sry_error" +msgstr "Sorry, an error occured." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_uk.po b/components/ILIAS/Init/lang/error_uk.po new file mode 100644 index 000000000000..a1306b836ca0 --- /dev/null +++ b/components/ILIAS/Init/lang/error_uk.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: error\n" + +#, fuzzy +msgid "error_back_to_repository" +msgstr "Back to Repository" + +#, fuzzy +msgid "error_sry_error" +msgstr "Sorry, an error occured." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_vi.po b/components/ILIAS/Init/lang/error_vi.po new file mode 100644 index 000000000000..8d42e81c7768 --- /dev/null +++ b/components/ILIAS/Init/lang/error_vi.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: error\n" + +#, fuzzy +msgid "error_back_to_repository" +msgstr "Back to Repository" + +#, fuzzy +msgid "error_sry_error" +msgstr "Sorry, an error occured." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/error_zh.po b/components/ILIAS/Init/lang/error_zh.po new file mode 100644 index 000000000000..292a47a8b783 --- /dev/null +++ b/components/ILIAS/Init/lang/error_zh.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: error\n" + +#, fuzzy +msgid "error_back_to_repository" +msgstr "Back to Repository" + +#, fuzzy +msgid "error_sry_error" +msgstr "Sorry, an error occured." + +#, fuzzy +msgid "http_404_not_found" +msgstr "The requested page could not be found." + +#, fuzzy +msgid "http_500_internal_server_error" +msgstr "An internal server error occurred." diff --git a/components/ILIAS/Init/lang/init.pot b/components/ILIAS/Init/lang/init.pot new file mode 100644 index 000000000000..5fbbbc040311 --- /dev/null +++ b/components/ILIAS/Init/lang/init.pot @@ -0,0 +1,18 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: init\n" + +msgid "init_error_authentication_fail" +msgstr "" + +msgid "init_error_maintenance" +msgstr "" + +msgid "init_error_redirect_click" +msgstr "" + +msgid "init_error_redirect_info" +msgstr "" diff --git a/components/ILIAS/Init/lang/init_ar.po b/components/ILIAS/Init/lang/init_ar.po new file mode 100644 index 000000000000..0a5be1e0713d --- /dev/null +++ b/components/ILIAS/Init/lang/init_ar.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: init\n" + +#, fuzzy +msgid "init_error_authentication_fail" +msgstr "Authentication failed." + +#, fuzzy +msgid "init_error_maintenance" +msgstr "The server is not available due to maintenance. We apologise for any inconvenience." + +#, fuzzy +msgid "init_error_redirect_click" +msgstr "Please click to continue." + +#, fuzzy +msgid "init_error_redirect_info" +msgstr "Redirect not supported by context." diff --git a/components/ILIAS/Init/lang/init_bg.po b/components/ILIAS/Init/lang/init_bg.po new file mode 100644 index 000000000000..66a753bfd311 --- /dev/null +++ b/components/ILIAS/Init/lang/init_bg.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: init\n" + +#, fuzzy +msgid "init_error_authentication_fail" +msgstr "Authentication failed." + +#, fuzzy +msgid "init_error_maintenance" +msgstr "The server is not available due to maintenance. We apologise for any inconvenience." + +#, fuzzy +msgid "init_error_redirect_click" +msgstr "Please click to continue." + +#, fuzzy +msgid "init_error_redirect_info" +msgstr "Redirect not supported by context." diff --git a/components/ILIAS/Init/lang/init_cs.po b/components/ILIAS/Init/lang/init_cs.po new file mode 100644 index 000000000000..f633aa721477 --- /dev/null +++ b/components/ILIAS/Init/lang/init_cs.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: init\n" + +msgid "init_error_authentication_fail" +msgstr "Ověření se nezdařilo." + +msgid "init_error_maintenance" +msgstr "Server není k dispozici z důvodu údržby. Omlouváme se za případné nepříjemnosti." + +msgid "init_error_redirect_click" +msgstr "Klikněte na tlačítko pokračovat." + +msgid "init_error_redirect_info" +msgstr "Přesměrování není podporováno kontextem." diff --git a/components/ILIAS/Init/lang/init_da.po b/components/ILIAS/Init/lang/init_da.po new file mode 100644 index 000000000000..64fcb28ef075 --- /dev/null +++ b/components/ILIAS/Init/lang/init_da.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: init\n" + +#, fuzzy +msgid "init_error_authentication_fail" +msgstr "Authentication failed." + +#, fuzzy +msgid "init_error_maintenance" +msgstr "The server is not available due to maintenance. We apologise for any inconvenience." + +#, fuzzy +msgid "init_error_redirect_click" +msgstr "Please click to continue." + +#, fuzzy +msgid "init_error_redirect_info" +msgstr "Redirect not supported by context." diff --git a/components/ILIAS/Init/lang/init_de.po b/components/ILIAS/Init/lang/init_de.po new file mode 100644 index 000000000000..b50a2dce22aa --- /dev/null +++ b/components/ILIAS/Init/lang/init_de.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: init\n" + +msgid "init_error_authentication_fail" +msgstr "Authentifizierung fehlgeschlagen." + +msgid "init_error_maintenance" +msgstr "Der Server ist aufgrund von Wartungsarbeiten aktuell nicht verfügbar. Wir bitten um Verständnis. Versuchen Sie es später noch einmal." + +msgid "init_error_redirect_click" +msgstr "Bitte klicken um fortzufahren." + +msgid "init_error_redirect_info" +msgstr "Weiterleitungen werden durch Kontext nicht unterstützt." diff --git a/components/ILIAS/Init/lang/init_el.po b/components/ILIAS/Init/lang/init_el.po new file mode 100644 index 000000000000..2e50c5c30770 --- /dev/null +++ b/components/ILIAS/Init/lang/init_el.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: init\n" + +#, fuzzy +msgid "init_error_authentication_fail" +msgstr "Authentication failed." + +#, fuzzy +msgid "init_error_maintenance" +msgstr "The server is not available due to maintenance. We apologise for any inconvenience." + +#, fuzzy +msgid "init_error_redirect_click" +msgstr "Please click to continue." + +#, fuzzy +msgid "init_error_redirect_info" +msgstr "Redirect not supported by context." diff --git a/components/ILIAS/Init/lang/init_en.po b/components/ILIAS/Init/lang/init_en.po new file mode 100644 index 000000000000..1d900653142d --- /dev/null +++ b/components/ILIAS/Init/lang/init_en.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: init\n" + +msgid "init_error_authentication_fail" +msgstr "Authentication failed." + +msgid "init_error_maintenance" +msgstr "The server is not available due to maintenance. We apologise for any inconvenience." + +msgid "init_error_redirect_click" +msgstr "Please click to continue." + +msgid "init_error_redirect_info" +msgstr "Redirect not supported by context." diff --git a/components/ILIAS/Init/lang/init_es.po b/components/ILIAS/Init/lang/init_es.po new file mode 100644 index 000000000000..c221a0148f8e --- /dev/null +++ b/components/ILIAS/Init/lang/init_es.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: init\n" + +msgid "init_error_authentication_fail" +msgstr "Fallo en la autenticación." + +msgid "init_error_maintenance" +msgstr "El servidor no está disponible debido a mantenimiento. Disculpe las molestias." + +msgid "init_error_redirect_click" +msgstr "Haga clic para continuar." + +msgid "init_error_redirect_info" +msgstr "Redirección no admitida por el contexto." diff --git a/components/ILIAS/Init/lang/init_et.po b/components/ILIAS/Init/lang/init_et.po new file mode 100644 index 000000000000..16355097830a --- /dev/null +++ b/components/ILIAS/Init/lang/init_et.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: init\n" + +msgid "init_error_authentication_fail" +msgstr "Authentication failed." + +msgid "init_error_maintenance" +msgstr "The server is not available due to maintenance. We apologise for any inconvenience." + +msgid "init_error_redirect_click" +msgstr "Please click to continue." + +msgid "init_error_redirect_info" +msgstr "Redirect not supported by context." diff --git a/components/ILIAS/Init/lang/init_fa.po b/components/ILIAS/Init/lang/init_fa.po new file mode 100644 index 000000000000..1ec61e9e9d15 --- /dev/null +++ b/components/ILIAS/Init/lang/init_fa.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: init\n" + +#, fuzzy +msgid "init_error_authentication_fail" +msgstr "Authentication failed." + +#, fuzzy +msgid "init_error_maintenance" +msgstr "The server is not available due to maintenance. We apologise for any inconvenience." + +#, fuzzy +msgid "init_error_redirect_click" +msgstr "Please click to continue." + +#, fuzzy +msgid "init_error_redirect_info" +msgstr "Redirect not supported by context." diff --git a/components/ILIAS/Init/lang/init_fr.po b/components/ILIAS/Init/lang/init_fr.po new file mode 100644 index 000000000000..a8518d5b6b96 --- /dev/null +++ b/components/ILIAS/Init/lang/init_fr.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: init\n" + +msgid "init_error_authentication_fail" +msgstr "Mauvaise authentification" + +msgid "init_error_maintenance" +msgstr "Le serveur est indisponible pour cause de maintenance. Veuillez nous excuser." + +msgid "init_error_redirect_click" +msgstr "Cliquer pour continuer" + +msgid "init_error_redirect_info" +msgstr "Redirection on supportée dans ce contexte" diff --git a/components/ILIAS/Init/lang/init_hr.po b/components/ILIAS/Init/lang/init_hr.po new file mode 100644 index 000000000000..eb5ed30cd26e --- /dev/null +++ b/components/ILIAS/Init/lang/init_hr.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: init\n" + +msgid "init_error_authentication_fail" +msgstr "Provjera autentičnosti nije uspjela." + +msgid "init_error_maintenance" +msgstr "Server nije dostupan zbog održavanja. Ispričavamo se zbog neugodnosti." + +msgid "init_error_redirect_click" +msgstr "Kliknite za nastavak." + +msgid "init_error_redirect_info" +msgstr "Preusmjeravanje nije podržano kontekstom." diff --git a/components/ILIAS/Init/lang/init_hu.po b/components/ILIAS/Init/lang/init_hu.po new file mode 100644 index 000000000000..96c34484c080 --- /dev/null +++ b/components/ILIAS/Init/lang/init_hu.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: init\n" + +msgid "init_error_authentication_fail" +msgstr "Hitelesítés sikertelen." + +msgid "init_error_maintenance" +msgstr "A szerver karbantartás miatt nem elérhető. Elnézést az esetleges kellemetlenségért." + +msgid "init_error_redirect_click" +msgstr "Kattintson a folytatáshoz." + +msgid "init_error_redirect_info" +msgstr "Az átirányítás nem támogatott." diff --git a/components/ILIAS/Init/lang/init_it.po b/components/ILIAS/Init/lang/init_it.po new file mode 100644 index 000000000000..315e6abdf8f9 --- /dev/null +++ b/components/ILIAS/Init/lang/init_it.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: init\n" + +msgid "init_error_authentication_fail" +msgstr "Autenticazione fallita." + +msgid "init_error_maintenance" +msgstr "Il server non è disponibile a causa di manutenzione. Ci scusiamo per l’inconveniente." + +msgid "init_error_redirect_click" +msgstr "Si prega di cliccare per continuare." + +msgid "init_error_redirect_info" +msgstr "Reindirizzamento non supportato dal contesto." diff --git a/components/ILIAS/Init/lang/init_ja.po b/components/ILIAS/Init/lang/init_ja.po new file mode 100644 index 000000000000..043fde169f94 --- /dev/null +++ b/components/ILIAS/Init/lang/init_ja.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: init\n" + +msgid "init_error_authentication_fail" +msgstr "認証に失敗しました。" + +msgid "init_error_maintenance" +msgstr "メンテナンスのためサーバは利用できません。ご迷惑おかけして申し訳ありません。" + +msgid "init_error_redirect_click" +msgstr "継続するにはクリックしてください" + +msgid "init_error_redirect_info" +msgstr "コンテキストでのリダイレクトはサポートされていません。" diff --git a/components/ILIAS/Init/lang/init_ka.po b/components/ILIAS/Init/lang/init_ka.po new file mode 100644 index 000000000000..e5eb4feb0746 --- /dev/null +++ b/components/ILIAS/Init/lang/init_ka.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: init\n" + +#, fuzzy +msgid "init_error_authentication_fail" +msgstr "Authentication failed." + +#, fuzzy +msgid "init_error_maintenance" +msgstr "The server is not available due to maintenance. We apologise for any inconvenience." + +#, fuzzy +msgid "init_error_redirect_click" +msgstr "Please click to continue." + +#, fuzzy +msgid "init_error_redirect_info" +msgstr "Redirect not supported by context." diff --git a/components/ILIAS/Init/lang/init_lt.po b/components/ILIAS/Init/lang/init_lt.po new file mode 100644 index 000000000000..e8931359ef5f --- /dev/null +++ b/components/ILIAS/Init/lang/init_lt.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: init\n" + +#, fuzzy +msgid "init_error_authentication_fail" +msgstr "Authentication failed." + +#, fuzzy +msgid "init_error_maintenance" +msgstr "The server is not available due to maintenance. We apologise for any inconvenience." + +#, fuzzy +msgid "init_error_redirect_click" +msgstr "Please click to continue." + +#, fuzzy +msgid "init_error_redirect_info" +msgstr "Redirect not supported by context." diff --git a/components/ILIAS/Init/lang/init_nl.po b/components/ILIAS/Init/lang/init_nl.po new file mode 100644 index 000000000000..2752dc7a64d0 --- /dev/null +++ b/components/ILIAS/Init/lang/init_nl.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: init\n" + +msgid "init_error_authentication_fail" +msgstr "Authenticatie mislukt." + +msgid "init_error_maintenance" +msgstr "De server is niet beschikbaar vanwege onderhoud. Onze excuses voor het ongemak." + +msgid "init_error_redirect_click" +msgstr "Klik hier om door te gaan." + +msgid "init_error_redirect_info" +msgstr "Omleiding wordt niet ondersteund door context." diff --git a/components/ILIAS/Init/lang/init_pl.po b/components/ILIAS/Init/lang/init_pl.po new file mode 100644 index 000000000000..39e6d20c3305 --- /dev/null +++ b/components/ILIAS/Init/lang/init_pl.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: init\n" + +msgid "init_error_authentication_fail" +msgstr "Identyfikacja nie udała się." + +msgid "init_error_maintenance" +msgstr "Ze względu na prace konserwacyjne serwer jest niedostępny. Prosimy o wyrozumiałość." + +msgid "init_error_redirect_click" +msgstr "Kliknij, aby kontynuować." + +msgid "init_error_redirect_info" +msgstr "Przekierowania nie są obsługiwane przez kontekst." diff --git a/components/ILIAS/Init/lang/init_pt.po b/components/ILIAS/Init/lang/init_pt.po new file mode 100644 index 000000000000..5bdda204e4f0 --- /dev/null +++ b/components/ILIAS/Init/lang/init_pt.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: init\n" + +msgid "init_error_authentication_fail" +msgstr "Autenticação falhou." + +msgid "init_error_maintenance" +msgstr "O servidor não está disponível devido a manutenção. Pedimos desculpa pelo incómodo." + +msgid "init_error_redirect_click" +msgstr "Clique para continuar." + +msgid "init_error_redirect_info" +msgstr "Redirecionamento não suportado pelo contexto." diff --git a/components/ILIAS/Init/lang/init_ro.po b/components/ILIAS/Init/lang/init_ro.po new file mode 100644 index 000000000000..9f3e77d0bc80 --- /dev/null +++ b/components/ILIAS/Init/lang/init_ro.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: init\n" + +#, fuzzy +msgid "init_error_authentication_fail" +msgstr "Authentication failed." + +#, fuzzy +msgid "init_error_maintenance" +msgstr "The server is not available due to maintenance. We apologise for any inconvenience." + +#, fuzzy +msgid "init_error_redirect_click" +msgstr "Please click to continue." + +#, fuzzy +msgid "init_error_redirect_info" +msgstr "Redirect not supported by context." diff --git a/components/ILIAS/Init/lang/init_ru.po b/components/ILIAS/Init/lang/init_ru.po new file mode 100644 index 000000000000..a2e07fb5817e --- /dev/null +++ b/components/ILIAS/Init/lang/init_ru.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: init\n" + +msgid "init_error_authentication_fail" +msgstr "Authentication failed." + +msgid "init_error_maintenance" +msgstr "The server is not available due to maintenance. We apologise for any inconvenience." + +msgid "init_error_redirect_click" +msgstr "Please click to continue." + +msgid "init_error_redirect_info" +msgstr "Redirect not supported by context." diff --git a/components/ILIAS/Init/lang/init_sk.po b/components/ILIAS/Init/lang/init_sk.po new file mode 100644 index 000000000000..5dddd4221faa --- /dev/null +++ b/components/ILIAS/Init/lang/init_sk.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: init\n" + +#, fuzzy +msgid "init_error_authentication_fail" +msgstr "Authentication failed." + +#, fuzzy +msgid "init_error_maintenance" +msgstr "The server is not available due to maintenance. We apologise for any inconvenience." + +#, fuzzy +msgid "init_error_redirect_click" +msgstr "Please click to continue." + +#, fuzzy +msgid "init_error_redirect_info" +msgstr "Redirect not supported by context." diff --git a/components/ILIAS/Init/lang/init_sl.po b/components/ILIAS/Init/lang/init_sl.po new file mode 100644 index 000000000000..f924f5a7fcf2 --- /dev/null +++ b/components/ILIAS/Init/lang/init_sl.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: init\n" + +msgid "init_error_authentication_fail" +msgstr "Avtentikacija ni uspela." + +msgid "init_error_maintenance" +msgstr "Strežnik zaradi vzdrževalnih del trenutno ni na voljo. Prosimo za razumevanje. Poskusite ponovno pozneje." + +msgid "init_error_redirect_click" +msgstr "Kliknite za nadaljevanje." + +msgid "init_error_redirect_info" +msgstr "Posredovanje na podlagi konteksta ni podprto." diff --git a/components/ILIAS/Init/lang/init_sq.po b/components/ILIAS/Init/lang/init_sq.po new file mode 100644 index 000000000000..a4e9872c2173 --- /dev/null +++ b/components/ILIAS/Init/lang/init_sq.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: init\n" + +#, fuzzy +msgid "init_error_authentication_fail" +msgstr "Authentication failed." + +#, fuzzy +msgid "init_error_maintenance" +msgstr "The server is not available due to maintenance. We apologise for any inconvenience." + +#, fuzzy +msgid "init_error_redirect_click" +msgstr "Please click to continue." + +#, fuzzy +msgid "init_error_redirect_info" +msgstr "Redirect not supported by context." diff --git a/components/ILIAS/Init/lang/init_sr.po b/components/ILIAS/Init/lang/init_sr.po new file mode 100644 index 000000000000..894080c6b999 --- /dev/null +++ b/components/ILIAS/Init/lang/init_sr.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: init\n" + +#, fuzzy +msgid "init_error_authentication_fail" +msgstr "Authentication failed." + +#, fuzzy +msgid "init_error_maintenance" +msgstr "The server is not available due to maintenance. We apologise for any inconvenience." + +#, fuzzy +msgid "init_error_redirect_click" +msgstr "Please click to continue." + +#, fuzzy +msgid "init_error_redirect_info" +msgstr "Redirect not supported by context." diff --git a/components/ILIAS/Init/lang/init_sv.po b/components/ILIAS/Init/lang/init_sv.po new file mode 100644 index 000000000000..3912fb8d3f44 --- /dev/null +++ b/components/ILIAS/Init/lang/init_sv.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: init\n" + +msgid "init_error_authentication_fail" +msgstr "Autentisering misslyckades." + +msgid "init_error_maintenance" +msgstr "Servern är för närvarande inte tillgänglig på grund av underhållsarbete. Vi ber om din förståelse. Vänligen försök igen senare." + +msgid "init_error_redirect_click" +msgstr "Vänligen klicka för att fortsätta." + +msgid "init_error_redirect_info" +msgstr "Framåtblickar stöds inte av sammanhanget." diff --git a/components/ILIAS/Init/lang/init_tr.po b/components/ILIAS/Init/lang/init_tr.po new file mode 100644 index 000000000000..ad812146c918 --- /dev/null +++ b/components/ILIAS/Init/lang/init_tr.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: init\n" + +#, fuzzy +msgid "init_error_authentication_fail" +msgstr "Authentication failed." + +#, fuzzy +msgid "init_error_maintenance" +msgstr "The server is not available due to maintenance. We apologise for any inconvenience." + +#, fuzzy +msgid "init_error_redirect_click" +msgstr "Please click to continue." + +#, fuzzy +msgid "init_error_redirect_info" +msgstr "Redirect not supported by context." diff --git a/components/ILIAS/Init/lang/init_uk.po b/components/ILIAS/Init/lang/init_uk.po new file mode 100644 index 000000000000..be8f34198e7a --- /dev/null +++ b/components/ILIAS/Init/lang/init_uk.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: init\n" + +#, fuzzy +msgid "init_error_authentication_fail" +msgstr "Authentication failed." + +#, fuzzy +msgid "init_error_maintenance" +msgstr "The server is not available due to maintenance. We apologise for any inconvenience." + +#, fuzzy +msgid "init_error_redirect_click" +msgstr "Please click to continue." + +#, fuzzy +msgid "init_error_redirect_info" +msgstr "Redirect not supported by context." diff --git a/components/ILIAS/Init/lang/init_vi.po b/components/ILIAS/Init/lang/init_vi.po new file mode 100644 index 000000000000..be3d22ebd5d5 --- /dev/null +++ b/components/ILIAS/Init/lang/init_vi.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: init\n" + +#, fuzzy +msgid "init_error_authentication_fail" +msgstr "Authentication failed." + +#, fuzzy +msgid "init_error_maintenance" +msgstr "The server is not available due to maintenance. We apologise for any inconvenience." + +#, fuzzy +msgid "init_error_redirect_click" +msgstr "Please click to continue." + +#, fuzzy +msgid "init_error_redirect_info" +msgstr "Redirect not supported by context." diff --git a/components/ILIAS/Init/lang/init_zh.po b/components/ILIAS/Init/lang/init_zh.po new file mode 100644 index 000000000000..2e95862ef673 --- /dev/null +++ b/components/ILIAS/Init/lang/init_zh.po @@ -0,0 +1,25 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: init\n" + +#, fuzzy +msgid "init_error_authentication_fail" +msgstr "Authentication failed." + +#, fuzzy +msgid "init_error_maintenance" +msgstr "The server is not available due to maintenance. We apologise for any inconvenience." + +#, fuzzy +msgid "init_error_redirect_click" +msgstr "Please click to continue." + +#, fuzzy +msgid "init_error_redirect_info" +msgstr "Redirect not supported by context." diff --git a/components/ILIAS/Init/lang/pwassist.pot b/components/ILIAS/Init/lang/pwassist.pot new file mode 100644 index 000000000000..59dd5535d0cd --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist.pot @@ -0,0 +1,48 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "" + +msgid "pwassist_disabled_no_access" +msgstr "" + +msgid "pwassist_enter_email" +msgstr "" + +msgid "pwassist_enter_username_and_email" +msgstr "" + +msgid "pwassist_enter_username_and_new_password" +msgstr "" + +msgid "pwassist_login_not_match" +msgstr "" + +msgid "pwassist_mail_body" +msgstr "" + +msgid "pwassist_mail_sent" +msgstr "" + +msgid "pwassist_mail_sent_generic" +msgstr "" + +msgid "pwassist_mail_subject" +msgstr "" + +msgid "pwassist_password_assigned" +msgstr "" + +msgid "pwassist_session_expired" +msgstr "" + +msgid "pwassist_username_mail_body" +msgstr "" + +msgid "unassist_disabled_no_access" +msgstr "" diff --git a/components/ILIAS/Init/lang/pwassist_ar.po b/components/ILIAS/Init/lang/pwassist_ar.po new file mode 100644 index 000000000000..0befaa895d86 --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_ar.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "كلمة المرور المساعدة" + +#, fuzzy +msgid "pwassist_disabled_no_access" +msgstr "Password assistance is not enabled. Please contact the system administration for further assistance: %s" + +msgid "pwassist_enter_email" +msgstr "Please enter an e-mail address and submit the form.\\nILIAS will send an e-mail to that address. The e-mail contains all usernames which have registered this e-mail address.\\nChoose a suitable username and use the password service to retrieve a new password. If you do not retrieve any e-mail by this service please contact your course admin or %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Enter a user name and the associated e-mail address in the fields shown below.\\nILIAS will send a message to that e-mail address. The message contains an address for a web page, where you can enter a new password for the user account.\\nIn case you are unable to assign a password to your user account using this form, contact your course administration or send an e-mail to %1$s." + +msgid "pwassist_enter_username_and_new_password" +msgstr "Enter the user name and the new password in the fields below." + +msgid "pwassist_login_not_match" +msgstr "Please enter another user name.\\nThe user name you have entered does not match the user name for which you had asked for password assistance." + +msgid "pwassist_mail_body" +msgstr "Register a new password for your user account:\\n\\t%1$s\\n\\nThis message has been generated automatically by the ILIAS server\\n\\t%2$s\\n\\nYou (or someone at %3$s) has asked for password assistance for the user account \"%4$s\".\\n\\nPlease check carefully the conditions listed below, and proceed accordingly:\\n\\n- If you have used the password assistance form on the ILIAS server by accident:\\nDelete this mail.\\n\\n- If you are certain, that you never asked for password assistance at this ILIAS server:\\nPlease contact %5$s.\\n\\n- If you asked for password assistance, please proceed as follows:\\n\\n1. Open your browser.\\n\\n2. Enter the following address in your browser:\\n\\t%6$s\\n\\nImportant: The address is a single line. If you see this address split into multiple lines, then your e-mail program has inserted these line breaks.\\n\\n3. On the web page shown by your browser, enter a new password for your user account.\\n\\nPlease note, that for security reasons, you can perform the three steps above only exactly once and for a limited time only. Afterwards the address becomes invalid, and you have to use the password assistance page on the ILIAS server again." + +msgid "pwassist_mail_sent" +msgstr "A message has been sent to %1$s.\\nPlease check your mail box." + +#, fuzzy +msgid "pwassist_mail_sent_generic" +msgstr "A message has been sent to the email address defined in ILIAS.\\nPlease check your mail box." + +msgid "pwassist_mail_subject" +msgstr "ILIAS Password Assistance" + +msgid "pwassist_password_assigned" +msgstr "The password has been successfully assigned to user \"%1$s\"." + +msgid "pwassist_session_expired" +msgstr "Please fill in this form again.\\nYour password assistance session has expired. This may have happened, because you tried to use the link that has been sent by e-mail to you more than once, or because too much time has passed since the link has been sent to you." + +msgid "pwassist_username_mail_body" +msgstr "هذا هو اسم المستخدم النشط الذي تم ايجاده لعنوان البريد الالكتروني المعطى:\\n%s\\n\\n لقد تم انشاء هذه الرسالة اليا بواسطة خادم ILIAS التالي:\\n\\t%s\\n\\nانت (او أي شخص ب IP %s) قام بطلب مساعدة لاسماء المستخدمين لعنوان البريد الالكتروني ‘%s’.\\n\\nالرجاء فحص التالية والتصرف كما هو مقترح:\\n\\n-انت قمت بطلب هذا البريد الالكتروني عن طريق الصدفة:\\nاحذف هذا البريد الالكتروني.\\n\\n-هل انت متأكد من انك لم تطلب هذا البريد الالكتروني:\\nالرجاء الاتصال ب %s.\\n\\n-اذا قمت بطلب هذا البريد الالكتروني، الرجاء ابدأ بالتالي::\\n\\n1. ابدأ في متصفح الانترنت الخاص بك.\\n\\n2. ادخل url التالية:\\n\\t%s\\n\\nهام: العنوان عبارة عن سطر واحد. اذا رأيت العنوان قد توزع على عدة سطور، فلابد ان يكون برنامج البريد الالكتروني الخاص بك قام بإدراج فواصل السطور.\\n\\n3. يعرض متصفحك الان خدمة –كلمة المرور. استخدم هذه الصفحة جنبا الى جنب مع واحد من اسماء المستخدمين وعنوان البريد الالكتروني المحدد لتحديد كلمة مرور جديدة" + +#, fuzzy +msgid "unassist_disabled_no_access" +msgstr "Username assistance is not enabled. Please contact the system administration for further assistance: %s" diff --git a/components/ILIAS/Init/lang/pwassist_bg.po b/components/ILIAS/Init/lang/pwassist_bg.po new file mode 100644 index 000000000000..bbe38cfe04b5 --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_bg.po @@ -0,0 +1,56 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Помощ при забравена парола" + +#, fuzzy +msgid "pwassist_disabled_no_access" +msgstr "Password assistance is not enabled. Please contact the system administration for further assistance: %s" + +#, fuzzy +msgid "pwassist_enter_email" +msgstr "Please enter an email address and submit the form.\\nILIAS will send an email to that address. The email contains all usernames which have registered this email address.\\nChoose a suitable username and use the password service to retrieve a new password. If you do not retrieve any email by this service please contact your course admin or %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Въведете потребителско име и съответния email адрес в показаните по-долу полета.\\nILIAS ще изпрати съобщение на този email адрес. Съобщението съдържа адрес на уеб-страница, където можете да въведете нова парола за потребителския акаунт.\\nВ случай, че използвайки този формуляр, не можете да зададете нова парола за вашия потребителски акаунт, обърнете се към вашите курсови администратори или изпратете email на %1$s." + +msgid "pwassist_enter_username_and_new_password" +msgstr "Въведете потребителското име и новата парола в полетата по-долу." + +msgid "pwassist_login_not_match" +msgstr "Моля, въведете друго потребителско име.\\nВъведеното от вас потребителско име не съвпада с потребителското име, за което вие помолихте за помощ с паролата." + +msgid "pwassist_mail_body" +msgstr "Регистрирайте нова парола за вашия потребителски акаунт:\\n\\t%1$s\\n\\nТова съобщение е генерирано автоматично от ILIAS сървъра\\n\\t%2$s\\n\\nВие (или някой на %3$s) помолихте за помощ с паролата на потребителския акаунт \"%4$s\".\\n\\nМоля, проверете внимателно посочените по-долу условия и продължете съобразно:\\n\\n- Ако неволно сте използвали формуляра за помощ с паролата на ILIAS сървъра:\\nИзтрийте тази поща.\\n\\n- Ако сте сигурни, че никога не сте искали помощ с паролата на този ILIAS сървър:\\nМоля, свържете се с %5$s.\\n\\n- Ако сте помолили за помощ с паролата, моля, продължете както следва:\\n\\n1. Отворете вашия браузър.\\n\\n2. Въведете следния адрес във вашия браузър:\\n\\t%1$s\\n\\nВажно: Адресът е в един ред. Ако видите този адрес да се разделя в няколко реда, тогава вашата email програма е добавила тези прекъсвания на редовете.\\n\\n3. На показаната от вашия браузър уеб-страница въведете нова парола за вашия потребителски акаунт.\\n\\nМоля, забележете че по свързани със сигурността причини можете да извършвате горепосочените три стъпки точно само веднъж и само за ограничено време. След това адресът става невалиден и трябва отново да използвате страницата за помощ с паролата на ILIAS сървъра." + +msgid "pwassist_mail_sent" +msgstr "Съобщение беше изпратено до %1$s.\\nМоля, проверете своята пощенска кутия." + +#, fuzzy +msgid "pwassist_mail_sent_generic" +msgstr "A message has been sent to the email address defined in ILIAS.\\nPlease check your mail box." + +msgid "pwassist_mail_subject" +msgstr "ILIAS помощ за паролата" + +msgid "pwassist_password_assigned" +msgstr "Паролата беше успешно зададена за потребител \"%1$s\"." + +msgid "pwassist_session_expired" +msgstr "Моля, попълнете този формуляр отново.\\nСесията по помощта за вашата парола е изтекла. Това може да се е случило, защото сте се опитали да използвате изпратения на вашата поща линк повече от веднъж или защото е изминало твърде много време от изпращането на линка до вас." + +#, fuzzy +msgid "pwassist_username_mail_body" +msgstr "These are the active username found for the given email address:\\n%s\\n\\nThis message has been created automatically by the following ILIAS Server:\\n\\t%s\\n\\nYou (or somebody with IP %s) have requested support for forgotten usernames for the email address '%s'.\\n\\nPlease check the following and act as suggested::\\n\\n-You have requested this mail by accident:\\nDelete this email.\\n\\n-You are sure, that you never requested this email:\\nPlease contact %s.\\n\\n- If you requested this email, please proceed as follows::\\n\\n1. Start your internet browser.\\n\\n2. Enter the following url:\\n\\t%s\\n\\nImportant: The address is a single line. If you see this address split into multiple lines, then your email program has inserted these line breaks.\\n\\n3. Your Browser now shows the Password-Service. Use this page together with one of the usernames and the according email address to retrieve a new password." + +#, fuzzy +msgid "unassist_disabled_no_access" +msgstr "Username assistance is not enabled. Please contact the system administration for further assistance: %s" diff --git a/components/ILIAS/Init/lang/pwassist_cs.po b/components/ILIAS/Init/lang/pwassist_cs.po new file mode 100644 index 000000000000..f197c149a9e1 --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_cs.po @@ -0,0 +1,51 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Asistence hesla" + +msgid "pwassist_disabled_no_access" +msgstr "Pomoc s heslem není povolena. Pokud potřebujete další pomoc, obraťte se správce systému: %s" + +msgid "pwassist_enter_email" +msgstr "Vložte prosím e-mailovou adresu a formulář odešlete.\\nILIAS zašle e-mail na tuto adresu. Tento E-mail bude obsahovat všechna uživatelská jména, která jsou na tuto e-mailovou adresu registrována.\\nVyberte si příslušné jméno uživatele a použijte službu hesla k získání nového hesla. Pokud neobdržíte žádný e-mail od této služby, kontaktujte prosím Vašeho správce kurzu, nebo odešlete e-mail %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Vložte prosím jméno uživatele a asociovanou e-mailovou adresu v polích zobrazených níže.\\nILIAS zašle zprávu na tuto e-mailovou adresu. Tato zpráva obsahuje adresu webové stránky, kde můžete vložit nové heslo pro Váš uživatelský účet.\\nV případě, že nejste schopen(a) přiřadit heslo k Vašemu uživatelskému účtu s využitím tohoto formuláře, kontaktujte prosím Vašeho správce kurzu, nebo odešlete e-mail %1$s." + +msgid "pwassist_enter_username_and_new_password" +msgstr "Vložte jméno uživatele a nové heslo do polí níže." + +msgid "pwassist_login_not_match" +msgstr "Vložte prosím jiné uživatelské jméno.\\nUživatelské jméno, které jste vložili, neodpovídá uživatelskému jménu, na které jste byli dotazováni asistencí hesla." + +msgid "pwassist_mail_body" +msgstr "Zaregistrujte nové heslo pro Váš uživatelský účet:\\n\\t%1$s\\n\\nTato zpráva byla vygenerována automaticky serverem ILIAS\\n\\t%2$s\\n\\nVy (nebo někdo %3$s) požádal o pomoc asistenci hesla pro uživatelský účet \"%4$s\".\\n\\nZkontrolujte prosím pečlivě podmínky vypsané níže, a postupujte následovně:\\n\\n- Pokud jste využil(a) formulář asistence hesla na serveru ILIAS při závadě:\\nSmažte tento e-mail.\\n\\n- Pokud jste si jist(a), že jste nikdy o asistenci hesla nežádal(a) na serveru ILIAS:\\nKontaktujte prosím %5$s.\\n\\n- Pokud jste požádal(a) o asistenci hesla, postupujte prosím následovně:\\n\\n1. Spusťte svůj internetový prohlížeč.\\n\\n2. Vložte do Vašeho prohlížeče následující adresu:\\n t%1$s\\n\\nDůležité: Tato adresa je jednořádková. Pokud ji vidíte na více řádcích, pak zalomení řádků vložil váš e-mailový program.\\n\\n3. Na webové stránce zobrazené ve Vašem prohlížeči, vložte nové heslo pro Váš uživatelský účet.\\n\\nPamatujte prosím, že z bezpečnostních důvodů můžete tyto tři kroky provést pouze jednou a to v omezeném čase. Jinak tato adresa zůstane nedostupná, a Vy budete muset použít stránku asistenta hesla serveru ILIAS znovu." + +msgid "pwassist_mail_sent" +msgstr "Zpráva byla zaslána %1$s.\\nZkontrolujte prosím svou poštovní schránku." + +msgid "pwassist_mail_sent_generic" +msgstr "Zpráva byla odeslána na e-mailovou adresu definovanou v ILIAS.\\nPodívejte se laskavě do své poštovní schránky." + +msgid "pwassist_mail_subject" +msgstr "Asistence hesla ILIAS" + +msgid "pwassist_password_assigned" +msgstr "Heslo bylo úspěšně přiřazeno uživateli \"%1$s\"." + +msgid "pwassist_session_expired" +msgstr "Vyplňte prosím tento formulář znovu.\\nVaše sezení s asistencí hesla vypršelo. To se mohlo stát, protože jste se pokusil(a) použít spojení na které byl odeslán e-mail více, než jednou, nebo protože uplynulo příliš mnoho času od okamžiku zaslání tohoto spojení k Vám." + +msgid "pwassist_username_mail_body" +msgstr "To je aktivní jméno uživatele nalezené pro danou e-mailovou adresu:\\n%s\\n\\nTato zpráva byla vytvořena automaticky serverem ILIAS:\\n\\t%s\\n\\nVy (nebo někdo s IP %s) požádal o podporu pro zapomenuté jméno uživatele pro emailovou adresu '%s'.\\n\\nZkontrolujte prosím následující a postupujte podle doporučení::\\n\\n-Vy jste požádal(a) o tento e-mail při závadě:\\nSmažte tento e-mail.\\n\\n-Pokud jste si jist(a), že jste nikdy o tento e-mail nežádal(a):\\nKontaktujte prosím %s.\\n\\n- Pokud jste žádal(a) tento e-mail, postupujte prosím následovně::\\n\\n1. Spusťte svůj internetový prohlížeč.\\n\\n2. Vložte následující URL:\\n\\t%s\\n\\nDůležité: Tato adresa je jednořádková. Pokud ji vidíte rozdělenou na více řádků, pak tyto zalomení řádků vkládá Váš e-mailový program.\\n\\n3. Váš prohlížeč nyní zobrazil službu hesla. Využijte tuto stránku s jedním z uživatelských jmen a příslušnou e-mailovou adresou k získání nového hesla." + +msgid "unassist_disabled_no_access" +msgstr "Pomoc s uživatelským jménem není povolena. Pokud potřebujete další pomoc, obraťte se správce systému: %s" diff --git a/components/ILIAS/Init/lang/pwassist_da.po b/components/ILIAS/Init/lang/pwassist_da.po new file mode 100644 index 000000000000..c33baa9c034f --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_da.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Password Hjælp" + +#, fuzzy +msgid "pwassist_disabled_no_access" +msgstr "Password assistance is not enabled. Please contact the system administration for further assistance: %s" + +msgid "pwassist_enter_email" +msgstr "Indtast venligst din emailadresse og tryk på udfør. ILIAS sender en email til adressen med den/de registrerede brugernavne som er tilknyttet. Vælg derefter det ønskede brugernavn og brug password service til at få et nyt password. Hvis du ikke modtager en mail, så kontakt venligst din kursusadministrator eller %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Indtast et brugernavn og den tilknyttede e-mail adresse i felterne nedenfor.

ILIAS sender herefter en besked til mailadressen som indeholder et link til en side hvor du kan angive nyt kodeord for din konto." + +msgid "pwassist_enter_username_and_new_password" +msgstr "Indtast brugernavn og password i feltet nedenfor." + +msgid "pwassist_login_not_match" +msgstr "Indtast venligst et andet brugernavn.\\nDet brugernavn du har indtastet matcher ikke det brugernavn som du har bedt om passwordassistance for." + +msgid "pwassist_mail_body" +msgstr "Skift password på din brugerkonto:\\n\\t%1$s\\n\\nDenne besked er lavet automatisk af ILIAS serveren på %2$s\\n\\nDu (eller en person med ip %3$s) har bedt om password asistance til brugerkontoen %4$s.\\n\\nHvis du har aktiveret hjælp ved en fejltagelse kan du blot ignorere denne mail. Hvis du mistænker forsøg på indbrud på din konto kan du kontakte systemadministrator på %5$s. Hvis du ønsker at fortsætte indtast venligst \\n%1$s\\ni din browser. Bemærk at det skal være 1 linje men dit mailprogram muligvis har opdelt den.\\n\\nPå websiden skal du herefter vælge dit nye password til din konto.\\n\\nBemærk at denne service kun er tilgængelig i en begrænset periode af sikkerhedshensyn." + +msgid "pwassist_mail_sent" +msgstr "En besked er blevet sendt til %1$s med instruktioner om hvordan du kommer videre." + +#, fuzzy +msgid "pwassist_mail_sent_generic" +msgstr "A message has been sent to the email address defined in ILIAS.\\nPlease check your mail box." + +msgid "pwassist_mail_subject" +msgstr "ILIAS password hjælp" + +msgid "pwassist_password_assigned" +msgstr "Password sat for brugerkontoen \"%1$s\"." + +msgid "pwassist_session_expired" +msgstr "Udfyld venligst formularen igen.\\\\nDin passwordassistancesession er udløbet. Dette kan forekomme hvis du har benyttet linket som blev sendt til dig på email mere end 1 gang, eller fordi der er gået for lang tid siden linket blev sendt ti" + +msgid "pwassist_username_mail_body" +msgstr "Her er de aktive brugernavne for emailadressen: %s.\\n\\nDenne besked blev autogenereret af ILIAS serveren %s fordi du (eller en person med IP %s) har anmodet om støtte til glemte brugernavne for emailadressen %s.\\n\\n\\t- Hvis du har anmodet om denne mail ved en fejltagelse kan du blot slette den.\\n\\t- Har du aldrig bedt om denne mail, så kontakt %s.\\n\\t-Har du bedt om denne mail, så fortsæt med følgende:\\n1. Start din browser\\n2. Indtast følgende url:\\n\\t%s\\n\\nBemærk at adressen er en enkelt linje men muligvis er blevet ombrudt af dit emailprogram.\\n3. Din browser viser nu password service. Brug denne side sammen med et af brugernavnene til at anskaffe et nyt password." + +#, fuzzy +msgid "unassist_disabled_no_access" +msgstr "Username assistance is not enabled. Please contact the system administration for further assistance: %s" diff --git a/components/ILIAS/Init/lang/pwassist_de.po b/components/ILIAS/Init/lang/pwassist_de.po new file mode 100644 index 000000000000..487b05968df2 --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_de.po @@ -0,0 +1,51 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Passwort-Unterstützung" + +msgid "pwassist_disabled_no_access" +msgstr "Die Passwort-Unterstützung ist nicht aktiviert. Bitte kontaktieren Sie die technische Betreuung: %s" + +msgid "pwassist_enter_email" +msgstr "Geben Sie hier Ihre E-Mail-Adresse ein. ILIAS sendet eine Liste aller zugehörigen Anmeldenamen an diese Adresse und informiert darin über die Passwortunterstützung. Falls Sie keine E-Mail erhalten, benachrichtigen Sie bitte Ihre Kursleitung oder senden Sie ein E-Mail an %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Geben Sie einen Anmeldenamen und die dazugehörige E-Mail-Adresse ein. ILIAS sendet an diese Adresse eine Anleitung, um ein neues Passwort festzulegen. Falls Sie keine E-Mail erhalten, benachrichtigen Sie bitte Ihre Kursleitung oder senden Sie ein E-Mail an %1$s." + +msgid "pwassist_enter_username_and_new_password" +msgstr "Tragen Sie den Anmeldenamen ein, und vergeben Sie ein neues Passwort." + +msgid "pwassist_login_not_match" +msgstr "Der eingegebene Anmeldename stimmt nicht überein mit dem Anmeldenamen, für den Sie die Passwort-Unterstützung angefordert hatten. Bitte geben Sie den korrekten Anmeldenamen ein." + +msgid "pwassist_mail_body" +msgstr "Tragen Sie ein neues Passwort ein für Ihr Anmeldekonto %1$s

Diese Nachricht wurde automatisch generiert von der ILIAS-Installation: %2$s

Sie (oder jemand mit der Adresse %3$s) hat Passwort-Unterstützung für den Anmeldenamen \"%4$s\" angefordert. Bitte prüfen Sie sorgfältig die nachfolgend aufgeführten Fälle, und handeln Sie wie vorgeschlagen:

• Sie haben die Passwort-Unterstützung versehentlich benutzt: Löschen Sie diese Mail.

• Sie sind sicher, dass Sie nie Passwort-Unterstützung für den angegebenen ILIAS-Server angefordert haben: Bitte nehmen Sie mit %5$s Kontakt auf.

Sie haben um Passwort-Unterstützung angefragt. Bitte gehen Sie wie folgt vor:

1. Starten Sie Ihren Browser.
2. Geben Sie folgende Adresse in Ihrem Browser ein: %6$s Wichtig: Die Adresse besteht aus einer einzigen Zeile. Wenn Sie die Adresse aufgetrennt in mehrere Zeilen sehen, dann hat Ihr E-Mail-Programm diese Zeilenumbrüche eingefügt.
3. Ihr Browser zeigt nun eine Seite an, mit der Sie ein neues Passwort an das Anmeldekonto zuweisen können.

Bitte beachten Sie: Aus Sicherheitsgründen können Sie diese drei Schritte nur exakt einmal und innerhalb einer begrenzten Zeit ausführen. Danach wird die Adresse ungültig, und Sie müssen die Passwort-Unterstützung auf dem ILIAS-Server erneut anfordern." + +msgid "pwassist_mail_sent" +msgstr "ILIAS hat eine E-Mail an die Adresse %1$s versandt, sofern ein ILIAS-Konto mit dem angegebenen Anmeldenamen und der E-Mail-Adresse existiert. Weitere Anweisungen finden Sie in dieser Mail." + +msgid "pwassist_mail_sent_generic" +msgstr "ILIAS hat eine E-Mail an die hinterlegte Adresse versandt. Weitere Anweisungen finden Sie in dieser Mail." + +msgid "pwassist_mail_subject" +msgstr "ILIAS-Passwort-Unterstützung" + +msgid "pwassist_password_assigned" +msgstr "Das Passwort für den Anmeldenamen %1$s wurde erfolgreich gespeichert." + +msgid "pwassist_session_expired" +msgstr "Bitte füllen Sie das Formular erneut aus. Die Zeit für die Durchführung der Passwort-Unterstützung ist abgelaufen. Dies kann passiert sein, weil Sie versucht haben, die Adresse, die Ihnen per E-Mail zugesandt wurde, mehr als einmal zu verwenden, oder weil zu viel Zeit verstrichen ist, seit die Adresse zu Ihnen gesandt wurde." + +msgid "pwassist_username_mail_body" +msgstr "Dies sind die aktiven Anmeldenamen, die in ILIAS dieser E-Mail-Adresse zugeordnet sind: %s

Diese Mail ist automatisch generiert worden von der ILIAS-Installation: %s

Sie (oder jemand mit der Adresse %s) hat die Anmeldenamenauflistung für die E-Mail-Adresse „%s“ angefordert. Bitte prüfen Sie sorgfältig die nachfolgend aufgeführten Fälle, und handeln Sie wie vorgeschlagen:

• Sie haben die Anmeldenamen-Unterstützung auf dem Server versehentlich benutzt: Löschen Sie diese E-Mail.

• Sie sind sicher, dass Sie nie Anmeldenamen-Unterstützung für den angegebenen ILIAS-Server angefordert haben: Bitte nehmen Sie mit %s Kontakt auf.

• Sie haben um Anmeldenamen-Unterstützung angefragt: Bitte gehen Sie wie folgt vor:
1. Starten Sie Ihren Browser.
2. Geben Sie folgende Adresse in Ihrem Browser ein: %s
Wichtig: Die Adresse besteht aus einer einzigen Zeile. Wenn Sie die Adresse aufgetrennt in mehrere Zeilen sehen, dann hat Ihr E-Mail-Programm diese Zeilenumbrüche eingefügt.
3. Ihr Browser zeigt nun die Passwort-Unterstützungs-Seite an. Verwenden Sie diese Funktion, um sich zu einer Kombination aus Anmeldenamen und E-Mail ein neues Passwort schicken zu lassen." + +msgid "unassist_disabled_no_access" +msgstr "Die Unterstützung für vergessene Anmeldenamen ist nicht aktiviert. Bitte kontaktieren Sie die technische Betreuung: %s" diff --git a/components/ILIAS/Init/lang/pwassist_el.po b/components/ILIAS/Init/lang/pwassist_el.po new file mode 100644 index 000000000000..9fcdf7d00f56 --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_el.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Βοηθός κωδικού πρόσβασης" + +#, fuzzy +msgid "pwassist_disabled_no_access" +msgstr "Password assistance is not enabled. Please contact the system administration for further assistance: %s" + +msgid "pwassist_enter_email" +msgstr "Παρακαλώ εισάγετε μια νέα διεύθυνση email και υποβάλλετε τη φόρμα.\\nΤο ILIAS θα σας στείλει ένα email σ' αυτή τη διεύθυνση. Το email περιέχει όλα τα ονόματα χρηστών που έχουν εγγραφεί σ' αυτή τη διεύθυνση email.\\nΕπιλέξτε ένα κατάλληλο όνομα χρήστη και χρησιμοποιήστε την υπηρεσία κωδικών πρόσβασης για να ανακτήσετε ένα νέο password. Αν δεν λάβετε email από την υπηρεσία παρακαλώ επικοινωνήστε με το διαχειριστή του μαθήματος ή %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Εισάγετε ένα όνομα χρήστη και το αντίστοιχο email στα παρακάτω πεδία.\\nΤο ILIAS θα σας στείλει ένα μήνυμα σ' αυτή τη διεύθυνση email. Το μήνυμα περιέχει μια διεύθυνση για μια ιστοσελίδα όπου μπορείτε να εισάγετε ένα νέο κωδικό πρόσβασης για το λογαριασμό χρήστη.\\nΣε περίπτωση που δεν μπορείτε να εκχωρήσετε έναν κωδικό πρόσβασης στο λογαριασμό χρήστη κάνοντας χρήση αυτής τη φόρμας, επικοινωνήστε με το διαχειριστή του μαθήματος ή αποστείλετε ένα email στο %1$s." + +msgid "pwassist_enter_username_and_new_password" +msgstr "Εισάγετε το όνομα χρήστη και το νέο κωδικό πρόσβασης στα παρακάτω πεδία." + +msgid "pwassist_login_not_match" +msgstr "Παρακαλώ εισάγετε ένα νέο όνομα χρήστη.\\nΤο όνομα χρήστη που εισαγάγατε δεν ταιριάζει με το όνομα χρήστη για το οποίο ζητήσατε τη βοήθεια κωδικού πρόσβασης." + +msgid "pwassist_mail_body" +msgstr "Εγγράψτε ένα νέο κωδικό πρόσβασης για το λογαριασμό χρήστη:\\n\\t%1$s\\n\\nΑυτό το μήνυμα δημιουργήθηκε αυτόματα από τον διακομιστή ILIAS\\n\\t%2$s\\n\\nΕσείς (ή κάποιος στο %3$s) ζήτησε υποστήριξη για κωδικό πρόσβασης για το λογαριασμό χρήστη \"%4$s\".\\n\\nΠαρακαλώ ελέγξτε με προσοχή τις συνθήκες που φαίνονται παρακάτω και προχωρήστε κατάλληλα:\\n\\n- Αν χρησιμοποιήσατε βοήθεια για κωδικό πρόσβασης κατά λάθος από το διακομιστή ILIAS:\\nΔιαγράψτε αυτό το mail.\\n\\n- Αν είστε σίγουροι ότι ποτέ δεν ζητήσατε βοήθεια για κωδικό πρόσβασης από αυτόν το διακομιστή ILIAS:\\nΠαρακαλώ επικοινωνήστε με %5$s.\\n\\n- Αν ζητήσατε βοήθεια κωδικού πρόσβασης, παρακαλώ προχωρήστε ως ακολούθως:\\n\\n1. Ανοίξτε τον πλοηγό σας.\\n\\n2. Εισάγετε την ακόλουθη διεύθυνση στον πλοηγό σας:\\n\\t%1$s\\n\\nΣημαντικό: Η διεύθυνση είναι σε μια γραμμή. Αν τη βλέπετε διαμοιρασμένη σε πολλές γραμμές, τότε το πρόγραμμα email σας εισήγαγε αυτές τις αλλαγές γραμμής.\\n\\n3. Στην ιστοσελίδα που εμφανίζεται στον πλοηγό σας, εισάγετε ένα νέο κωδικό πρόσβασης για το λογαριασμό σας χρήστη.\\n\\nΠαρακαλώ σημειώστε ότι για λόγους ασφαλείας, μπορείτε να εκτελέσετε τα παραπάνω τρία βήματα μια φορά μόνο και για περιορισμένο χρονικό διάστημα. Ύστερα, η διεύθυνση ακυρώνεται και πρέπει να χρησιμοποιήσετε τη σελίδα βοηθού κωδικού πρόσβασης του διακομιστή ILIAS πάλι." + +msgid "pwassist_mail_sent" +msgstr "Ένα μήνυμα έχει σταλεί στο %1$s.\\nΠαρακαλώ ελέγξτε το ηλεκτρονικό ταχυδρομείο σας." + +#, fuzzy +msgid "pwassist_mail_sent_generic" +msgstr "A message has been sent to the email address defined in ILIAS.\\nPlease check your mail box." + +msgid "pwassist_mail_subject" +msgstr "Βοηθός κωδικού πρόσβασης ILIAS" + +msgid "pwassist_password_assigned" +msgstr "Ο κωδικός πρόσβασης εκχωρήθηκε με επιτυχία στο χρήση \"%1$s\"." + +msgid "pwassist_session_expired" +msgstr "Παρακαλώ συμπληρώστε πάλι τη φόρμα.\\nΗ σύνοδος βοήθειας κωδικού πρόσβασής σας έχει λήξει. Αυτό μπορεί να 'χει συμβεί επειδή προσπαθήσατε να χρησιμοποιήσετε περισσότερες από μια φορές τον υπερσύνδεσμο που σας ταχυδρομήθηκε ηλεκτρονικά, ή επειδή έχει περάσει πολύς χρόνος από που σας ταχυδρομήθηκε ο υπερσύνδεσμος." + +msgid "pwassist_username_mail_body" +msgstr "Αυτό είναι το ενεργό όνομα χρήστη που βρέθηκε για το δωθέν email:\\n%s\\n\\nΑυτό το μήνυμα δημιουργήθηκε αυτόματα από τον ακόλουθο διακομιστή ILIAS:\\n\\t%s\\n\\nΕσείς (ή κάποιος με IP %s) ζήτησε υποστήριξη για ξεχασμένο όνομα χρήστη για τη διεύθυνση email '%s'.\\n\\nΠαρακαλώ ελέγξτε τα παρακάτω και δράστε ανάλογα::\\n\\n-Ζητήσατε αυτό το mail κατά λάθος:\\nΔιαγράψτε αυτό το email.\\n\\n-Είστε σίγουροι ότι ποτέ δεν ζητήσατε αυτό το email:\\nΠαρακαλώ επικοινωνήστε με %s.\\n\\n- Αν ζητήσατε αυτό το email, παρακαλώ προχωρήστε ως ακολούθως::\\n\\n1. Εκκινήστε τον πλοηγό σας internet.\\n\\n2. Εισάγετε το ακόλουθο url:\\n\\t%s\\n\\nΣημαντικό: Η διεύθυνση είναι σε μια γραμμή. Αν τη βλέπετε διαμοιρασμένη σε πολλές γραμμές, τότε το πρόγραμμα email σας εισήγαγε αυτές τις αλλαγές γραμμής.\\n\\n3. Ο Πλοηγός σας τώρα δείχνει την υπηρεσία κωδικών πρόσβασης. Χρησιμοποιήστε αυτή τη σελίδα μαζί με κάποιο από τα ονόματα χρήστη και την αντίστοιχη διεύθυνση email για να ανακτήσετε τον κωδικό πρόσβασης." + +#, fuzzy +msgid "unassist_disabled_no_access" +msgstr "Username assistance is not enabled. Please contact the system administration for further assistance: %s" diff --git a/components/ILIAS/Init/lang/pwassist_en.po b/components/ILIAS/Init/lang/pwassist_en.po new file mode 100644 index 000000000000..cc243d4609d4 --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_en.po @@ -0,0 +1,51 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Password Assistance" + +msgid "pwassist_disabled_no_access" +msgstr "Password assistance is not enabled. Please contact the system administration for further assistance: %s" + +msgid "pwassist_enter_email" +msgstr "Please enter an e-mail address and submit the form. ILIAS will send an e-mail to that address. The e-mail contains all user names which have registered this e-mail address. Choose a suitable username and use the password service to retrieve a new password. If you do not retrieve any e-mail by this service please contact your course admin or %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Enter a username and the associated e-mail address in the fields shown below. ILIAS will send a message to that e-mail address. The message contains an address for a web page, where you can enter a new password for the user account. In case you are unable to assign a password to your user account using this form, contact your course administration or send an e-mail to %1$s." + +msgid "pwassist_enter_username_and_new_password" +msgstr "Enter the username and the new password in the fields below." + +msgid "pwassist_login_not_match" +msgstr "Please enter another username. The username you have entered does not match the username for which you had asked for password assistance." + +msgid "pwassist_mail_body" +msgstr "Register a new password for your user account: %1$s

This message has been generated automatically by the ILIAS server %2$s

You (or someone at %3$s) has asked for password assistance for the user account \"%4$s\". Please check carefully the conditions listed below and proceed accordingly:

• If you have used the password assistance form on the ILIAS server by accident: Delete this mail.

• If you are certain, that you never asked for password assistance at this ILIAS server: Please contact %5$s.

• If you asked for password assistance, please proceed as follows:
1. Open your browser.
2. Enter the following address in your browser: %6$s
Important: The address is a single line. If you see this address split into multiple lines, then your e-mail program has inserted these line breaks.
3. On the web page shown by your browser, enter a new password for your user account.

Please note, that for security reasons, you can perform the three steps above only exactly once and for a limited time only. Afterwards the address becomes invalid, and you have to use the password assistance page on the ILIAS server again." + +msgid "pwassist_mail_sent" +msgstr "A message has been sent to %1$s, if a user account with the entered username and email address could be found. Please check your mail box for further instructions." + +msgid "pwassist_mail_sent_generic" +msgstr "A message has been sent to the email address defined in ILIAS. Please check your mail box." + +msgid "pwassist_mail_subject" +msgstr "ILIAS Password Assistance" + +msgid "pwassist_password_assigned" +msgstr "The password has been successfully assigned to user \"%1$s\"." + +msgid "pwassist_session_expired" +msgstr "Please fill in this form again. Your password assistance session has expired. This may have happened, because you tried to use the link that has been sent by e-mail to you more than once, or because too much time has passed since the link has been sent to you." + +msgid "pwassist_username_mail_body" +msgstr "These are the active username found for the given e-mail address: %s

This message has been created automatically by the following ILIAS Server: %s

You (or somebody with IP %s) have requested support for forgotten user names for the e-mail address '%s'. Please check the following and act as suggested:

• You have requested this e-mail by accident: Delete this e-mail.

• You are sure, that you never requested this e-mail: Please contact %s.

• If you requested this e-mail, please proceed as follows:
1. Start your internet browser.
2. Enter the following url: %s
Important: The address is a single line. If you see this address split into multiple lines, then your e-mail program has inserted these line breaks.
3. Your Browser now shows the Password-Service. Use this page together with one of the usernames and the according e-mail address to retrieve a new password." + +msgid "unassist_disabled_no_access" +msgstr "Username assistance is not enabled. Please contact the system administration for further assistance: %s" diff --git a/components/ILIAS/Init/lang/pwassist_es.po b/components/ILIAS/Init/lang/pwassist_es.po new file mode 100644 index 000000000000..7b2e6883f3bb --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_es.po @@ -0,0 +1,51 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Asistencia de contraseña" + +msgid "pwassist_disabled_no_access" +msgstr "La asistencia de contraseña no está habilitada. Póngase en contacto con la administración del sistema para obtener más ayuda: %s" + +msgid "pwassist_enter_email" +msgstr "Introduzca una dirección de correo electrónico y envíe el formulario. ILIAS enviará un correo electrónico a esa dirección. El mensaje contendrá todos los nombres de usuario que tengan registrada dicha dirección. Elija el nombre de usuario adecuado y utilice el servicio de contraseña para obtener una nueva contraseña. Si no recibe ningún correo electrónico de este servicio, póngase en contacto con la administración de su curso o con %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Introduzca un nombre de usuario y la dirección de correo electrónico asociada en los campos que aparecen a continuación. ILIAS enviará un mensaje a esa dirección de correo electrónico. El mensaje contiene la dirección de una página web donde podrá introducir una nueva contraseña para la cuenta de usuario. En caso de que no pueda asignar una contraseña a su cuenta de usuario mediante este formulario, póngase en contacto con la administración de su curso o envíe un correo electrónico a %1$s." + +msgid "pwassist_enter_username_and_new_password" +msgstr "Introduzca el nombre de usuario y la nueva contraseña en los campos siguientes." + +msgid "pwassist_login_not_match" +msgstr "Introduzca otro nombre de usuario. El nombre de usuario que ha introducido no coincide con el nombre de usuario para el que ha solicitado la asistencia de contraseña." + +msgid "pwassist_mail_body" +msgstr "Registrar una nueva contraseña para su cuenta de usuario: %1$s

Este mensaje ha sido generado automáticamente por el servidor ILIAS %2$s

Usted (o alguien en %3$s) ha solicitado asistencia de contraseña para la cuenta de usuario \"%4$s\". Por favor, compruebe cuidadosamente las condiciones que se enumeran a continuación y proceda en consecuencia:

• Si ha utilizado el formulario de asistencia de contraseña en el servidor ILIAS por accidente: elimine este correo.

• Si está seguro de que nunca ha solicitado asistencia de contraseña en este servidor ILIAS: póngase en contacto con %5$s.

• Si solicitó asistencia de contraseña, proceda de la siguiente manera:
1. Abra su navegador.
2. Introduzca la siguiente dirección en su navegador: %6$s
Importante: La dirección es una sola línea. Si ve esta dirección dividida en varias líneas, es que su programa de correo electrónico ha insertado estos saltos de línea.
3. En la página web mostrada por su navegador, introduzca una nueva contraseña para su cuenta de usuario.

Tenga en cuenta que, por razones de seguridad, solo puede realizar los tres pasos anteriores exactamente una vez y solo por un tiempo limitado. Transcurrido ese tiempo, la dirección quedará invalidada y tendrá que volver a utilizar la página de asistencia de contraseña del servidor ILIAS." + +msgid "pwassist_mail_sent" +msgstr "Se ha enviado un mensaje a %1$s, en caso de haber encontrado una cuenta de usuario con el nombre de usuario y el correo electrónico introducidos. Por favor, compruebe su buzón de correo para obtener más instrucciones." + +msgid "pwassist_mail_sent_generic" +msgstr "Se ha enviado un mensaje a la dirección de correo electrónico definida en ILIAS. Por favor, compruebe su buzón de correo." + +msgid "pwassist_mail_subject" +msgstr "Asistencia de contraseña de ILIAS" + +msgid "pwassist_password_assigned" +msgstr "La contraseña ha sido asignada con éxito al usuario \"%1$s\"." + +msgid "pwassist_session_expired" +msgstr "Por favor, rellene este formulario de nuevo. Su sesión de asistencia de contraseña ha caducado. Esto puede haber ocurrido porque intentó utilizar el enlace enviado por correo electrónico más de una vez, o porque ha pasado demasiado tiempo desde que se le envió el enlace." + +msgid "pwassist_username_mail_body" +msgstr "Estos son los nombres de usuario activos encontrados para la dirección de correo electrónico proporcionada: %s

Este mensaje ha sido generado automáticamente por el siguiente servidor ILIAS: %s

Usted (o alguien con la IP %s) ha solicitado asistencia por nombres de usuario olvidados para la dirección de correo electrónico '%s'. Por favor, compruebe lo siguiente y actúe según se sugiere:

• Ha solicitado este correo electrónico por error: Elimine este correo electrónico.

• Está seguro de que nunca solicitó este correo electrónico: Por favor, contacte con %s.

• Si ha solicitado este correo electrónico, proceda de la siguiente manera:
1. Inicie su navegador de internet.
2. Introduzca la siguiente URL: %s
Importante: La dirección es una sola línea. Si ve esta dirección dividida en varias líneas, su programa de correo electrónico ha insertado estos saltos de línea.
3. Su navegador mostrará ahora el Servicio de Contraseñas. Use esta página junto con uno de los nombres de usuario y la dirección de correo electrónico correspondiente para obtener una nueva contraseña." + +msgid "unassist_disabled_no_access" +msgstr "La asistencia para nombres de usuario no está habilitada. Por favor, póngase en contacto con la administración del sistema para obtener más ayuda: %s" diff --git a/components/ILIAS/Init/lang/pwassist_et.po b/components/ILIAS/Init/lang/pwassist_et.po new file mode 100644 index 000000000000..2e190a5bbb8a --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_et.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Salasõna abi" + +#, fuzzy +msgid "pwassist_disabled_no_access" +msgstr "Password assistance is not enabled. Please contact the system administration for further assistance: %s" + +msgid "pwassist_enter_email" +msgstr "Palun sisesta e-posti aadress.\\nILIAS saadab sellele aadressile e-kirja. E-kiri sisaldab kõiki kasutajanimesid, mis on selle e-posti aadressiga loodud.\\nVali sobiv kasutajanimi ja kasuta vajaduse korral ka salasõna abi uue salasõna saamiseks. Kui sa ei saa kinnituseks ühtegi e-kirja, kontakteeru administraatoriga või %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Sisesta oma kasutajanimi ja e-posti aadress allpool olevatele väljadele.\\nILIAS saadab sellele e-posti aadressile e-kirja. E-kiri sisaldab veebilehe aadressi, millel saad oma konto jaoks uue salasõna sisestada.\\nJuhul, kui uue salasõna loomine ei õnnestu, võta ühendust administraatoriga või saada e-kiri aadressil %1$s." + +msgid "pwassist_enter_username_and_new_password" +msgstr " Sisesta kasutajanimi ja uus salasõna alltoodud väljadele." + +msgid "pwassist_login_not_match" +msgstr "Palun sisesta teine kasutajanimi.\\nSinu sisestatud kasutajanimi ei kattu kasutajanimega, millele salasõna abi palusid." + +msgid "pwassist_mail_body" +msgstr "Selle automaatkirja on genereerinud ILIASe server\\n\\t%2$s\\n\\nSina (või keegi IP-ga %3$s) on palunud salasõna abi kasutajanimele \"%4$s\".\\n\\nPalun loe järgnev tähelepanelikult läbi ja toimi vastavalt:\\n\\n- Kui palusid salasõna abi kogemata:\\nkstuta see e-kiri.\\n\\n- Kui oled kindel, et pole kunagi sellelt ILIASe serverilt salasõna abi palunud:\\npalun kontakteeru %5$s.\\n\\n- Kui palusid salasõna abi, toimi järgnevalt:\\n\\n1. Ava oma brauser..\\n\\n2. Klikka järgneval lingil, või kui see pole võimalik, sisesta brauserisse:\\n\\t%1$s\\n\\nTähelepanu: aadress koosneb üksikust reast. Kui näed aadressi mitmel real, on seda teinud sinu e-kirja programm.\\n\\n3. Avanenud veebilehel sisesta oma kasutajakonto jaoks uus salasõna.\\n\\nPane tähele, et turvakaalutlustel saad ülal kirjeldatud kolme sammu läbida vaid ühe korra ja limiteeritud aja jooksul. Hiljem muutub aadress kehtetuks ja ILIASe salasõna abi tuleb uuesti küsida." + +msgid "pwassist_mail_sent" +msgstr "Kiri on saadetud %1$s.\\nPalun kontrolli oma postkasti." + +#, fuzzy +msgid "pwassist_mail_sent_generic" +msgstr "A message has been sent to the email address defined in ILIAS.\\nPlease check your mail box." + +msgid "pwassist_mail_subject" +msgstr "ILIASe abi" + +msgid "pwassist_password_assigned" +msgstr "Uue salasõna loomine kasutajale \"%1$s\" õnnestus!" + +msgid "pwassist_session_expired" +msgstr "Palun täida väljad uuesti.\\nSinu salasõna abi sessioon on aegunud. See võib olla tingitud asjaolust, et püüdsid kasutada e-kirjaga saadetud linki rohkem kui ühe korra, või on lingi saatmisest möödunud liiga palju aega." + +msgid "pwassist_username_mail_body" +msgstr "Sisestatud e-posti aadressiga on seotud järgmised kasutajanimed:\\n%s\\n\\nSee automaatsõnum on loodud järgmise ILIASe serveri poolt:\\n\\t%s\\n\\nSina (või keegi IP-ga %s) on palunud abi e-posti aadressiga '%s'\\n seotud kasutajanime meeldetuletamiseks. Palun loe järgnev läbi ja vali sobiv käitumisviis:\\n\\n-Sa lasid selle e-kirja enesele kogemata saata:\\nkustuta see e-kiri.\\n\\n-Oled kindel, et pole kunagi seda e-kirja lasknud saata:\\npalun kontakteeru %s.\\n\\n- Kui sa seda e-kirja soovisid ja sul oli lisaks kasutajanimele ununenud ka salasõna, talita järgmiselt:\\n\\n1. Käivita oma Interneti brauser.\\n\\n2. Sisesta järgmine url:\\n\\t%s\\n\\nTähelepanu: aadress koosneb ühest reast. Kui sa näed seda mitmeks reaks jaotatuna, siis on seda teinud sinu e-kirja programm.\\n\\n3. Sinu brauser näitab nüüd salasõna abi teenust. Kasuta seda lehte koos kasutajanime ja vastava e-posti aadressiga uue salasõna loomiseks." + +#, fuzzy +msgid "unassist_disabled_no_access" +msgstr "Username assistance is not enabled. Please contact the system administration for further assistance: %s" diff --git a/components/ILIAS/Init/lang/pwassist_fa.po b/components/ILIAS/Init/lang/pwassist_fa.po new file mode 100644 index 000000000000..4babd5a98eda --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_fa.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Password Assistance" + +#, fuzzy +msgid "pwassist_disabled_no_access" +msgstr "Password assistance is not enabled. Please contact the system administration for further assistance: %s" + +msgid "pwassist_enter_email" +msgstr "Please enter an e-mail address and submit the form.\\nILIAS will send an e-mail to that address. The e-mail contains all usernames which have registered this e-mail address.\\nChoose a suitable username and use the password service to retrieve a new password. If you do not retrieve any e-mail by this service please contact your course admin or %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Enter a user name and the associated e-mail address in the fields shown below.\\nILIAS will send a message to that e-mail address. The message contains an address for a web page, where you can enter a new password for the user account.\\nIn case you are unable to assign a password to your user account using this form, contact your course administration or send an e-mail to %1$s." + +msgid "pwassist_enter_username_and_new_password" +msgstr "Enter the user name and the new password in the fields below." + +msgid "pwassist_login_not_match" +msgstr "Please enter another user name.\\nThe user name you have entered does not match the user name for which you had asked for password assistance." + +msgid "pwassist_mail_body" +msgstr "Register a new password for your user account:\\n\\t%1$s\\n\\nThis message has been generated automatically by the ILIAS server\\n\\t%2$s\\n\\nYou (or someone at %3$s) has asked for password assistance for the user account \"%4$s\".\\n\\nPlease check carefully the conditions listed below, and proceed accordingly:\\n\\n- If you have used the password assistance form on the ILIAS server by accident:\\nDelete this mail.\\n\\n- If you are certain, that you never asked for password assistance at this ILIAS server:\\nPlease contact %5$s.\\n\\n- If you asked for password assistance, please proceed as follows:\\n\\n1. Open your browser.\\n\\n2. Enter the following address in your browser:\\n\\t%6$s\\n\\nImportant: The address is a single line. If you see this address split into multiple lines, then your e-mail program has inserted these line breaks.\\n\\n3. On the web page shown by your browser, enter a new password for your user account.\\n\\nPlease note, that for security reasons, you can perform the three steps above only exactly once and for a limited time only. Afterwards the address becomes invalid, and you have to use the password assistance page on the ILIAS server again." + +msgid "pwassist_mail_sent" +msgstr "A message has been sent to %1$s.\\nPlease check your mail box." + +#, fuzzy +msgid "pwassist_mail_sent_generic" +msgstr "A message has been sent to the email address defined in ILIAS.\\nPlease check your mail box." + +msgid "pwassist_mail_subject" +msgstr "ILIAS Password Assistance" + +msgid "pwassist_password_assigned" +msgstr "The password has been successfully assigned to user \"%1$s\"." + +msgid "pwassist_session_expired" +msgstr "Please fill in this form again.\\nYour password assistance session has expired. This may have happened, because you tried to use the link that has been sent by e-mail to you more than once, or because too much time has passed since the link has been sent to you." + +msgid "pwassist_username_mail_body" +msgstr "These are the active username found for the given e-mail address:\\n%s\\n\\nThis message has been created automatically by the following ILIAS Server:\\n\\t%s\\n\\nYou (or somebody with IP %s) have requested support for forgotten usernames for the e-mail address '%s'.\\n\\nPlease check the following and act as suggested::\\n\\n-You have requested this e-mail by accident:\\nDelete this e-mail.\\n\\n-You are sure, that you never requested this e-mail:\\nPlease contact %s.\\n\\n- If you requested this e-mail, please proceed as follows::\\n\\n1. Start your internet browser.\\n\\n2. Enter the following url:\\n\\t%s\\n\\nImportant: The address is a single line. If you see this address split into multiple lines, then your e-mail program has inserted these line breaks.\\n\\n3. Your Browser now shows the Password-Service. Use this page together with one of the usernames and the according e-mail address to retrieve a new password." + +#, fuzzy +msgid "unassist_disabled_no_access" +msgstr "Username assistance is not enabled. Please contact the system administration for further assistance: %s" diff --git a/components/ILIAS/Init/lang/pwassist_fr.po b/components/ILIAS/Init/lang/pwassist_fr.po new file mode 100644 index 000000000000..9a9c9239176f --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_fr.po @@ -0,0 +1,51 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Assistance pour les Mots de Passe" + +msgid "pwassist_disabled_no_access" +msgstr "L’assistance pour les mots de passe n’est pas activée. Veuillez contacter l’administration du système pour obtenir de l’aide supplémentaire: %s" + +msgid "pwassist_enter_email" +msgstr "Saisir une adresse mail et envoyez le formulaire.n Ilias va envoyer un mail à cette adresse. Le mail contient tous les noms d'utilisateurs qui ont déjà cette adresse mail. \\nChoisissez le nom d'utilisateur correspondant et utilisez le service 'mot de passe' pour obtenir un nouveau mot de passe. Si vous n'obtenez aucun mail par ce moyen, prenez contact avec votre administrateur ou %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Saisir un nom d'utilisateur et l'adresse mail associée dans les champs ci-dessous.\\nILIAS enverra un message à cette adresse. Le mail contiendra l'adresse d'une page web sur laquelle vous pourrez saisir un nouveau mot de passe pour votre compte utilisateur. Si vous ne parvenez à obtenir un mot de passe pour votre compte par ce moyen, contacter l'administrateur de votre établissement ou envoyez un mail à %1$s" + +msgid "pwassist_enter_username_and_new_password" +msgstr "Saisir le nom d'utilisateur et le nouveau mot de passe dans les champs ci-dessous." + +msgid "pwassist_login_not_match" +msgstr "Veuillez saisir un autre nom d'utilisateur.\\nLe nom d'utilisateur que vous avez saisi ne correspond pas au nom d'utilisateur pour lequel vous avez demandé une assistance." + +msgid "pwassist_mail_body" +msgstr "Enregistrer un nouveau mot de passe pour votre compte utilisateur: \\t%1$s\\n\\nCe message a été généré automatiquement par le serveur ILIAS\\n\\t%2$s\\n\\nVous (ou quelqu'un sur %3$s) avez demandé une assistance de mot de passe pour le compte utilisateur \"%4$s\".\\n\\nVeuillez vérifier soigneusement les conditions listées ci-dessous et agir comme indiqué :\\n\\n- Si vous avez utilisé le formulaire d'assistance de mot de passe du serveur ILIAS par accident :\\n détruisez ce message\\n\\n- Si vous êtes certain(e) que vous n'avez jamais demandé d'assistance de mot de passe sur ce serveur ILIAS :veuillez contacter %5$s.\\n\\n- Si vous avez demandé une assistance de mot de passe, veuillez suivre la procédure suivante :\\n\\n1. Ouvrez votre navigateur web.\\n\\n2. Saisissez l'adresse suivante dans le navigateur :\\n\\t%1$s\\n\\nImportant : L'adresse est sur une seule ligne. Si vous la voyez sur plusieurs lignes, c'est votre programme de mail qui a ajouté ces retours à la ligne.\\n\\n3.Sur la page web qui s'affichera dans le navigateur, saisissez un nouveau mot de passe pour votre compte utilisateur.\\n\\nAttention : pour des raisons de sécurité, vous ne pouvez réaliser ces trois étapes qu'une seule fois et pendant un temps limité. Par la suite, l'adresse deviendra invalide et vous devrez utiliser le formulaire d'assistance de mot de passe du serveur ILIAS à nouveau." + +msgid "pwassist_mail_sent" +msgstr "Un email a été envoyé à l'adresse %1$s.\\nVeuillez regarder votre boîte aux lettres." + +msgid "pwassist_mail_sent_generic" +msgstr "A message has been sent to the email address defined in ILIAS.\\nPlease check your mail box." + +msgid "pwassist_mail_subject" +msgstr "Assistance de Mot de Passe ILIAS" + +msgid "pwassist_password_assigned" +msgstr "Le mot de passe a été assigné avec succès à l'utilisateur %1$s." + +msgid "pwassist_session_expired" +msgstr "Veuillez remplir à nouveau le formulaire.\\nVotre session d'assistance de mot de passe a expiré. Cela peut être dû au fait que vous avez essayé d'utiliser plusieurs fois le lien que vous avez reçu, ou bien parce que trop de temps s'est écoulé depuis que le message vous a été envoyé." + +msgid "pwassist_username_mail_body" +msgstr "Ce sont les noms d'utilisateur correspondant à l'adresse mail donnée :\\n%s\\n\\n. Ce message a été créé automatiquement par le serveur ILIAS suivant : \\n\\t%s\\n\\n Vous (ou quelqu'un avec le numéro IP %s) a demandé le support d'aide 'nom d'utilisateur oublié' pour l'adresse mail '%s'.\\n\\nVérifier les informations contenues dans ce message et suivre les indications ::\\n\\n-Vous avez fait cette demande par erreur :\\nSupprimer ce message.\\n\\nVous êtes certain de n'avoir jamais fait une telle demande :\\nContactez %s.\\n\\n-Si vous avez fait cette demande, procédez comme suit ::\\n\\n1. Ouvrer votre navigateur internet.\\n\\n2. Saisir l'adresse internet (URL) suivante :\\n\\t%s\\n\\nImportant : l'adresse est d'une seule ligne. Si vous voyez cette adresse tronquée en plusieurs lignes, c'est que votre programme logiciel de mail a ajouté des retours chariot.\\n\\n3. Votre navigateur internet affiche maintenant le service 'mot de passe'. Utiliser cette page avec l'un des nom d'utilisateur et l'adresse mail correspondante pour obtenir un nouveau mot de passe." + +msgid "unassist_disabled_no_access" +msgstr "L’assistance pour les noms d’utilisateur n’est pas activée. Veuillez contacter l’administration du système pour obtenir de l’aide supplémentaire: %s" diff --git a/components/ILIAS/Init/lang/pwassist_hr.po b/components/ILIAS/Init/lang/pwassist_hr.po new file mode 100644 index 000000000000..9caecab58a78 --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_hr.po @@ -0,0 +1,51 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Pomoć za lozinku" + +msgid "pwassist_disabled_no_access" +msgstr "Pomoć za lozinku nije omogućena. Molimo kontaktirajte administraciju sustava za daljnju pomoć: %s" + +msgid "pwassist_enter_email" +msgstr "Unesite adresu e-pošte i pošaljite obrazac.\\nILIAS će poslati e-poštu na tu adresu. E-pošta sadrži sva korisnička imena koja su registrirala ovu adresu e-pošte.\\nOdaberite odgovarajuće korisničko ime i upotrijebite uslugu za lozinku kako biste postavili novu lozinku. Ako ne dobijete nijednu e-poštu putem ove usluge, obratite se administratoru tečaja ili %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Unesite korisničko ime i povezanu adresu e-pošte u dolje prikazana polja.\\nIlias će poslati poruku na tu adresu e-pošte. Poruka sadrži adresu in ternetske stranice na kojoj možete unijeti novu lozinku za korisnički račun.\\nU slučaju da pomoću ovog obrasca ne možete dodijeliti lozinku svom korisničkom računu, obratite se administraciji tečaja ili pošaljite e-poštu na %1$s." + +msgid "pwassist_enter_username_and_new_password" +msgstr "Unesite korisničko ime i novu lozinku u polja ispod." + +msgid "pwassist_login_not_match" +msgstr "Unesite drugo korisničko ime.\\nUneseno ime koje ste unijeli ne podudara se s korisničkim imenom za koje ste zatražili pomoć vezano za lozinku." + +msgid "pwassist_mail_body" +msgstr "Registrirajte novu lozinku za svoj korisnički račun:\\n\\t% 1$s\\n\\nOvu poruku automatski je generirao server ILIAS\\n\\t%2$s\\n\\nVi (ili netko na %3$s) zatražio je pomoć za lozinku za korisnički račun \"%4$s\".\\n\\nPažljivo provjerite dolje navedene uvjete i nastavite u skladu s tim:\\n\\n- Ako ste na ILIAS serveru slučajno koristili obrazac za pomoć vezano za lozinku:\\nIzbrišite ovu poruku e-pošte.\\n\\n- Ako ste sigurni da nikada niste zatražili pomoć za lozinku na ovom ILIAS serveru:\\nMolimo kontaktirajte %5$s.\\n\\n- Ako ste zatražili pomoć za lozinku, molimo vas postupite na sljedeći način:\\n\\n1. Otvorite svoj preglednik.\\n\\n2. U svoj preglednik unesite sljedeću adresu:\\n\\t%6$s\\n\\nVažno: Adresa je jedan redak. Ako vidite da je ova adresa podijeljena u više redaka, tada je vaš program za e-poštu ubacio ove prijelome redaka.\\n\\n3. Na internetskoj stranici koju prikazuje vaš preglednik unesite novu lozinku za svoj korisnički račun.\\n\\nNapominjemo da gore navedena tri koraka možete izvršiti samo točno jednom i samo na ograničeno vrijeme. Nakon toga adresa postaje nevaljana i morate ponovno koristiti stranicu za pomoć s lozinkom na ILIAS serveru." + +msgid "pwassist_mail_sent" +msgstr "Poruka je poslana na %1$s.\\nPrevjerite svoj poštanski sandučić." + +msgid "pwassist_mail_sent_generic" +msgstr "Poruka je poslana na adresu e-pošte definiranu u ILIAS-u.\\nProvjerite svoj poštanski sandučić." + +msgid "pwassist_mail_subject" +msgstr "Pomoć za lozinku ILIAS" + +msgid "pwassist_password_assigned" +msgstr "Lozinka je uspješno dodijeljena korisničkom imenu \"%1$s\"." + +msgid "pwassist_session_expired" +msgstr "Molimo vas da ponovo ispunite ovaj obrazac.\\nVaša sesija pomoći za lozinku je istekla. To se moglo dogoditi jer ste više puta pokušali koristiti poveznicuu koja vam je poslana e-poštom ili zato što je prošlo previše vremena otkad vam je poveznica poslana." + +msgid "pwassist_username_mail_body" +msgstr "Ovo je aktivno korisničko ime pronađeno za danu adresu e-pošte:\\n%s\\n\\nOvu je poruku automatski kreirao sljedeći server ILIAS-a:\\n\\t%s\\n\\nVi (ili netko s IP adrese %s) zatražili ste podršku za zaboravljena korisnička imena za adresu e-pošte '% s'.\\n\\nProvjerite sljedeće i ponašajte se kao što je predloženo::\\n\\n-Slučajno ste zatražili ovu e-poštu:\\nIzbrišite ovu e-poštu.\\n\\n-Sigurni ste da nikada niste zatražili ovu e-poštu:\\nMolimo kontaktirajte % s.\\n\\n- Ako ste zatražili ovu e-poštu, postupite na sljedeći način::\\n\\n1. Pokrenite internetski preglednik.\\n\\n2. Unesite sljedeći url:\\n\\t%s\\n\\nVažno: Adresa je jedan redak. Ako vidite da je ova adresa podijeljena u više redaka, tada je vaš program za e-poštu ubacio ove prijelome redaka.\\n\\n3. Vaš preglednik sada prikazuje uslugu za lozinke. Upotrijebite ovu stranicu zajedno s jednim od korisničkih imena i odgovarajućom adresom e-pošte za dohvaćanje nove lozinke." + +msgid "unassist_disabled_no_access" +msgstr "Pomoć oko korisničkog imena nije omogućena. Molimo kontaktirajte administraciju sustava za daljnju pomoć: %s" diff --git a/components/ILIAS/Init/lang/pwassist_hu.po b/components/ILIAS/Init/lang/pwassist_hu.po new file mode 100644 index 000000000000..c07a90eeef79 --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_hu.po @@ -0,0 +1,51 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Jelszósegédlet" + +msgid "pwassist_disabled_no_access" +msgstr "A jelszósegédlet nincs bekapcsolva. További információért keresse a üzemeltetőt: %s" + +msgid "pwassist_enter_email" +msgstr "Adjon meg egy e-mail címet. Az ILIAS egy e-mailt küld erre a címre, amely tartalmazza az összes felhasználónevet, amely ezt az e-mail címet adta meg. Válassza ki a kívánt felhasználónevet, és használja a jelszósegédletet új jelszó megadásához. Ha rövid időn belül nem kapja meg az e-mailt, vegye fel a kapcsolatot egy rendszergazdával vagy küldjön e-mailt a következő címre: %1$s" + +msgid "pwassist_enter_username_and_email" +msgstr "Adjon meg egy felhasználónevet és a hozzá tartozó e-mail címet. Az ILIAS üzenetet küld az e-mail címre, amely azon weblap címét tartalmazza, ahol új jelszót adhat meg ILIAS-fiókjához. Ha ezután sem sikerül bejelentkeznie, vegye fel a kapcsolatot egy rendszergazdával, vagy küldjön e-mailt a következő címre: %1$s" + +msgid "pwassist_enter_username_and_new_password" +msgstr "Adja meg a felhasználónevet és az új jelszót!" + +msgid "pwassist_login_not_match" +msgstr "Másik felhasználónevet adjon meg! A megadott felhasználónév nem egyezik meg azzal, amelyet a jelszósegédlettől kért." + +msgid "pwassist_mail_body" +msgstr "Adjon meg új jelszót az ILIAS-fiókjához: %1$s

Ezt az üzenetet automatikusan generálta az alábbi ILIAS-szerver %2$s

Ön (vagy valaki %3$s) jelszósegédletet kért a ‘%4$s’ ILIAS-fiókhoz. Gondosan ellenőrizze az alább felsorolt lehetőségeket, és azok szerint járjon el:

• Ha esetleg az ILIAS szerveren levő jelszósegédlet-űrlapot használta volna: Törölje ezt a levelet.

• Ha biztos benne, hogy soha nem kért jelszósegédletet ettől az ILIAS-szervertől: Vegye fel a kapcsolatot: %5$s.

• Ha kért jelszósegédletet, járjon el az alábbiak szerint:
1. Nyissa meg böngészőjét.
2. Adja meg a következő címet böngészőjében: %6$s
Fontos: a cím egysoros. Ha azt látja, hogy a cím több részből tevődik össze, levelezőprogramja szúrta be a sortöréseket az útvonalba.
3. A böngészője által megjelenített weboldalon adjon meg egy új jelszót bejelentkezéséhez.

Vegye figyelembe, hogy biztonsági okokból a fent leírt három lépést csak egyszer hajthatja végre, és csak időkorláton belül. Azután a cím érvénytelenné válik, és Önnek az ILIAS szerveren levő jelszósegédletet kell újra használnia." + +msgid "pwassist_mail_sent" +msgstr "Üzenetet küldtünk a következő címre: %1$s Ellenőrizze postaládáját!" + +msgid "pwassist_mail_sent_generic" +msgstr "Üzenetet küldtünk az ILIAS-ban megadott e-mail címére. Ellenőrizze postaládáját!" + +msgid "pwassist_mail_subject" +msgstr "ILIAS-jelszósegédlet" + +msgid "pwassist_password_assigned" +msgstr "‘%1$s’ felhasználó jelszavát sikeresen cseréltük." + +msgid "pwassist_session_expired" +msgstr "Töltse ki újra ezt az űrlapot! Jelszósegédlet-munkamenete lejárt. Ez azért történhetett, mert megpróbálta többször használni az e-mailben elküldött linket, vagy mert túl sok idő telt el azóta, hogy elküldték önnek a linket." + +msgid "pwassist_username_mail_body" +msgstr "Ehhez az e-mail címhez az alábbi felhasználónevek tartoznak: %s

Ezt az üzenetet automatikusan küldte a következő ILIAS-szerver: %s

%s IP-címről e-mail kértek %s e-mailhez tartozó felhasználónév elfelejtett jelszava miatt. Gondosan ellenőrizze az alább felsorolt lehetőségeket, és azok szerint járjon el:

• Ha véletlenül kérte ezt a levelet, törölje.

• Ha biztos, hogy nem kérte ezt a levelet, vegye fel a kapcsolatot a rendszergazdával: %s.

• Ha Ön kérte ezt a levelet, járjon el a jelszósegédlet oldalán leírtak szerint:
1. Nyissa meg böngészőjét.
2. Adja meg a következő címet böngészőjében: %s
Fontos: a cím egysoros. Ha azt látja, hogy a cím több részből tevődik össze, levelezőprogramja szúrta be a sortöréseket az útvonalba.
3. A böngészője által megjelenített weboldalon adja meg az egyik fiók e-mail címét, melynek vissza kívánja szerzi jelszavát." + +msgid "unassist_disabled_no_access" +msgstr "A felhasználónév-segédlet nincs bekapcsolva. További információért keresse az üzemeltetőt: %s" diff --git a/components/ILIAS/Init/lang/pwassist_it.po b/components/ILIAS/Init/lang/pwassist_it.po new file mode 100644 index 000000000000..bc64ed1cf404 --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_it.po @@ -0,0 +1,51 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Servizio di assistenza per le password" + +msgid "pwassist_disabled_no_access" +msgstr "L'assistenza per la password non è abilitata. Si prega di contattare l'amministrazione del sistema per ulteriore assistenza: %s" + +msgid "pwassist_enter_email" +msgstr "Inserisci un indirizzo e-mail e invia il modulo. ILIAS invierà un'e-mail a tale indirizzo. L'e-mail contiene tutti i nomi utente che hanno registrato questo indirizzo e-mail. Scegliere un nome utente adatto e utilizzare il servizio password per recuperare una nuova password. Se non si recupera alcuna e-mail da questo servizio, contattare l'amministratore del corso o %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Immettere un nome utente e l'indirizzo e-mail associato nei campi indicati di seguito. ILIAS invierà un messaggio a tale indirizzo e-mail. Il messaggio contiene un indirizzo per una pagina Web, in cui è possibile inserire una nuova password per l'account utente. Se non è possibile assegnare una password al proprio account utente utilizzando questo modulo, contattare l'amministrazione del corso o inviare un'e-mail a %1$s." + +msgid "pwassist_enter_username_and_new_password" +msgstr "Inserisci il nome utente e la nuova password nei campi sottostanti." + +msgid "pwassist_login_not_match" +msgstr "Inserisci un altro nome utente. \\ Il nome utente che hai inserito non corrisponde al nome utente per il quale hai richiesto l'assistenza tramite password." + +msgid "pwassist_mail_body" +msgstr "Registra una nuova password per il tuo account utente: \\ t %1$s Questo messaggio è stato generato automaticamente dal server ILIAS \\ t %2$s You (o qualcuno a %3$s ) ha richiesto l'assistenza per la password per l'account utente \" %4$s\". Controlla attentamente le condizioni elencate di seguito e procedi di conseguenza: - Se hai utilizzato il modulo di assistenza per la password sul server ILIAS da incidente: Elimina questa mail. - Se sei sicuro di non aver mai chiesto assistenza per la password su questo server ILIAS: Si prega di contattare %5$s. - Se hai chiesto assistenza per la password, per favore procedere come segue: 1. Apri il tuo browser. 2. Immettere il seguente indirizzo nel browser: \\ t %6$s Importante: l'indirizzo è una riga singola. Se vedi questo indirizzo diviso in più righe, il tuo programma di posta elettronica ha inserito queste interruzioni di riga. 3. Nella pagina Web visualizzata dal browser, inserisci una nuova password per il tuo account utente. Si prega di notare che, per motivi di sicurezza, è possibile eseguire i tre passaggi sopra esattamente una sola volta e solo per un periodo di tempo limitato. Successivamente l'indirizzo non è più valido e è necessario utilizzare nuovamente la pagina di assistenza per la password sul server ILIAS." + +msgid "pwassist_mail_sent" +msgstr "Un messaggio e' stato inviato a %1$s.\\ Per favore controlla la tua casella di posta." + +msgid "pwassist_mail_sent_generic" +msgstr "È stato inviato un messaggio all'indirizzo di posta elettronica definito in ILIAS. Per favore controlla la tua casella di posta." + +msgid "pwassist_mail_subject" +msgstr "Servizio di assistenza per le password di ILIAS" + +msgid "pwassist_password_assigned" +msgstr "La password è stata assegnata correttamente all'utente \" %1$s\"." + +msgid "pwassist_session_expired" +msgstr "Compila nuovamente questo modulo. La tua sessione di assistenza per la password è scaduta. Ciò può essere accaduto perché hai tentato di utilizzare il link che ti è stato inviato più di una volta via e-mail o perché è trascorso troppo tempo dall'invio del link." + +msgid "pwassist_username_mail_body" +msgstr "Questi sono i nomi utente attivi trovati per l'indirizzo e-mail indicato: %s. Questo messaggio è stato creato automaticamente dal seguente server ILIAS: %s. Tu (o qualcuno con IP %s) ha richiesto il supporto per i nomi utente dimenticati per l'indirizzo e-mail \"%s\". Si prega di controllare quanto segue e agire come suggerito:\\n- Hai richiesto questa e-mail per sbaglio: Elimina questa e-mail.\\n- Sei sicuro di non aver mai richiesto questa e-mail: Si prega di contattare %s.\\n- Se hai richiesto questa e-mail, procedi come segue:\\n 1. Avvia il tuo browser Internet.\\n 2. Immettere il seguente URL: %s\\n Importante: l'indirizzo è una riga singola. Se vedi questo indirizzo diviso in più righe, il tuo programma di posta elettronica ha inserito queste interruzioni di riga.\\n 3. Il tuo browser ora mostra il servizio password. Utilizzare questa pagina insieme a uno dei nomi utente e all'indirizzo e-mail corrispondente per recuperare una nuova password." + +msgid "unassist_disabled_no_access" +msgstr "L'assistenza per il nome utente non è abilitata. Si prega di contattare l'amministrazione del sistema per ulteriore assistenza: %s" diff --git a/components/ILIAS/Init/lang/pwassist_ja.po b/components/ILIAS/Init/lang/pwassist_ja.po new file mode 100644 index 000000000000..94a15f8f4c5a --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_ja.po @@ -0,0 +1,51 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "パスワード支援" + +msgid "pwassist_disabled_no_access" +msgstr "パスワード支援が有効になっていません。以降の支援:についてはシステム管理者へコンタクトしてください。%s:" + +msgid "pwassist_enter_email" +msgstr "メールアドレスに入力してフォームを送信するとそのアドレスへメールを送ります。メールにはそのメールアドレスに登録されている全てのユーザ名が含まれます。適切なユーザ名を選択しパスワードサービスを利用して新しいパスワードを検索します。このサービスによる一切のメール検索をしないようにするにはコース管理者もしくは%1$sへ連絡してください。" + +msgid "pwassist_enter_username_and_email" +msgstr "以下の欄へユーザ名と関係するe-mailアドレスを入力します。ILIASはそのe-mailアドレスへメッセージを送ります。メッセージにはユーザアカウント用の新しいパスワードを入力ができるwebページのアドレスが含まれています。lnこのフォームを使ってユーザアカウントのパスワード設定ができない場合はコース管理者へ連絡するかまたは%1$sへメール連絡してください。" + +msgid "pwassist_enter_username_and_new_password" +msgstr "以下の欄へユーザ名と新しいパスワードを入力します。" + +msgid "pwassist_login_not_match" +msgstr "別のユーザ名を入力してください。入力されたユーザ名はパスワード支援用の質問の設定と一致しません。" + +msgid "pwassist_mail_body" +msgstr "ユーザアカウントの新しいパスワード登録を行います:\\t%1$s:

このメッセージはILIASサーバ\\t%2$sが自動生成したものです。:

あなた(もしくは%3$sのだれか)がユーザアカウント\"%4$s\"用の新しいパスワードを要求しました。以下に示された条件を十分確認の上で順次進んでください:

• 誤ってILIASサーバのパスワード支援フォームを送った場合:メールを削除。

• このILIASサーバのパスワード支援利用に心当たりがない場合: %5$sへ連絡してください。

•パスワード支援を要求した場合は次の手順で進みます:
1. ブラウザを開きます。:
2. ブラウザに次のアドレスを入力します:\\t%6$s
重要: アドレスは1行です。アドレスが複数行に分割される場合はご利用のメーラが分割行を自動挿入しています。
3. ブラウザに表示されるWebページにユーザアカウントの新しいパスワードを入力します。

セキュリティ上の理由により、上記の3ステップを同時に制限時間内にまとめて実行する必要があります。一定時間を過ぎるとアドレスは無効となるので、再度ILIASサーバのパスワード支援のページを使用する必要があります。" + +msgid "pwassist_mail_sent" +msgstr "入力されたユーザ名とメールアドレスのアカウントが見つかるとメッセージが %1$sへ送信されます。以降の情報はメールボックスをチェックしてください。" + +msgid "pwassist_mail_sent_generic" +msgstr "メッセージはILIASに設定されているemailアドレスへ送信されました。メールボックスを確認してください。" + +msgid "pwassist_mail_subject" +msgstr "ILIAS パスワード支援" + +msgid "pwassist_password_assigned" +msgstr "パスワードは、正しくユーザ \"%1$s\"へ割当てられました。" + +msgid "pwassist_session_expired" +msgstr "再度フォームへ入力してください.パスワード支援のセッションは切れました。メール送信されたリンクを1回でも使用した場合やリンクが送信されてから一定時間過ぎたような場合に発生します。" + +msgid "pwassist_username_mail_body" +msgstr "これらは登録されたe-mailアドレス :%s に見つかったアクティブなユーザ名です。

このメッセージは自動的に次のILIAS :%s が自動作成したものです。

あなた(もしくはIP %sのだれか)がe-mailアドレス'%s'のユーザ名忘れのサポートを要求しました。次をチェックして対応を実行してください:

•間違ってメールを送信した:このメールを削除

• メールを要求したことはない:%sへ連絡してください。

• メールを要求した場合は次を実行してください:
1. インターネットブラウザを開始。
2.次のURL:%
を入力
Important: アドレスは1行にする事。アドレスが複数行に分離していると、メールプログラムは改行を挿入します。
3. ブラウザにはパスワードサービスが表示されます。このページは新しいパスワードに関係するユーザ名と相当するメールアドレスと合わせて使用する事。" + +msgid "unassist_disabled_no_access" +msgstr "ユーザ名支援が有効になっていません。以降の支援:についてはシステム管理者へコンタクトしてください。%s:" diff --git a/components/ILIAS/Init/lang/pwassist_ka.po b/components/ILIAS/Init/lang/pwassist_ka.po new file mode 100644 index 000000000000..a5ec7513d156 --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_ka.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "პაროლის დახმარება" + +#, fuzzy +msgid "pwassist_disabled_no_access" +msgstr "Password assistance is not enabled. Please contact the system administration for further assistance: %s" + +msgid "pwassist_enter_email" +msgstr "გთხოვთ შეიყვანოთ ემაილის მისამართი და ჩააბაროთ ფორმა.\\ნილიასი გააგზავნის ემაილს ამ მისამართზე. ემაილი შეიცავს ყველა მომხმარებლის სახელს რომელმაც დაარეგისტრირა ამ ემაილის მისამართი. \\ნ აირჩიეთ შესაფერისი მომხმარებლის სახელი და გამოიყენეთ პაროლის დახმარება იმისათვის რომ მიიღოთ ახალი პაროლი. თუ ვერ მიიღებთ ემაილს ამ სერვისით გთხოვთ დაუკავშირდეთ თქვენი კურსის ადმინისტრატორს ან %s 1$" + +msgid "pwassist_enter_username_and_email" +msgstr "შეიყვანეთ ამ ემაილთან დაკავშირებული მომხმარებლის სახელი ქვემოთ მოცემულ ველში. ნილიასი გააგზავნის შეტყობინებას ამ ემაილის მისამართზე. შეტყობინება შეიცავს ვებ გვერდის მისამართს სადაც თქვენ შეძლებთ თქვენი პაროლის აღდგენას. \\ნ იმ შემთხვევაში თუ თქვენ ვერ შეძლებთ ამ ფორმიტ პაროლი აღდგენას დაუკავშირდით თქვენი კურსის ადმინისტრატორს ან გააგზავნეთ ემაილი %s1$" + +msgid "pwassist_enter_username_and_new_password" +msgstr "შეიყვანეთ მომხმარებლის სახელი და ახალი პაროლი ქვემოტ მოცემულ ველში" + +msgid "pwassist_login_not_match" +msgstr "გთხოვთ შეიყვანოთ მომხმარებლის სახელი. \\ნ მომხმარებლის სახელი რომელიც თქვენ შეიყვანეთ არ შეესატყვისება იმ მომხმარებლის სახელს რომლისთვისაც თქვენ პაროლის აღდგენა მოითხოვეთ." + +msgid "pwassist_mail_body" +msgstr "\\n\\n- If you have used the password assistance form on the ILIAS server by accident" + +msgid "pwassist_mail_sent" +msgstr "შეტყობინება გაგზავნილია %s1$. \\ნ გთხოვთ შეამოწმოთ თქვენი შეტყობინების ყუთი" + +#, fuzzy +msgid "pwassist_mail_sent_generic" +msgstr "A message has been sent to the email address defined in ILIAS.\\nPlease check your mail box." + +msgid "pwassist_mail_subject" +msgstr "ილიასის პაროლის დახმარება" + +msgid "pwassist_password_assigned" +msgstr "პაროლი წარმატებით დაინიშნა მომხარებელზე \"%s1$\"." + +msgid "pwassist_session_expired" +msgstr "გთხოვთ ხელახლა შეავსოთ ეს ფორმა. \\ნ თქვენი პაროლის დახმარების სესია ამოიწურა. Eეს იმის გამო მოხდა რომ თქვენ გამოგზავნილი ლინკი რამდენიმეჯერ გამოიყენეთ ან დიდი დრო მოანდომეთ პაროლის აღდგენას" + +msgid "pwassist_username_mail_body" +msgstr "\\n\\t%s\\n\\nYou (or somebody with IP %s) have requested support for forgotten usernames for the e-mail address '%s'.\\n\\nPlease check the following and act as suggested" + +#, fuzzy +msgid "unassist_disabled_no_access" +msgstr "Username assistance is not enabled. Please contact the system administration for further assistance: %s" diff --git a/components/ILIAS/Init/lang/pwassist_lt.po b/components/ILIAS/Init/lang/pwassist_lt.po new file mode 100644 index 000000000000..396c118de79c --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_lt.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Slaptažodžio Pagalba" + +#, fuzzy +msgid "pwassist_disabled_no_access" +msgstr "Password assistance is not enabled. Please contact the system administration for further assistance: %s" + +msgid "pwassist_enter_email" +msgstr "Įveskite el.pašto adresą ir nusiųskite formą.\\nILIAS nurodytu el.paštu išsiųs laišką. Jame bus nurodyti visi vartotojų vardai susiję su šiuo el. pašto adresu.\\nPasirinkite tinkamą vartotojo vardą ir pasinaudokite Slaptažodžio Pagalba norėdami gauti naują slaptažodį. Jei negausite jokio laiško iš šios pagalbinės tarnybos, susisiekite su savo kursų administratoriumi arba %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Įveskite vartotojo vardą ir el.pašto adresą nurodytuose laukuose žemiau..\\nILIAS nurodytu el.pašto adresu išiųs laišką. Jame bus nurodytas puslpaio adresas, kuriame galėsite įvesti naują savo paskyros slaptažodį.\\nJei nepavyktų priskirti naujo slaptažodžio paskyrai naudojant šią formą, susisiekite su savo kursų administracija aba siųskite laišką %1$s." + +msgid "pwassist_enter_username_and_new_password" +msgstr "Įveskite vartotojo vardą ir naują slaptažodį laukuose žemiau." + +msgid "pwassist_login_not_match" +msgstr "Įveskite kitą vartotojo vardą.\\nJūsų įvestas vartotojo vardas neatitinka vardo, nurodyto kurio prašėte Slaptažodžio Pagalboje." + +msgid "pwassist_mail_body" +msgstr "Registruoti naują slaptažodį savo vartotojo paskyrai:\\n\\t%1$s\\n\\nŠis pranešimas buvo automatiškai sugeneruotas ILIAS serveryje\\n\\t%2$s\\n\\nJūs (ar kažkas %3$s) paprašė pagalbos su slaptažodžiu vartotojo paskyrai \"%4$s\".\\n\\nPatikrinkite atidžiai žemiau nurodytas sąlygas ir elkitės atitinkamai:\\n\\n- Jei pasinaudojote Slaptažodžio Pagalbos forma ILIAS serveryje netyčia:\\nIštrinkite šį laišką.\\n\\n- Jei tikrai niekada neprašėte pagalbos su slaptažodžiu šiame ILIAS serveryje:\\nSusisiekite su %5$s.\\n\\n- Jei jums buvo reikalinga pagalba su slaptažodžiu, veikite atitinkamai:\\n\\n1. Atverkite naršyklę.\\n\\n2. Įveskite šį adresą naršyklėje:\\n\\t%1$s\\n\\nSvarbu: Adresas yra kaip viena eilutė. Jei matote šį adresą išskaidytą į kelias eilutes, tai jūsų el.pašto programa įterpė eilutės perkėlimus.\\n\\n3. Atsidariusiame naršyklės lange, įveskite naują slaptažodį savo vartotojo paskyrai.\\n\\nAtminkite, kad saugumo sumetimais, šiuo atveju jūs galite tai daryti tik kartą ir tik ribotą laiko tarpą. Po kurio laiko, šis adresas nebetenka galios, o jūs turite naudotis Slaptažodžio Pagalba ILIAS serveryje iš naujo." + +msgid "pwassist_mail_sent" +msgstr "Pranešimas buvo išsiųstas %1$s.\\nPasitikrinkite savo pašto dėžutę." + +#, fuzzy +msgid "pwassist_mail_sent_generic" +msgstr "A message has been sent to the email address defined in ILIAS.\\nPlease check your mail box." + +msgid "pwassist_mail_subject" +msgstr "ILIAS Slaptažodžio Pagalba" + +msgid "pwassist_password_assigned" +msgstr "Slaptažodis buvo sękmingai priskirtas vartotojui \"%1$s\"." + +msgid "pwassist_session_expired" +msgstr "Užpildykite šią formą dar kartą.\\nJūsų pagalbos su slaptažodžiu seansas baigėsi. Tai nutiko dėl bandymo pasinaudoti laiške buvusia nuorodą daugiau nei kartą arba todėl, kad prabėgo pernelyg daug laiko po laiško su nuoroda gavimo." + +msgid "pwassist_username_mail_body" +msgstr "Nurodyto el.pašto adresu rastas aktyvus vartotojas:\\n%s\\n\\nŠis pranešimas buvo sukurtas automatiškai ILIAS Serveryje:\\n\\t%s\\n\\nJūs (ar kažkas su IP %s) paprašė pagalbos dėl pamirštų vartotojo vardų el.pašto adresu '%s'.\\n\\nPAtikrinkite tai ir elkitės atitinkamai::\\n\\n-Prašėte šio laiško atsitiktinai:\\nIštrinkite šį laišką.\\n\\n-Jūs įsitikinę, kad niekad neprašėte šio laiško:\\nSusisiekite su %s.\\n\\n- Jei prašėte šio laiško, elkitės sekančiai::\\n\\n1. Paleiskite interneto naršyklę.\\n\\n2. Įveskite šį url:\\n\\t%s\\n\\nSvarbu: Adresas yra kaip viena eilutė. Jei matote šį adresą išskaidytą į kelias eilutes, tai jūsų el.pašto programa įterpė eilutės perkėlimus.\\n\\n3. Jūsų Naršyklė dabar rodo Slaptažodžio Pagalbą. Pasinaudokite šiuo puslapiu, kartu su vartotojo vardu ir atitinkamu el.pašto adresu, norėdami gauti naują slaptažodį." + +#, fuzzy +msgid "unassist_disabled_no_access" +msgstr "Username assistance is not enabled. Please contact the system administration for further assistance: %s" diff --git a/components/ILIAS/Init/lang/pwassist_nl.po b/components/ILIAS/Init/lang/pwassist_nl.po new file mode 100644 index 000000000000..9d13194f62a7 --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_nl.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Wachtwoord assistentie" + +#, fuzzy +msgid "pwassist_disabled_no_access" +msgstr "Password assistance is not enabled. Please contact the system administration for further assistance: %s" + +msgid "pwassist_enter_email" +msgstr "Gelieve een e-mailadres op te geven en het formulier te vervolledigen .\\nILIAS zal dan een e-mail sturen. Deze mail bevat alle gebruikers die zich hebben ingeschreven met dat e-mailadres.\\nKies een gebruikersnaam en gebruik de wachtwoordservice om een nieuw wachtwoord te zoeken. Als je geen e-mail ontvangt kan je best contact opnemen met de cursusbeheerder." + +msgid "pwassist_enter_username_and_email" +msgstr "Geef de gebruikersnaam en het bijhorende e-mailadres op.\\nILIAS zal dan een e-mail sturen. Het bericht bevat een website, waar je een nieuw wachtwoord kan aanmaken." + +msgid "pwassist_enter_username_and_new_password" +msgstr "Geef de gebruikersnaam en het nieuwe wachtwoord in." + +msgid "pwassist_login_not_match" +msgstr "Gelieve een andere gebruikersnaam op te geven.\\nDe gebruikersnaam komt niet overeen met de gevraagde gebruikersnaam voor wachtwoordassistentie." + +msgid "pwassist_mail_body" +msgstr "Maak een nieuw wachtwoord voor je gebruikersaccount :\\n\\t%1$s\\n\\Dit bericht werd automatisch gegenereerd door ILIAS op \\t%2$s\\n\\nJij of iemand anders heeft gevraagd voor wachtwoordassistentie \"%4$s\".\\n\\n\\n\\n- Als je per ongeluk deze wachtwoordservice hebt geraadpleegd, verwijder dan deze mail.\\n\\n- Als je er zeker van bent dat je niet om wachtwoordassistentie gevraagd hebt op de ILIAS-server, contacteer de beheerder %5$s.\\n\\n- Als je wel gevraagd heeft om wachtwoord-assistentie doe dan het volgende:\\n\\n1. Open de browser.\\n\\n2. Geef het volgende adres in:\\n\\t%1$s\\n\\nbelangrijk: het adres is één regel.\\n\\n3. Op de webpagina, geef je een nieuw wachtwoord in.\\n\\nOpgelet omwille van veiligheidsreden, kan je deze stappen maar een maal uitvoeren. Hierna is de website niet meer geldig en moet je de wachtwoordassistentie opnieuw raadplegen op de ILIAS server." + +msgid "pwassist_mail_sent" +msgstr "Er is een bericht verzonden naar %1$s.\\n Gelieve je e-mail te controleren." + +#, fuzzy +msgid "pwassist_mail_sent_generic" +msgstr "A message has been sent to the email address defined in ILIAS.\\nPlease check your mail box." + +msgid "pwassist_mail_subject" +msgstr "ILIAS wachtwoord assistentie" + +msgid "pwassist_password_assigned" +msgstr "Het password is toegekend aan gebruiker \"%1$s\"." + +msgid "pwassist_session_expired" +msgstr "Gelieve dit formulier opnieuw in te vullen.\\nUWachtwoordassistentie is vervallen." + +msgid "pwassist_username_mail_body" +msgstr "dit zijn de actieve gebruikersnamen voor dit e-mailadres:\\n%s\\n\\nDeze mail is automatisch aangemaakt door ILIAS-server:\\n\\t%s\\n\\nJij of iemand anders heeft gevraagd voor hulp i.v.m. de gebruikersnaam '%s'.\\n\\nGelieve het volgende te controleren en volg de volgende handelingen::\\n\\n-Als je per ongeluk deze mail hebt aangevraagd:\\nVerwijder dan deze mail.\\n\\n-Ben je zeker dat je deze mail niet hebt aangevraagd:\\nContacteer %s.\\n\\n- Als je deze e-mail hebt aangevraagd volg dan de volgende handelingen::\\n\\n1. Open de internetbrowser.\\n\\n2. Geef de volgende url:\\n\\t%s Je browser toont nu de wachtwoordservice. Gebruik deze pagina met een van de gebruikersnamen en het bijhorende e-mailadres om het wachtwoord te ontvangen." + +#, fuzzy +msgid "unassist_disabled_no_access" +msgstr "Username assistance is not enabled. Please contact the system administration for further assistance: %s" diff --git a/components/ILIAS/Init/lang/pwassist_pl.po b/components/ILIAS/Init/lang/pwassist_pl.po new file mode 100644 index 000000000000..e4e75dda134c --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_pl.po @@ -0,0 +1,51 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Pomoc dla haseł" + +msgid "pwassist_disabled_no_access" +msgstr "Obsługa haseł nie jest aktywna. Skontaktuj się z administratorem systemu, aby otrzymać dodatkowe wsparcie: %s" + +msgid "pwassist_enter_email" +msgstr "Podaj adres e-mail i zatwierdź formularz.\\nILIAS wyśle e-mail na ten adres. E-mail zawiera nazwy wszystkich użytkowników, którzy zarejestrowali się na ten adres e-mail.\\nWybierz odpowiednią nazwę użytkownika i użyj serwisu haseł do utworzenia nowego hasła. Jeśli nie otrzymasz poczty e-mail z serwisu, skontaktuj się z administratorem kursu lub %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Wprowadź nazwę użytkownika i powiązane z nim konto e-mail w polach przedstawionych poniżej.\\nILIAS wyśle wiadomość na wskazany adres e-mail, która zawierać będzie link do strony www, gdzie będziesz mógł ustanowić nowe hasło.\\nW przypadku problemów ze zmianą hasła skontaktuj się z administratorem kursu lub wyślij e-mail do %1$s." + +msgid "pwassist_enter_username_and_new_password" +msgstr "W polach poniżej podaj nazwę użytkownika (login) i ustal nowe hasło." + +msgid "pwassist_login_not_match" +msgstr "Podaj inny login.\\nPodana nazwa użytkownika nie jest zgodna z nazwą użytkownika, dla której prosiłeś o hasło." + +msgid "pwassist_mail_body" +msgstr "Rejestracja nowego hasła dla konta użytkownika:\\n\\t%1$s\\n\\nTen komunikat został wygenerowany automatycznie przez serwer ILIAS:\\n\\t%2$s\\n\\nTy (lub osoba korzystająca z komputera o IP: %3$s) poprosiła o ustalenie nowego hasła do konta użytkownika: \"%4$s\".\\n\\nProszę dokładnie zapoznać się z warunkami wymienionymi poniżej i postępować zgodnie z:\\n\\n- Jeśli przypadkowo uruchomiłeś procedurę ustalania nowego hasła dla konta na serwerze ILIAS:\\nUsuń ten e-mail.\\n\\n- Jeżeli jesteś przekonany, iż nigdy nie zażądałeś zmiany hasła na serwerze ILIAS:\\nSkontaktuj się z %5$s.\\n\\n- Jeśli poprosiłeś o pomoc w zmianie hasła, postępuj zgodnie z:\\n\\n1. Otwórz przeglądarkę www.\\n\\n2. Wpisz poniższy adres w przeglądarce:\\n\\t%6$s\\n\\nUwaga: Adres jest pojedynczą linią. Jeśli widzisz adres w kilku liniach, oznacza to, iż twój program e-mailowy wstawił dodatkowe linie podziału.\\n\\n3. Na stronie www prezentowanej przez twoją przeglądarkę, ustal nowe hasło dla twojego konta w ILIAS.\\n\\nZe względu na bezpieczeństwo przedstawiona procedura zmiany hasła ważna jest tylko raz i w dodatku w ściśle określonym czasie. Następnie adres traci ważność, a całą procedurę należy przeprowadzić ponownie." + +msgid "pwassist_mail_sent" +msgstr "Wiadomość została wysłana do %1$s .\\nSprawdź swoją skrzynkę pocztową." + +msgid "pwassist_mail_sent_generic" +msgstr "A message has been sent to the email address defined in ILIAS.\\nPlease check your mail box." + +msgid "pwassist_mail_subject" +msgstr "Pomoc do haseł ILIAS" + +msgid "pwassist_password_assigned" +msgstr "Hasło zostało przydzielone użytkownikowi \"%1$s\"." + +msgid "pwassist_session_expired" +msgstr "Wypełnij ponownie ten formularz.\\nSesja pomocy do hasła minęła. To mogło nastąpić, ponieważ próbowałeś użyć odnośnika wysłanego do Ciebie więcej razy, lub minęło zbyt dużo czasu od chwili wysłania tego adresu do Ciebie." + +msgid "pwassist_username_mail_body" +msgstr "Znaleziono aktywną nazwę użytkownika dla tego adresu e-mail:\\n%s\\n\\nTa wiadomość została utworzona automatycznie przez serwer ILIAS:\\n\\t%s\\n\\nTy (lub ktoś z IP %s) żądał pomocy, bo zapomniał nazwy użytkownika dla adresu e-mail '%s'.\\n\\nSprawdź dane i wykonaj co jest sugerowane::\\n\\n-Jeśli żądałeś tej wiadomości:nNa końcu usuń tę wiadomość.\\n\\n-Jeśli jesteś pewien, że nigdy nie żądałeś tej wiadomości:\\nSkontaktuj się z %s.\\n\\n- Jeśli żądałeś tej wiadomości, wykonaj następujące czynności::\\n\\n1. Otwórz swoją przeglądarkę www.\\n\\n2. Wprowadź następujący url:\\n\\t%s\\n\\nUwaga: Adres jest pojedynczą linią. Jeśli ten adres widnieje w kilku wierszach, tzn. że twój klient pocztowy sam podzielił go na wiersze.\\n\\n3. Twoja przeglądarka pokazuje teraz serwis haseł. Użyj tej strony, wraz z jedną z nazw użytkownika i łącznie z adresem e-mail, uzyskasz nowe hasło." + +msgid "unassist_disabled_no_access" +msgstr "Obsługa nazw użytkownika nie jest aktywna. Skontaktuj się z administratorem systemu, aby otrzymać dodatkowe wsparcie: %s" diff --git a/components/ILIAS/Init/lang/pwassist_pt.po b/components/ILIAS/Init/lang/pwassist_pt.po new file mode 100644 index 000000000000..28d8024d97f4 --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_pt.po @@ -0,0 +1,51 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Comportamento padrão (certamente-mais positivo-indeciso-mais negativo-certamente que não)" + +msgid "pwassist_disabled_no_access" +msgstr "A assistência da palavra-passe não está ativada. Entre em contacto com o administrador do sistema para mais assistência: %s" + +msgid "pwassist_enter_email" +msgstr "Comportamento padrão (sim-não)" + +msgid "pwassist_enter_username_and_email" +msgstr "Comportamento padrão (sim-indeciso-não)" + +msgid "pwassist_enter_username_and_new_password" +msgstr "O sistema não conseguiu encontrar os dados do seu inquérito para o código de inquérito "%s". Verifique o código de inquérito que introduziu!" + +msgid "pwassist_login_not_match" +msgstr "Os dados de importação devem conter pelo menos um campo de ‘e-mail’" + +msgid "pwassist_mail_body" +msgstr "Os dados de importação devem conter pelo menos uma coluna de ‘e-mail’ com o título ‘e-mail’ na primeira linha e os endereços de e-mail nas linhas seguintes" + +msgid "pwassist_mail_sent" +msgstr "Foi enviada uma mensagem para %1$s.\\nPVerifique a sua caixa de correio." + +msgid "pwassist_mail_sent_generic" +msgstr "O valor máximo tem de ser superior ou igual ao valor mínimo e deve ser inferior ou igual ao número máximo de respostas." + +msgid "pwassist_mail_subject" +msgstr "Selecione exatamente %s resposta(s)." + +msgid "pwassist_password_assigned" +msgstr "A palavra-passe foi atribuída com sucesso ao utilizador \"%1$s\"." + +msgid "pwassist_session_expired" +msgstr "Selecione pelo menos %s resposta(s)." + +msgid "pwassist_username_mail_body" +msgstr "Estatística" + +msgid "unassist_disabled_no_access" +msgstr "A assistência do nome de utilizador não está ativada. Entre em contacto com o administrador do sistema para mais assistência: %s" diff --git a/components/ILIAS/Init/lang/pwassist_ro.po b/components/ILIAS/Init/lang/pwassist_ro.po new file mode 100644 index 000000000000..3214f0ef9e2c --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_ro.po @@ -0,0 +1,55 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Ajutor pentru parola" + +#, fuzzy +msgid "pwassist_disabled_no_access" +msgstr "Password assistance is not enabled. Please contact the system administration for further assistance: %s" + +msgid "pwassist_enter_email" +msgstr "Please enter an email address and submit the form. ILIAS will send an email to that address. The email contains all usernames which have registered this email address. Choose a suitable username and use the password service to retrieve a new password. If you do not retrieve any email by this service please contact your course admin or %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Introduceti un nume de utilizator si adresa de mail asociata in campurile de mai jos.\\nILIAS va trimite un mesaj la adresa mentionata. Mesajul contine adresa unei pagini de web, unde puteti introduce o parola noua pentru contul de utilizator.\\nIn cazul in care nu puteti desemna parola contului dumneavoastra de utilizator folosind aceasta metoda, contactati-l pe administratorul cursului sau trimiteti un e-mail la %1$s." + +msgid "pwassist_enter_username_and_new_password" +msgstr "Introduceti numele de utilizator si noua parola in campurile de mai jos." + +msgid "pwassist_login_not_match" +msgstr "Va rugam introduceti un alt nume de utilizator.\\nNumele de utilizator pe care l-ati introdus nu corespunde numelui de utilizator pentru cere ati cerut ajutor pentru parola." + +msgid "pwassist_mail_body" +msgstr "Inregistrati o noua parola pentru contul de utilizator :\\n\\t%1$s\\n\\nAcest mesaj a fost generat automat de catre serverul ILIAS \\n\\t%2$s\\n\\nDumneavoastra (sau cineva de la %3$s) a cerut ajutor pentru parola pentru contul de utilizator \"%4$s\".\\n\\nVa rugam verificati cu atentie conditiile exprimate mai jossi continuati conform cu ele:\\n\\n- Daca ati folosit ajutorul pentru parola al serverului ILIAS din intamplare:\\nStergeti acest mail.\\n\\n- Daca sunteti sigur/a ca nu ati cerut niciodata ajutorul pentru parola de pe acest server ILIAS :\\nVa rugam contactati %5$s.\\n\\n- Daca ati cerut ajutor pentru parole continuati dupa cum urmeaza:\\n\\n1. Deschideti browser-ul.\\n\\n2. Introduceti urmatoarea adresa in browser:\\n\\t%1$s\\n\\nImportant: Adresa trebuie sa fie pe un singur rand. Daca adresa este impartita in randuri multiple, programul dumneavoastra de e-mail a introdus spatii pentru.\\n\\n3. Pe pagina de web deschisa de browser, introduceti o noua parola pentru contul de utilizator.\\n\\nFiti atenti ca, din motive de securitate, puteti urma cei trei pasi de mai sus numai o data si intr-un timp limitat. Dupa aceea adresa nu mai este valabila si trebuie sa folositi ajutorul pentru parola de pe serverul ILIAS din nou." + +msgid "pwassist_mail_sent" +msgstr "A fost trimis un mesaj la %1$s.\\nVa rugam verificati mail-ul." + +#, fuzzy +msgid "pwassist_mail_sent_generic" +msgstr "A message has been sent to the email address defined in ILIAS.\\nPlease check your mail box." + +msgid "pwassist_mail_subject" +msgstr "Ajutor pentru Parola ILIAS" + +msgid "pwassist_password_assigned" +msgstr "Parola a fost desemnata catre utilizatorul \"%1$s\" cu succes." + +msgid "pwassist_session_expired" +msgstr "Va rugam completati din nou acest formular.\\nSesiunea de ajutor pentru parola dumneavoastra a expirat. Acest lucru s-a intamplat probabil pentru ca ati incercat sa folositi link-ul trimis mai mult de o singura data, sau pentru ca a trecut prea mult timp de cand v-a fost trimis." + +# 2006-5-8 --- Content changed +msgid "pwassist_username_mail_body" +msgstr "These are the active username found for the given email address:\\n%s\\n\\nThis message has been created automatically by the following ILIAS Server:\\n\\t%s\\n\\nYou (or somebody with IP %s) have requested support for forgotten usernames for the email address '%s'.\\n\\nPlease check the following and act as suggested::\\n\\n-You have requested this mail by accident:\\nDelete this email.\\n\\n-You are sure, that you never requested this email:\\nPlease contact %s.\\n\\n- If you requested this email, please proceed as follows::\\n\\n1. Start your internet browser.\\n\\n2. Enter the following url:\\n\\t%s\\n\\nImportant: The address is a single line. If you see this address split into multiple lines, then your email program has inserted these line breaks.\\n\\n3. Your Browser now shows the Password-Service. Use this page together with one of the usernames and the according email address to retrieve a new password. " + +#, fuzzy +msgid "unassist_disabled_no_access" +msgstr "Username assistance is not enabled. Please contact the system administration for further assistance: %s" diff --git a/components/ILIAS/Init/lang/pwassist_ru.po b/components/ILIAS/Init/lang/pwassist_ru.po new file mode 100644 index 000000000000..2a23d7a02784 --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_ru.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Ассистент паролей" + +#, fuzzy +msgid "pwassist_disabled_no_access" +msgstr "Password assistance is not enabled. Please contact the system administration for further assistance: %s" + +msgid "pwassist_enter_email" +msgstr "Please enter an email address and submit the form.\\nILIAS will send an email to that address. The email contains all usernames which have registered this email address.\\nChoose a suitable username and use the password service to retrieve a new password. If you do not retrieve any email by this service please contact your course admin or %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Введите имя пользователя и связанный с ним email адрес в поля, представленные ниже.\\nСистема Илиас отошлет сообщение по этому адресу. Сообщение будет содержать адрес веб-страницы, где вы сможете задать новой пароль для учетных записей пользователя.\\nВ случае неудачи, свяжитесь с администратором курса или пошлите сообщение по адресу %1$s." + +msgid "pwassist_enter_username_and_new_password" +msgstr "Задайте имя пользователя и новый пароль в поля ниже." + +msgid "pwassist_login_not_match" +msgstr "Пожалуйста, введите другое имя пользователя.\\nВы задали имя пользователя, отличающееся от имени, заданного в ассистене паролей." + +msgid "pwassist_mail_body" +msgstr "Зарегистрирован новый пароль для вашего учетные записи:\\n\\t%1$s\\n\\nЭто сообщение было создано автоматически на сервере Илиас \\n\\t%2$s\\n\\nВы (или кто-то с именем %3$s) использовали ассистент паролей для учетной записи \"%4$s\".\\n\\nПожалуйста, внимательно проверьте условия, приведенные ниже, и поступите соответственно:\\n\\n- Если вы пользовались ассистентом паролей Илиас-сервера:\\nУдалите это письмо.\\n\\n- Если случилось так, что вы никогда не использовали ассистента паролей: Пожалуйста, свяжитесь с %5$s.\\n\\n- Если вы запрашивали ассистента паролей, пожалуйста, выполните следующее:\\n\\n1. Откройте ваш браузер.\\n\\n2. Введите следующий адрес:\\n\\t%1$s\\n\\nВажно: адрес должен быть в одну строку. Если он представлен в виде двух и более строк, ваша почтовая программа разделила его.\\n\\n3. На появившейся веб-странице задайте новый пароль.\\n\\nЗаметьте, что из соображений секретности, вы должны в точности выполнить три шага при лимитированном времени. Потом адрес будет недействителен, и, вы не сможете возпользоваться ассистентом паролей снова." + +msgid "pwassist_mail_sent" +msgstr "Сообщение было отослано в %1$s.\\nПожалуйста, проверьте ваш почтовый ящик." + +#, fuzzy +msgid "pwassist_mail_sent_generic" +msgstr "A message has been sent to the email address defined in ILIAS.\\nPlease check your mail box." + +msgid "pwassist_mail_subject" +msgstr "Ассистент паролей Илиас" + +msgid "pwassist_password_assigned" +msgstr "Для пользователя \"%1$s\" пароль был успешно изменен." + +msgid "pwassist_session_expired" +msgstr "Пожалуйста, заполните форму снова.\\nСессия вашего ассистента паролей закончилась. Это могло случиться из-за того, что вы пытались воспользоваться полученным по почте адресом не один раз или из-за того, что прошло слишком много времени с момента получения письма." + +msgid "pwassist_username_mail_body" +msgstr "These are the active username found for the given email address:\\n%s\\n\\nThis message has been created automatically by the following ILIAS Server:\\n\\t%s\\n\\nYou (or somebody with IP %s) have requested support for forgotten usernames for the email address '%s'.\\n\\nPlease check the following and act as suggested::\\n\\n-You have requested this mail by accident:\\nDelete this email.\\n\\n-You are sure, that you never requested this email:\\nPlease contact %s.\\n\\n- If you requested this email, please proceed as follows::\\n\\n1. Start your internet browser.\\n\\n2. Enter the following url:\\n\\t%s\\n\\nImportant: The address is a single line. If you see this address split into multiple lines, then your email program has inserted these line breaks.\\n\\n3. Your Browser now shows the Password-Service. Use this page together with one of the usernames and the according email address to retrieve a new password." + +#, fuzzy +msgid "unassist_disabled_no_access" +msgstr "Username assistance is not enabled. Please contact the system administration for further assistance: %s" diff --git a/components/ILIAS/Init/lang/pwassist_sk.po b/components/ILIAS/Init/lang/pwassist_sk.po new file mode 100644 index 000000000000..f20c037af89f --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_sk.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Asistence hesla" + +#, fuzzy +msgid "pwassist_disabled_no_access" +msgstr "Password assistance is not enabled. Please contact the system administration for further assistance: %s" + +msgid "pwassist_enter_email" +msgstr "Vložte prosím e-mailovou adresu a formulář odešlete.\\nILIAS zašle e-mail na tuto adresu. Tento E-mail bude obsahovat všechna uživatelská jména, která jsou na tuto e-mailovou adresu registrována.\\nVyberte si příslušné jméno uživatele a použijte službu hesla k získání nového hesla. Pokud neobdržíte žádný e-mail od této služby, kontaktujte prosím Vašeho správce kurzu, nebo odešlete e-mail %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Vložte prosím jméno uživatele a asociovanou e-mailovou adresu v polích zobrazených níže.\\nILIAS zašle zprávu na tuto e-mailovou adresu. Tato zpráva obsahuje adresu webové stránky, kde můžete vložit nové heslo pro Váš uživatelský účet.\\nV případě, že nejste schopen(a) přiřadit heslo k Vašemu uživatelskému účtu s využitím tohoto formuláře, kontaktujte prosím Vašeho správce kurzu, nebo odešlete e-mail %1$s." + +msgid "pwassist_enter_username_and_new_password" +msgstr "Vložte jméno uživatele a nové heslo do polí níže." + +msgid "pwassist_login_not_match" +msgstr "Vložte prosím jiné uživatelské jméno.\\nUživatelské jméno, které jste vložili, neodpovídá uživatelskému jménu, na které jste byli dotazováni asistencí hesla." + +msgid "pwassist_mail_body" +msgstr "Zaregistrujte nové heslo pro Váš uživatelský účet:\\n\\t%1$s\\n\\nTato zpráva byla vygenerována automaticky serverem ILIAS\\n\\t%2$s\\n\\nVy (nebo někdo %3$s) požádal o pomoc asistenci hesla pro uživatelský účet \"%4$s\".\\n\\nZkontrolujte prosím pečlivě podmínky vypsané níže, a postupujte následovně:\\n\\n- Pokud jste využil(a) formulář asistence hesla na serveru ILIAS při závadě:\\nSmažte tento e-mail.\\n\\n- Pokud jste si jist(a), že jste nikdy o asistenci hesla nežádal(a) na serveru ILIAS:\\nKontaktujte prosím %5$s.\\n\\n- Pokud jste požádal(a) o asistenci hesla, postupujte prosím následovně:\\n\\n1. Spusťte svůj internetový prohlížeč.\\n\\n2. Vložte do Vašeho prohlížeče následující adresu:\\n t%1$s\\n\\nDůležité: Tato adresa je jednořádková. Pokud ji vidíte na více řádcích, pak zalomení řádků vložil váš e-mailový program.\\n\\n3. Na webové stránce zobrazené ve Vašem prohlížeči, vložte nové heslo pro Váš uživatelský účet.\\n\\nPamatujte prosím, že z bezpečnostních důvodů můžete tyto tři kroky provést pouze jednou a to v omezeném čase. Jinak tato adresa zůstane nedostupná, a Vy budete muset použít stránku asistenta hesla serveru ILIAS znovu." + +msgid "pwassist_mail_sent" +msgstr "Zpráva byla zaslána %1$s.\\nZkontrolujte prosím svou poštovní schránku." + +#, fuzzy +msgid "pwassist_mail_sent_generic" +msgstr "A message has been sent to the email address defined in ILIAS.\\nPlease check your mail box." + +msgid "pwassist_mail_subject" +msgstr "Asistence hesla ILIAS" + +msgid "pwassist_password_assigned" +msgstr "Heslo bylo úspěšně přiřazeno uživateli \"%1$s\"." + +msgid "pwassist_session_expired" +msgstr "Vyplňte prosím tento formulář znovu.\\nVaše sezení s asistencí hesla vypršelo. To se mohlo stát, protože jste se pokusil(a) použít spojení na které byl odeslán e-mail více, než jednou, nebo protože uplynulo příliš mnoho času od okamžiku zaslání tohoto spojení k Vám." + +msgid "pwassist_username_mail_body" +msgstr "To je aktivní jméno uživatele nalezené pro danou e-mailovou adresu:\\n%s\\n\\nTato zpráva byla vytvořena automaticky serverem ILIAS:\\n\\t%s\\n\\nVy (nebo někdo s IP %s) požádal o podporu pro zapomenuté jméno uživatele pro emailovou adresu '%s'.\\n\\nZkontrolujte prosím následující a postupujte podle doporučení::\\n\\n-Vy jste požádal(a) o tento e-mail při závadě:\\nSmažte tento e-mail.\\n\\n-Pokud jste si jist(a), že jste nikdy o tento e-mail nežádal(a):\\nKontaktujte prosím %s.\\n\\n- Pokud jste žádal(a) tento e-mail, postupujte prosím následovně::\\n\\n1. Spusťte svůj internetový prohlížeč.\\n\\n2. Vložte následující URL:\\n\\t%s\\n\\nDůležité: Tato adresa je jednořádková. Pokud ji vidíte rozdělenou na více řádků, pak tyto zalomení řádků vkládá Váš e-mailový program.\\n\\n3. Váš prohlížeč nyní zobrazil službu hesla. Využijte tuto stránku s jedním z uživatelských jmen a příslušnou e-mailovou adresou k získání nového hesla." + +#, fuzzy +msgid "unassist_disabled_no_access" +msgstr "Username assistance is not enabled. Please contact the system administration for further assistance: %s" diff --git a/components/ILIAS/Init/lang/pwassist_sl.po b/components/ILIAS/Init/lang/pwassist_sl.po new file mode 100644 index 000000000000..5ef47d10ee40 --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_sl.po @@ -0,0 +1,51 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Pomoč pri geslu" + +msgid "pwassist_disabled_no_access" +msgstr "Pomoč pri geslu ni aktivirana. Za nadaljnjo pomoč se obrnite na sistemskega administratorja: %s" + +msgid "pwassist_enter_email" +msgstr "Vnesite e-poštni naslov in kliknite na pošlji. ILIAS bo poslal e-pošto na ta naslov. E-pošta vsebuje vsa uporabniška imena, ki imajo v profilu vnešen e-poštni naslov. Izberite ustrezno uporabniško ime in uporabite funkcijo \"Pozabljeno geslo\", da vam bo poslano novo geslo. Če prek te funkcije ne prejmete e-pošte, o tem obvestite vodstvo tečaja ali pošljite e-pošto na %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Vnesite svoje uporabniško ime in pripadajoč e-poštni naslov ter kliknite na pošlji. ILIAS bo poslal e-pošto na ta naslov. E-pošta vsebuje naslov spletne strani, kjer lahko vnesete novo geslo za svoj uporabniški račun. Če prek te funkcije ne morete nastaviti gesla, o tem obvestite vodstvo tečaja ali pošljite e-pošto na %1$s." + +msgid "pwassist_enter_username_and_new_password" +msgstr "Vnesite uporabniško ime, za katero ste zahtevali pomoč pri geslu in dodeljeno geslo." + +msgid "pwassist_login_not_match" +msgstr "Vnesite drugo uporabniško ime. Vneseno uporabniško ime se ne ujema z uporabniškim imenom, za katerega ste zahtevali pomoč pri geslu." + +msgid "pwassist_mail_body" +msgstr "Vnesite novo geslo za svoj uporabniški račun: %1$ To sporočilo je samodejno ustvarila namestitev ILIAS: %2$s Vi (ali nekdo z naslovom %3$s) ste vprašali za pomoč pri geslu za uporabniški račun \"%4$s\". Pozorno preverite spodnje primere in nadaljujte ustrezno: -Če ste pomoč pri geslu na strežniku uporabili pomotoma: Izbrišite to sporočilo. -Če ste prepričani, da še nikoli niste zahtevali pomoči pri geslu na tem strežniku ILIAS: Kontaktirajte %5$s. -Če ste zahtevali pomoč pri geslu: Nadaljujte kot sledi: 1. Odprite svoj brskalnik. 2. V brskalnik vnesite naslednji naslov: %6$s Pomembno: Naslov je sestavljen iz ene same vrstice. Če vidite, da je naslov razdeljen na več vrstic, je vaš e-poštni program vstavil te prelome vrstic. 3. Brskalnik zdaj prikazuje stran, kjer lahko dodelite novo geslo za uporabniški račun. Bodite pozorni na: Upoštevajte, da lahko zgornje tri korake iz varnostnih razlogov izvedete natanko enkrat in le v omejenem času. Po tem naslov postane neveljaven in morate znova zahtevati pomoč pri geslu na strežniku ILIAS." + +msgid "pwassist_mail_sent" +msgstr "ILIAS je poslal e-pošto na naslov %1$s. Nadaljnja navodila najdete v tem sporočilu." + +msgid "pwassist_mail_sent_generic" +msgstr "ILIAS je poslal e-pošto na shranjen naslov. Nadaljnja navodila najdete v tem sporočilu." + +msgid "pwassist_mail_subject" +msgstr "Pomoč pri geslu ILIAS" + +msgid "pwassist_password_assigned" +msgstr "Geslo je uspešno dodeljeno uporabniškemu imenu %1$s." + +msgid "pwassist_session_expired" +msgstr "Ponovno izpolnite obrazec. Vaš čas za izvedbo pomoči pri geslu je potekel. To je lahko zato, ker ste več kot enkrat poskušali uporabiti povezavo, ki vam je bila poslana po e-pošti, ali ker je minilo preveč časa, odkar vam je bila poslana." + +msgid "pwassist_username_mail_body" +msgstr "To so aktivna uporabniška imena, ki jih ima ILIAS na voljo za dani e-poštni naslov: %s To sporočilo je samodejno ustvaril strežnik ILIAS: %s Vi (ali nekdo z naslovom %s) ste zahtevali seznam uporabniških imen za e-poštni naslov '% s'. Skrbno preverite naslednje primere in ravnajte, kot je predlagano: -Pomotoma ste na strežniku zahtevali pomoč pri uporabniškem imenu: Izbrišite to e-pošto. -Prepričani ste, da na navedenem strežniku ILIAS nikoli niste zahtevali pomoči pri uporabniškem imenu: Kontaktirajte %s. - Zahtevali ste pomoč pri uporabniškem imenu. Nadaljujte kot sledi: 1. Odprite svoj brskalnik. 2. V brskalnik vnesite naslednji naslov: %s Pomembno: Naslov je sestavljen iz ene same vrstice. Če vidite, da je naslov razdeljen na več vrstic, je vaš e-poštni program vstavil te prelome vrstic. 3. Vaš brskalnik zdaj prikazuje stran za pomoč pri uporabniškem geslu. Uporabite to funkcijo, da vam bo v kombinaciji z uporabniškim imenom in e-poštnim naslovom poslano novo geslo." + +msgid "unassist_disabled_no_access" +msgstr "Pomoč pri uporabniškem imenu ni aktivirana. Za nadaljnjo pomoč se obrnite na sistemskega administratorja: %s" diff --git a/components/ILIAS/Init/lang/pwassist_sq.po b/components/ILIAS/Init/lang/pwassist_sq.po new file mode 100644 index 000000000000..03f76ee088d0 --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_sq.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Ndihma për parullë" + +#, fuzzy +msgid "pwassist_disabled_no_access" +msgstr "Password assistance is not enabled. Please contact the system administration for further assistance: %s" + +msgid "pwassist_enter_email" +msgstr "Please enter an email address and submit the form.\\nILIAS will send an email to that address. The email contains all usernames which have registered this email address.\\nChoose a suitable username and use the password service to retrieve a new password. If you do not retrieve any email by this service please contact your course admin or %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Jepni emrin identifikues dhe e-mail adresën përkatëse në fushat e mëposhtme.\\n ILIAS do të ju dërgon një porosi në atë e-mail. Porosia do të përmbaj një adresë të faqes ku mund të jepni parullën e re për llogarinë tuaj.\\nNë rast se keni probleme gjatë caktimit të parullës së re, kontaktoni administratorin e kursit ose dërgoni e-mail në %1$s." + +msgid "pwassist_enter_username_and_new_password" +msgstr "Jepni emrin identifikues dhe parullën e re më poshtë." + +msgid "pwassist_login_not_match" +msgstr "Ju lutem zgjedhni emër identifikues tjetër.\\nEmri identifikues që keni dhënë tash nuk është i njëjtë me atë të cilin e keni dhënë kur keni kërkuar ndihmë për parullë." + +msgid "pwassist_mail_body" +msgstr "Regjistroni parullë të re për llogarinë tuaj shfrytëzuese:\\n\\t%1$s\\n\\nKjo porosi është gjeneruar automatikisht nga serveri i ILIAS-it\\n\\t%2$s\\n\\nJu (ose dikush në %3$s) ka kërkuar ndihmë për parullë për llogarinë shfrytëzuese \\%4$s.\\n\\nJu lutem shikoni me kujdes kushtet e më poshtme dhe veproni në përputhje sipas rrethanave:\\n\\n- Nëse keni përdorur ndihmën për parullë në serverin e ILIAS aksidentalisht:\\nFshini këtë e-mail.\\n\\n- Nëse jeni të sigurt se kurrë nuk keni përdorur ndihmën për parullë në ILIAS server:\\n Ju lutem kontaktoni %5$s.\\n\\n- Nëse keni kërkuar nihmën për parullë, ju lutem veproni si më vijim:\\n\\n1. Aktivizoni Brouserin(shfletuesin e faqeve).\\n\\n2.Shënoni adresën vijuese në brouser:\\n\\t%1$s\\n\\nMe rëndësi: Adresa është në një vij të vetme të pandarë. Nëse kjo adresë është e ndarë në disa pjesë, atëherë programi juaj për e-mail ka këto vendosur vija të ndarjes.\\n\\n3. Në web faqen e hapur me brouserin tuaj, jepni parullë të re për llogarin tuaj shfrytëzuese.\\n\\nJu lutem vëni re se, për shkaqe sigurie, mund të kaloni nëpër këto tre hapa saktësisht vetëm një herë dhe për afat kohe të kufizuar. Mëpas adresa shëndrrohet në jovalide, dhe ju duhet të përdorni përsëri ndihmën për parullë." + +msgid "pwassist_mail_sent" +msgstr "Një porosi është dërguar tek %1$s.\\n Ju lutem kontrolloni kutinë postare." + +#, fuzzy +msgid "pwassist_mail_sent_generic" +msgstr "A message has been sent to the email address defined in ILIAS.\\nPlease check your mail box." + +msgid "pwassist_mail_subject" +msgstr "Ndihma për Parullë e ILIAS" + +msgid "pwassist_password_assigned" +msgstr "Parulla është vendosur më sukses për shfrytëzuesin \"%1$s\"" + +msgid "pwassist_session_expired" +msgstr "Ju lutem kompletoni formën përsëri.\\n Sesioni juaj për ndihmë për parullë ka skaduar. Kjo ka mund të ndodhë, për arsye se keni shfrytëzuar web adresën që ju është dërguar më e-mail më shumë se një herë, ose për arsye se ka kaluar shumë kohë që nga koha kur keni pranuar adresën përmes e-mailit." + +msgid "pwassist_username_mail_body" +msgstr "These are the active username found for the given email address:\\n%s\\n\\nThis message has been created automatically by the following ILIAS Server:\\n\\t%s\\n\\nYou (or somebody with IP %s) have requested support for forgotten usernames for the email address '%s'.\\n\\nPlease check the following and act as suggested::\\n\\n-You have requested this mail by accident:\\nDelete this email.\\n\\n-You are sure, that you never requested this email:\\nPlease contact %s.\\n\\n- If you requested this email, please proceed as follows::\\n\\n1. Start your internet browser.\\n\\n2. Enter the following url:\\n\\t%s\\n\\nImportant: The address is a single line. If you see this address split into multiple lines, then your email program has inserted these line breaks.\\n\\n3. Your Browser now shows the Password-Service. Use this page together with one of the usernames and the according email address to retrieve a new password." + +#, fuzzy +msgid "unassist_disabled_no_access" +msgstr "Username assistance is not enabled. Please contact the system administration for further assistance: %s" diff --git a/components/ILIAS/Init/lang/pwassist_sr.po b/components/ILIAS/Init/lang/pwassist_sr.po new file mode 100644 index 000000000000..08ea76b25162 --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_sr.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Pomoc oko lozinke" + +#, fuzzy +msgid "pwassist_disabled_no_access" +msgstr "Password assistance is not enabled. Please contact the system administration for further assistance: %s" + +msgid "pwassist_enter_email" +msgstr "Please enter an email address and submit the form.\\nILIAS will send an email to that address. The email contains all usernames which have registered this email address.\\nChoose a suitable username and use the password service to retrieve a new password. If you do not retrieve any email by this service please contact your course admin or %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Unesite korisnicko ime i povezane email adrese u polja prikazana dole.\\nILIAS ce oslati poruku na tu email adresu. Poruka sadrži adresu za web stranicu gde možete uneti novu lozinku za korisnicki nalog.\\nU slucaju da niste u mogucnosti da prijavite lozinku za vaš korisnicki nalog koristeci ovu formu, kontaktirajte vašeg administratora kursa ili pošaljite email %1$s." + +msgid "pwassist_enter_username_and_new_password" +msgstr "Unesite korisnicko ime i novu lozinku zu polja za unos." + +msgid "pwassist_login_not_match" +msgstr "Molimo unesite drugo korisnicko ime.\\nKorisnicko ime koje ste uneli ne odgovara korisnickom imenu za koje ste tražili pomoc oko lozinke." + +msgid "pwassist_mail_body" +msgstr "Registrujte novu lozinku za vaš korisnicki nalog.\\n\\t%1$s\\n\\nOva poruka je automatski generisana uz pomoc ILIAS servera\\n\\t%2$s\\n\\nVi (ili neko na %3$s) ste tražili pomoc oko lozinke za korisnicki nalog \"%4$s\".\\n\\n Molimo pažljivo proverite dole navedene uslove u u skladu postupite:\\n\\n- Ukoliko ste koristili model pomoci oko lozinke ILIAS servera slucajno:\\nObrišite ovu poruku.\\n\\n-Ako ste sigurni da nikada necete tražiti pomoc oko lozinke na ILIAS serveru:\\nMolimo obratite se %5$s. \\n\\n Ako ste tražili pomoc oko lozinke, molimo postupite na sledeci nacin:\\n\\n1. Otvorite vaš pretraživac.\\n\\n2. Unesite sledecu adresu u vaš pretraživac.\\n\\t%1$s\\n\\n Važno:Adresa je jedan red. Ukoliko vidite ovu adresu razdvojenu u više redova onda je vaš program ubacio razmeke izmedu redova.\\n\\n3. Na web stranici prikazanoj od strane vašeg pretraživaca unesite novu lozinku za vaš korisnicki nalog.\\n\\nMolimo vas da obratite pažnju da, iz bezbednosnih razloga, možete izvesti samo tri koraka tacno jedanput i to u ogranicenom vremenu. Posle toga adresa postaje nevažeca i morate ponovo koristiti pomoc oko lozinke na ILIAS serveru." + +msgid "pwassist_mail_sent" +msgstr "Poruka je poslata %1$s.\\nMolimo proverite vaše poštansko sanduce." + +#, fuzzy +msgid "pwassist_mail_sent_generic" +msgstr "A message has been sent to the email address defined in ILIAS.\\nPlease check your mail box." + +msgid "pwassist_mail_subject" +msgstr "ILIAS pomoc oko lozinke" + +msgid "pwassist_password_assigned" +msgstr "Lozinka je uspešno dodeljena korisniku \"%1$s\"." + +msgid "pwassist_session_expired" +msgstr "Molimo ponovo popune obrazac.\\nVaša sesija pomoci oko lozinke je istekla. Ovo se možda dogodili zato što ste pokušali da iskoristite vezu koja vam je poslata elektronskom poštom više od jednog puta ili zato što je prošlo previše vremena od kad vam je veza poslata." + +msgid "pwassist_username_mail_body" +msgstr "These are the active username found for the given email address:\\n%s\\n\\nThis message has been created automatically by the following ILIAS Server:\\n\\t%s\\n\\nYou (or somebody with IP %s) have requested support for forgotten usernames for the email address '%s'.\\n\\nPlease check the following and act as suggested::\\n\\n-You have requested this mail by accident:\\nDelete this email.\\n\\n-You are sure, that you never requested this email:\\nPlease contact %s.\\n\\n- If you requested this email, please proceed as follows::\\n\\n1. Start your internet browser.\\n\\n2. Enter the following url:\\n\\t%s\\n\\nImportant: The address is a single line. If you see this address split into multiple lines, then your email program has inserted these line breaks.\\n\\n3. Your Browser now shows the Password-Service. Use this page together with one of the usernames and the according email address to retrieve a new password." + +#, fuzzy +msgid "unassist_disabled_no_access" +msgstr "Username assistance is not enabled. Please contact the system administration for further assistance: %s" diff --git a/components/ILIAS/Init/lang/pwassist_sv.po b/components/ILIAS/Init/lang/pwassist_sv.po new file mode 100644 index 000000000000..175b39cce221 --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_sv.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Stöd för lösenord" + +msgid "pwassist_disabled_no_access" +msgstr "Stöd för lösenord är inte aktiverat. Kontakta en systemadministratör för ytterligare support" + +msgid "pwassist_enter_email" +msgstr "Ange din e-postadress här. ILIAS kommer att skicka en lista över alla relaterade inloggningsnamn till denna adress och informera dig om lösenordssupport. Om du inte får något e-postmeddelande, meddela din kursadministratör eller skicka ett e-postmeddelan" + +msgid "pwassist_enter_username_and_email" +msgstr "Ange ett inloggningsnamn och motsvarande e-postadress. ILIAS kommer att skicka instruktioner för att ange ett nytt lösenord till denna adress. Om du inte får något e-postmeddelande, meddela din kursadministratör eller skicka ett e-postmeddelande till %1$" + +# Modifierad som en del av jämställdhetsintegreringsaktiviteter för ILIAS 8 +msgid "pwassist_enter_username_and_new_password" +msgstr "Ange inloggningsnamn och tilldela ett nytt lösenord." + +# Modifierad som en del av jämställdhetsintegreringsaktiviteter för ILIAS 8 +msgid "pwassist_login_not_match" +msgstr "Det inloggningsnamn du angav stämmer inte överens med det inloggningsnamn som du begärde lösenordssupport för. Vänligen ange rätt inloggningsnamn." + +msgid "pwassist_mail_body" +msgstr "Ange ett nytt lösenord för ditt inloggningskonto %1$s

Detta meddelande genererades automatiskt av ILIAS-installationen" + +msgid "pwassist_mail_sent" +msgstr "ILIAS har skickat ett e-postmeddelande till adressen %1$s, om det finns ett ILIAS-konto med det angivna inloggningsnamnet och e-postadressen. Ytterligare instruktioner finns i detta e-postmeddelande." + +msgid "pwassist_mail_sent_generic" +msgstr "ILIAS har skickat ett e-postmeddelande till den deponerade adressen. Du hittar ytterligare instruktioner i detta mail." + +msgid "pwassist_mail_subject" +msgstr "ILIAS lösenord stöd" + +msgid "pwassist_password_assigned" +msgstr "Lösenordet för inloggningsnamnet %1$s sparades framgångsrikt." + +msgid "pwassist_session_expired" +msgstr "Vänligen fyll i formuläret igen. Tiden för att utföra lösenordssupport har löpt ut. Det kan bero på att du har försökt använda den adress som skickades till dig mer än en gång, eller att det har gått för lång tid sedan adressen skickades till dig." + +msgid "pwassist_username_mail_body" +msgstr "Detta är de aktiva inloggningsnamn som tilldelats denna e-postadress i ILIAS." + +msgid "unassist_disabled_no_access" +msgstr "Stöd för inloggningsnamn är inte aktiverat. Kontakta en systemadministratör för ytterligare support" diff --git a/components/ILIAS/Init/lang/pwassist_tr.po b/components/ILIAS/Init/lang/pwassist_tr.po new file mode 100644 index 000000000000..6907aaeb9ce8 --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_tr.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Şifre Yardımı" + +#, fuzzy +msgid "pwassist_disabled_no_access" +msgstr "Password assistance is not enabled. Please contact the system administration for further assistance: %s" + +msgid "pwassist_enter_email" +msgstr "e-posta adresinizi girin ve. \\ Nilias bu adrese bir e-posta göndereceğiz formu doldurarak gönderiniz. E-posta Bu e-posta adresi kayıtlı tüm kullanıcı adlarını içerir. \\ NChoose uygun bir kullanıcı adı ve yeni bir şifre almak için şifre servisini kullanmak. Bu hizmet ile herhangi bir e-posta almak istemiyorsanız kurs yöneticisi veya% 1 $ s ile iletişim kurunuz." + +msgid "pwassist_enter_username_and_email" +msgstr "aşağıda gösterilen alanlara bir kullanıcı adı ve ilişkili e-posta adresini girin. \\ Nilias bu e-posta adresine bir mesaj gönderecektir. Mesaj bir web sayfası için bir adres içerir, nereye kullanıcı hesabı için yeni bir parola girebilirsiniz. \\ Nin durumunda bu formu kullanarak kullanıcı hesabı için bir parola atamak mümkün değildir, kurs yönetimi ile temas ya da bir e-posta göndermek % 1 $ s için." + +msgid "pwassist_enter_username_and_new_password" +msgstr "kullanıcı adınızı ve aşağıda alanlarına yeni parolayı girin." + +msgid "pwassist_login_not_match" +msgstr "başka bir kullanıcı adı giriniz. Girdiğiniz \\ nBu kullanıcı adı şifre yardımı için sormuştu hangi kullanıcı adı eşleşmiyor." + +msgid "pwassist_mail_body" +msgstr "$ S \\ n \\ nBu mesaj ILIAS sunucu tarafından otomatik olarak oluşturuldu \\ n \\ t% 2 $ s \\ n \\ nBu (veya% 3 birisiyle $ \\ n \\ t% 1: kullanıcı hesabınız için yeni bir şifre Kayıt s) \"% 4 $ s\" kullanıcı hesabı için parola yardım istedi \\ n \\ nLütfen aşağıda sıralanan koşulları dikkatle kontrol edin ve buna göre hareket edin:. Eğer ILIAS sunucudaki şifre yardımı formu kullanılmıştır \\ n \\ n-varsa kaza: \\ nDelete bu mail \\ n \\ n-Eğer bu ILIAS sunucuda şifre yardım istedi asla, kesin:.. şifre yardım istedi $ s \\ n \\ n-Eğer \\ nLütfen iletişim% 5, şu şekilde hareket edin: \\ n \\ n1. Tarayıcınızı açın. \\ N \\ n2. Tarayıcınızda aşağıdaki adresi girin: \\ n \\ t% 6 $ s \\ n \\ nImportant: adresi tek bir çizgidir. Eğer birden fazla satır içine bu adresi bölünmüş görürseniz, ardından e-posta programı bu satır sonlarını eklemiştir. \\ N \\ n3. Tarayıcınız tarafından gösterilen web sayfasında, kullanıcı hesabınız için yeni bir şifre güvenlik nedenleriyle, sadece tam bir kez ve yalnızca sınırlı bir süre için yukarıdaki üç adımı gerçekleştirebilirsiniz. \\ N \\ nLütfen not girin. Daha sonra adres geçersiz olur ve tekrar ILIAS sunucuda şifre yardımı sayfasını kullanmak zorunda." + +msgid "pwassist_mail_sent" +msgstr "Bir mesaj% 1 $ s gönderildi. \\ NLütfen posta kutusunu işaretleyin." + +#, fuzzy +msgid "pwassist_mail_sent_generic" +msgstr "A message has been sent to the email address defined in ILIAS.\\nPlease check your mail box." + +msgid "pwassist_mail_subject" +msgstr "ILIAS Şifre Yardımı" + +msgid "pwassist_password_assigned" +msgstr "parola başarıyla kullanıcı \"% 1 $ s\" atanmıştır." + +msgid "pwassist_session_expired" +msgstr "yine bu formu doldurunuz. \\ NDışa şifre yardım oturumunuzun süresi doldu. Eğer birden fazla kez size e-posta ile gönderilen linki kullanmaya çalıştım, çünkü bu olmuş olabilir, veya bağlantıyı size gönderilen beri çok zaman geçti çünkü." + +msgid "pwassist_username_mail_body" +msgstr "Bu verilen e-posta adresi için bulunan aktif kullanıcı adı: \\ n% s \\ n \\ nBu mesajı şu ILIAS Server tarafından otomatik olarak oluşturulmuştur \\ n \\ t% s \\ n \\ nBu (veya IP% olan biri ler) e-posta adresi '% s' için unutulmuş kullanıcı için destek talep etmiş önerdiği gibi \\ n \\ nLütfen aşağıdaki ve hareket kontrol :: \\ n \\ n-İstemeden Bu e-posta istedi:. \\ nDelete bu E-posta \\ n \\ n-Sen bu e-posta talep asla, eminiz:.. \\ nLütfen temas% s aşağıdaki gibi \\ n \\ n-Eğer bu e-posta talep, lütfen devam :: \\ n \\ n1. Internet tarayıcınızı açın. \\ N \\ n2. Aşağıdaki url girin: \\ n \\ t% s \\ n \\ nImportant: adresi tek bir çizgidir. Eğer birden fazla satır içine bu adresi bölünmüş görürseniz, ardından e-posta programı bu satır sonlarını eklemiştir. \\ N \\ n3. Tarayıcınız artık Şifre-Servis gösterir. Adlarını biri ve yeni bir şifre almak için uygun e-posta adresi ile birlikte bu sayfayı kullanın." + +#, fuzzy +msgid "unassist_disabled_no_access" +msgstr "Username assistance is not enabled. Please contact the system administration for further assistance: %s" diff --git a/components/ILIAS/Init/lang/pwassist_uk.po b/components/ILIAS/Init/lang/pwassist_uk.po new file mode 100644 index 000000000000..f5a73e7ac62b --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_uk.po @@ -0,0 +1,57 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: pwassist\n" + +#, fuzzy +msgid "password_assistance" +msgstr "Password Assistance" + +#, fuzzy +msgid "pwassist_disabled_no_access" +msgstr "Password assistance is not enabled. Please contact the system administration for further assistance: %s" + +#, fuzzy +msgid "pwassist_enter_email" +msgstr "Please enter an email address and submit the form.\\nILIAS will send an email to that address. The email contains all usernames which have registered this email address.\\nChoose a suitable username and use the password service to retrieve a new password. If you do not retrieve any email by this service please contact your course admin or %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Введіть ім'я користувача та відповідну e-mail адресу в поля показані нижче.\\nILIAS відішле повідомлення на цю e-mail адресу. Повідомлення містить адресу веб сторінки, де ви можете ввести новий пароль для акаунту користувача." + +msgid "pwassist_enter_username_and_new_password" +msgstr "Введіть ім'я користувача та новий пароль в поля нижче." + +msgid "pwassist_login_not_match" +msgstr "Будь ласка введіть інше ім'я користувача.\\nІм'я користувача що ви ввели не співпадає з ім'ям користувача для якого ви запросили відновлення паролю." + +msgid "pwassist_mail_body" +msgstr "Реєстрація нового паролю для вашого акаунту користувача:\\n\\t%1$s\\n\\nЦе повідомлення було згенеровано автоматично сервером ILIAS\\n\\t%2$s\\n\\nВи (або хтось %3$s) запросив відновлення паролю для акаунту користувача \"%4$s\".\\n\\nБудь ласка перевірте уважно умови наведені нижче, та дійте відповідно:\\n\\n- Якщо ви випадково використали відновлення паролю на ILIAS сервері:\\nВидаліть цей лист.\\n\\n- Якщо ви впевнені, що ви ніколи не користувались відновленням паролю на сервері ILIAS:\\nБудь ласка зв'яжіться з %5$s.\\n\\n- Якщо ви використовували відновлення паролю, будь ласка виконайте наступне:\\n\\n1. Відкрийте ваш браузер.\\n\\n2. Введіть наступну адресу в ваш браузер:\\n\\t%1$s\\n\\nВажливо: Адреса має бути однією стрічкою. Якщо ви бачите, що адреса розділена на декілька ліній, це означає що ваша e-mail програма вставила ці розділи стрічок.\\n\\n3. На веб сторінці показаній вашим браузером, введіть новий пароль для вашого акаунту користувача.\\n\\nБудь ласка зауважте, що з міркувань безпеки, ви можете виконати три кроки вище тільки віключно один раз та тільки за обмежений час. Пізніше адреса стане невірною, та ви буду змушені використати відновлення паролю на ILIAS сервері знову." + +msgid "pwassist_mail_sent" +msgstr "Повідомлення відправлене на %1$s.\\nБудь ласка перевірте вашу почтову скриньку." + +#, fuzzy +msgid "pwassist_mail_sent_generic" +msgstr "A message has been sent to the email address defined in ILIAS.\\nPlease check your mail box." + +msgid "pwassist_mail_subject" +msgstr "ILIAS Відновлення Паролю" + +msgid "pwassist_password_assigned" +msgstr "Пароль був вдало призначений до користувача \"%1$s\"." + +msgid "pwassist_session_expired" +msgstr "Будь ласка заповніть цю форму знову.\\nСтрок дії вашої сесія відновлення паролю скінчився. Це могло трапитись, тому що ви намагались використати лінк, що був надісланий вам більше ніж один раз, або тому що дуже багато часу пройшло з тих пір, як лінк був вам відісланий." + +#, fuzzy +msgid "pwassist_username_mail_body" +msgstr "These are the active username found for the given email address:\\n%s\\n\\nThis message has been created automatically by the following ILIAS Server:\\n\\t%s\\n\\nYou (or somebody with IP %s) have requested support for forgotten usernames for the email address '%s'.\\n\\nPlease check the following and act as suggested::\\n\\n-You have requested this mail by accident:\\nDelete this email.\\n\\n-You are sure, that you never requested this email:\\nPlease contact %s.\\n\\n- If you requested this email, please proceed as follows::\\n\\n1. Start your internet browser.\\n\\n2. Enter the following url:\\n\\t%s\\n\\nImportant: The address is a single line. If you see this address split into multiple lines, then your email program has inserted these line breaks.\\n\\n3. Your Browser now shows the Password-Service. Use this page together with one of the usernames and the according email address to retrieve a new password." + +#, fuzzy +msgid "unassist_disabled_no_access" +msgstr "Username assistance is not enabled. Please contact the system administration for further assistance: %s" diff --git a/components/ILIAS/Init/lang/pwassist_vi.po b/components/ILIAS/Init/lang/pwassist_vi.po new file mode 100644 index 000000000000..baa8cbb917aa --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_vi.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "Trợ giúp phục hồi mật khẩu" + +#, fuzzy +msgid "pwassist_disabled_no_access" +msgstr "Password assistance is not enabled. Please contact the system administration for further assistance: %s" + +msgid "pwassist_enter_email" +msgstr "Hãy nhập địa chỉ email và đệ trình mẫu đơn.\\nILIAS sẽ gửi email tới địa chỉ đó. Email đó chứa tất cả tên đăng nhập đã sử dụng địa chỉ email này.\\nChọn tên đăng nhập và sử dụng dịch vụ mật khẩu để tạo mật khẩu mới. Nếu bạn không nhận được email xin liên hệ quản trị khóa học của bạn hoặc %1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "Nhập tên đăng nhập và địa chỉ email tương ứng vào các ô dưới đây.\\nChúng tôi sẽ gửi thư tới địa chỉ email đó. Thư chứa một địa chỉ trang web, tại đó bạn có thể nhập vào mật khẩu mới cho tài khoản sử dụng.\\nTrong trường hợp bạn không thể đặt được mật khẩu cho tài khoản người sử dụng theo mẫu đó, hãy liên hệ quản trị khóa học hoặc gửi email tới %1$s." + +msgid "pwassist_enter_username_and_new_password" +msgstr "Nhập tên đăng nhập và mật khẩu mới vào các ô dưới đây." + +msgid "pwassist_login_not_match" +msgstr "Hãy nhập vào tên đăng nhập khác.\\nTên đăng nhập bạn đã nhập không trùng khớp với tên đăng nhập yêu cầu trợ giúp phục hồi mật khẩu." + +msgid "pwassist_mail_body" +msgstr "Đăng ký mật khẩu mới cho tài khoản sử dụng:\\n\\t%1$s\\n\\nThư này được sinh tự động bởi máy chủ\\n\\t%2$s\\n\\nBạn (hoặc ai khác %3$s) đã yêu cầu trợ giúp mật khẩu cho tài khoản người sử dụng \"%4$s\".\\n\\nHãy kiểm tra cẩn thận các điều kiện dưới đây, và tiếp tục theo đó:\\n\\n- Nếu bạn lỡ tay yêu cầu trợ giúp mật khẩu từ máy chủ:\\nXóa thư này.\\n\\n- Nếu bạn chắc chắn, chưa bao giờ yêu cầu trợ giúp mật khẩu tại máy chủ:\\nHãy liên hệ %5$s.\\n\\n- Nếu bạn yêu cầu trợ giúp mật khẩu, hãy tiếp tục như sau:\\n\\n1. Mở trình duyệt web.\\n\\n2. nhập địa chỉ web dưới đây vào trình duyệt:\\n\\t%1$s\\n\\nQuan trọng cần chú ý: Địa chỉ chỉ có một dòng. Nếu bạn thấy địa chỉ ngắt ra thành nhiều dòng, đó là chương trình email của bạn ngắt ra.\\n\\n3. Trên trang web hiển thị tại trình duyệt, nhập mật khẩu mới cho tài khoản người sử dụng.\\n\\nHãy chú ý, vì lý do an ninh, bạn hãy theo các bước chỉ một lần và trong thời gian giới hạn. Sau đây địa chỉ sẽ trở nên không hợp lệ, và bạn sẽ phải sử dụng trang trợ giúp mật khẩu trên máy chủ." + +msgid "pwassist_mail_sent" +msgstr "Một thư đã được gửi tới %1$s.\\nHãy kiểm tra hộp thư của bạn." + +#, fuzzy +msgid "pwassist_mail_sent_generic" +msgstr "A message has been sent to the email address defined in ILIAS.\\nPlease check your mail box." + +msgid "pwassist_mail_subject" +msgstr "Trợ giúp phục hồi mật khẩu ILIAS" + +msgid "pwassist_password_assigned" +msgstr "Mật khẩu đã được chỉ định thành công cho người sử dụng \"%1$s\"." + +msgid "pwassist_session_expired" +msgstr "Hãy điền lại mẫu sau.\\nPhiên làm việc trợ giúp mật khẩu của bạn đã hết hạn. Điều này có thể xảy ra, vì bạn đã cố sử dụng hai lần liên kết được gửi cho bạn qua email, hoặc đã quá hạn thời gian kể từ khi liên kết được gửi cho bạn." + +msgid "pwassist_username_mail_body" +msgstr "Có những người sử dụng hoạt động sau được tìm thấy tương ứng với địa chỉ email đã cho:\\n%s\\n\\nThông điệp này được tạo tự động bởi máy chủ ILIAS:\\n\\t%s\\n\\nBạn (hoặc ai đó với địa chỉ IP %s) đã yêu cầu hỗ trợ phục hồi tên đăng nhập cho địa chỉ email '%s'.\\n\\nHãy xem dưới đây và hành động theo hướng dẫn::\\n\\n- Nếu bạn lỡ tay yêu cầu trợ giúp tên đăng nhập từ máy chủ:\\nXóa thư này.\\n\\n- Nếu bạn chắc chắn, chưa bao giờ yêu cầu trợ giúp tên đăng nhập tại máy chủ:\\nHãy liên hệ %5$s.\\n\\n- Nếu bạn yêu cầu trợ giúp tên đăng nhập, hãy tiếp tục như sau:\\n\\n1. Mở trình duyệt web.\\n\\n2. nhập địa chỉ web dưới đây vào trình duyệt:\\n\\t%1$s\\n\\nQuan trọng cần chú ý: Địa chỉ chỉ có một dòng. Nếu bạn thấy địa chỉ ngắt ra thành nhiều dòng, đó là chương trình email của bạn ngắt ra.\\n\\n3. Trên trang web hiển thị tại trình duyệt, nhập tên đăng nhập và mật khẩu mới cho tài khoản người sử dụng.\\n\\nHãy chú ý, vì lý do an ninh, bạn hãy theo các bước chỉ một lần và trong thời gian giới hạn. Sau đây địa chỉ sẽ trở nên không hợp lệ, và bạn sẽ lại phải sử dụng trang trợ giúp tên đăng nhập trên máy chủ." + +#, fuzzy +msgid "unassist_disabled_no_access" +msgstr "Username assistance is not enabled. Please contact the system administration for further assistance: %s" diff --git a/components/ILIAS/Init/lang/pwassist_zh.po b/components/ILIAS/Init/lang/pwassist_zh.po new file mode 100644 index 000000000000..02cf040b9f10 --- /dev/null +++ b/components/ILIAS/Init/lang/pwassist_zh.po @@ -0,0 +1,54 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: pwassist\n" + +msgid "password_assistance" +msgstr "密码援助" + +#, fuzzy +msgid "pwassist_disabled_no_access" +msgstr "Password assistance is not enabled. Please contact the system administration for further assistance: %s" + +msgid "pwassist_enter_email" +msgstr "请输入一个电子邮件地址并提交表单。\\nILIAS将发送一封电子邮件到这个地址。这封电子邮件包含了所有以这个电子邮件地址注册的用户名。\\n选择一个合适的用户名,然后使用密码服务去取回一个新密码。如果您通过这个服务没有取回任何电子邮件,请联系您的课程管理或%1$s." + +msgid "pwassist_enter_username_and_email" +msgstr "在下面的字段中输入一个用户名和相关的电子邮件地址。\\nILIAS将发送一条消息到这个电子邮件地址。这条消息包含一个网页地址。在这里,您可以为用户账号输入一个新密码。" + +msgid "pwassist_enter_username_and_new_password" +msgstr "在下面的字段中输入用户名和新密码。" + +msgid "pwassist_login_not_match" +msgstr "请输入其他用户名。\\n您所输入的这个用户名和您要求密码辅助的用户名不匹配。" + +msgid "pwassist_mail_body" +msgstr "为您的用户账号注册一个新密码:\\n\\t%1$s\\n\\n这条信息由ILIAS服务器自动生成\\n\\t%2$s\\n\\n您(或在%3$s的某些人)为用户账号 \"%4$s\" 所要求的密码辅助。\\n\\n请仔细检查下面列出的条件,并进行相应处理:\\n\\n- 如果您意外的在ILIAS服务器上使用了密码辅助:\\n\\n请删除这封邮件。\\n\\n- 如果您确信从来没有在这个ILIAS服务器上请求过密码辅助:\\n请联系 %5$s.\\n\\n- 如果您要求了密码辅助,请按以下步骤操作:\\n\\n1、打开您的浏览器。\\n\\n2、在您的浏览器中输入以下地址:\\n\\t%1$s\\n\\n重要:这个地址要在单独的一行中。如果您发现这个地址拆分成了多行,那么您的电子邮件程序将插入这些断行。\\n\\n3、通过您的浏览器在网页中显示,为您的用户账号输入一个新密码。\\n\\n请注意,出于安全原因,以上三个步骤您仅能执行一次,并且有一个时间限制。之后地址将失效,然后您再次在这个ILIAS服务器上使用密码辅助。" + +msgid "pwassist_mail_sent" +msgstr "一条消息已经发送到%1$s.\\n请检查您的邮箱。" + +#, fuzzy +msgid "pwassist_mail_sent_generic" +msgstr "A message has been sent to the email address defined in ILIAS.\\nPlease check your mail box." + +msgid "pwassist_mail_subject" +msgstr "ILIAS密码助手" + +msgid "pwassist_password_assigned" +msgstr "密码已成功分配给用户\"%1$s\"。" + +msgid "pwassist_session_expired" +msgstr "请再次填写这个表单。\\n您的密码辅助会话已过期。这种情况有可能发生,因为您试图使用的链接已经通过电子邮件不止一次的发送给您,或因为这个链接已经发送给您太长时间了。" + +msgid "pwassist_username_mail_body" +msgstr "这些都是为给定的电子邮件地址找到的活跃用户:\\n%s\\n\\n这条信息已经由以下ILIAS服务器自动创建:\\n\\t%s\\n\\n您(或IP为 %s 的某些人)已向这个电子邮件地址 '%s' 要求忘记了用户名的支持。\\n\\n请检查以下和做为建议:\\n\\n- 您意外的请求了这封邮件:\\n请删除这封邮件。\\n\\n- 您确信您从来没有请求过这封邮件:\\n请联系 %s。\\n\\n- 如果您请求了这封邮件,请按照以下步骤处理:\\n\\n1、启动您的浏览器。\\n\\n2、输入以下url:\\n\\t\\5s\\n\\n重要:这个地址要在单独的一行中。如果您看到这个地址被拆分到多行,那么您的电子邮件程序将插入这些断行。\\n\\n3、您的浏览器现在显示密码服务。使用这个页面上的某个用户名并根据电子邮件地址去取回一个新密码。" + +#, fuzzy +msgid "unassist_disabled_no_access" +msgstr "Username assistance is not enabled. Please contact the system administration for further assistance: %s" diff --git a/components/ILIAS/Init/src/AllModernComponents.php b/components/ILIAS/Init/src/AllModernComponents.php index e50f113ad099..0126698d05fe 100644 --- a/components/ILIAS/Init/src/AllModernComponents.php +++ b/components/ILIAS/Init/src/AllModernComponents.php @@ -144,7 +144,15 @@ public function __construct( protected Logging\Logger\LoggerFactoryInterface $logger_factory, protected Logging\Logger\DefaultConfigLoggerFactoryInterface $default_config_logger_factory, protected Logging\Config\ConfigInterface $logging_config, - protected \ILIAS\LTI\View $lti_view + protected \ILIAS\LTI\View $lti_view, + protected \ILIAS\Language\ComponentTranslation\LanguageFileDirectoryManager $language_file_directory_manager, + protected \ILIAS\Language\Activities\InstallLanguage $install_language, + protected \ILIAS\Language\Activities\UpdateLanguage $update_language, + protected \ILIAS\Language\Activities\UninstallLanguage $uninstall_language, + protected \ILIAS\Language\Activities\RemoveLocalLanguageChanges $remove_local_language_changes, + protected \ILIAS\Language\Activities\AddLanguageEntry $add_language_entry, + protected \ILIAS\Language\Activities\SetLanguageDetectionEnabled $set_language_detection_enabled, + protected \ILIAS\Language\Activities\SetLanguageTranslationEnabled $set_language_translation_enabled, ) { } @@ -257,6 +265,14 @@ protected function populateComponentsInLegacyEnvironment(\Pimple\Container $DIC) $DIC['logging.defaultConfigFactory'] = fn(): Logging\Logger\DefaultConfigLoggerFactoryInterface => $this->default_config_logger_factory; $DIC['logging.config'] = fn(): Logging\Config\ConfigInterface => $this->logging_config; $DIC['lti'] = fn(): \ILIAS\LTI\View => $this->lti_view; + $DIC[\ILIAS\Language\ComponentTranslation\LanguageFileDirectoryManager::class] = fn(): \ILIAS\Language\ComponentTranslation\LanguageFileDirectoryManager => $this->language_file_directory_manager; + $DIC[\ILIAS\Language\Activities\InstallLanguage::class] = fn(): \ILIAS\Language\Activities\InstallLanguage => $this->install_language; + $DIC[\ILIAS\Language\Activities\UpdateLanguage::class] = fn(): \ILIAS\Language\Activities\UpdateLanguage => $this->update_language; + $DIC[\ILIAS\Language\Activities\UninstallLanguage::class] = fn(): \ILIAS\Language\Activities\UninstallLanguage => $this->uninstall_language; + $DIC[\ILIAS\Language\Activities\RemoveLocalLanguageChanges::class] = fn(): \ILIAS\Language\Activities\RemoveLocalLanguageChanges => $this->remove_local_language_changes; + $DIC[\ILIAS\Language\Activities\AddLanguageEntry::class] = fn(): \ILIAS\Language\Activities\AddLanguageEntry => $this->add_language_entry; + $DIC[\ILIAS\Language\Activities\SetLanguageDetectionEnabled::class] = fn(): \ILIAS\Language\Activities\SetLanguageDetectionEnabled => $this->set_language_detection_enabled; + $DIC[\ILIAS\Language\Activities\SetLanguageTranslationEnabled::class] = fn(): \ILIAS\Language\Activities\SetLanguageTranslationEnabled => $this->set_language_translation_enabled; } public function getName(): string diff --git a/components/ILIAS/LDAP/LDAP.php b/components/ILIAS/LDAP/LDAP.php index 2488615ea94c..1f281d3212ef 100644 --- a/components/ILIAS/LDAP/LDAP.php +++ b/components/ILIAS/LDAP/LDAP.php @@ -20,6 +20,9 @@ namespace ILIAS; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; + class LDAP implements Component\Component { public function init( @@ -34,5 +37,9 @@ public function init( ): void { $contribute[\ILIAS\Setup\Agent::class] = static fn() => new \ILIAS\LDAP\Setup\Agent(); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'ldap' + ); } } diff --git a/components/ILIAS/LDAP/lang/ldap.pot b/components/ILIAS/LDAP/lang/ldap.pot new file mode 100644 index 000000000000..b5fcfec4ce90 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap.pot @@ -0,0 +1,387 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: ldap\n" + +msgid "add_ldap_server" +msgstr "" + +msgid "ldap_add_missing" +msgstr "" + +msgid "ldap_add_role_ass_rule" +msgstr "" + +msgid "ldap_add_roles" +msgstr "" + +msgid "ldap_as_ds" +msgstr "" + +msgid "ldap_as_ds_info" +msgstr "" + +msgid "ldap_assignment_type" +msgstr "" + +msgid "ldap_authentication_settings" +msgstr "" + +msgid "ldap_bind_anonymous" +msgstr "" + +msgid "ldap_bind_user" +msgstr "" + +msgid "ldap_btn_add_role_ass" +msgstr "" + +msgid "ldap_check_role_assignment" +msgstr "" + +msgid "ldap_choose_role" +msgstr "" + +msgid "ldap_confirm_del_role_ass" +msgstr "" + +msgid "ldap_deleted_role_mapping" +msgstr "" + +msgid "ldap_deleted_rule" +msgstr "" + +msgid "ldap_dn_info" +msgstr "" + +msgid "ldap_edit_role_ass_rule" +msgstr "" + +msgid "ldap_edit_role_assignment" +msgstr "" + +msgid "ldap_err_missing_plugin_id" +msgstr "" + +msgid "ldap_escapedn" +msgstr "" + +msgid "ldap_escapedn_info" +msgstr "" + +msgid "ldap_filter_info" +msgstr "" + +msgid "ldap_global_role" +msgstr "" + +msgid "ldap_global_role_assignment" +msgstr "" + +msgid "ldap_global_role_info" +msgstr "" + +msgid "ldap_group_attribute" +msgstr "" + +msgid "ldap_group_attribute_info" +msgstr "" + +msgid "ldap_group_dn" +msgstr "" + +msgid "ldap_group_dn_info" +msgstr "" + +msgid "ldap_group_dn_short" +msgstr "" + +msgid "ldap_group_filter" +msgstr "" + +msgid "ldap_group_filter_info" +msgstr "" + +msgid "ldap_group_member" +msgstr "" + +msgid "ldap_group_member_info" +msgstr "" + +msgid "ldap_group_member_optional" +msgstr "" + +msgid "ldap_group_member_short" +msgstr "" + +msgid "ldap_group_membership" +msgstr "" + +msgid "ldap_group_name" +msgstr "" + +msgid "ldap_group_name_info" +msgstr "" + +msgid "ldap_group_optional_info" +msgstr "" + +msgid "ldap_group_restrictions" +msgstr "" + +msgid "ldap_group_scope" +msgstr "" + +msgid "ldap_group_scope_info" +msgstr "" + +msgid "ldap_group_search_base" +msgstr "" + +msgid "ldap_group_user_filter" +msgstr "" + +msgid "ldap_ilias_role" +msgstr "" + +msgid "ldap_info_text" +msgstr "" + +msgid "ldap_info_text_info" +msgstr "" + +msgid "ldap_local_role" +msgstr "" + +msgid "ldap_mapping_info_type" +msgstr "" + +msgid "ldap_mapping_table" +msgstr "" + +msgid "ldap_mapping_template" +msgstr "" + +msgid "ldap_member_info" +msgstr "" + +msgid "ldap_memberisdn" +msgstr "" + +msgid "ldap_missing_bind_user" +msgstr "" + +msgid "ldap_missing_role_assignment" +msgstr "" + +msgid "ldap_moment_sync" +msgstr "" + +msgid "ldap_new_role_assignment" +msgstr "" + +msgid "ldap_plugin" +msgstr "" + +msgid "ldap_plugin_id" +msgstr "" + +msgid "ldap_plugin_info" +msgstr "" + +msgid "ldap_referrals" +msgstr "" + +msgid "ldap_referrals_info" +msgstr "" + +msgid "ldap_remove_deprecated" +msgstr "" + +msgid "ldap_remove_roles" +msgstr "" + +msgid "ldap_role_active" +msgstr "" + +msgid "ldap_role_assignments" +msgstr "" + +msgid "ldap_role_at_info" +msgstr "" + +msgid "ldap_role_at_name" +msgstr "" + +msgid "ldap_role_at_value" +msgstr "" + +msgid "ldap_role_bind_pass" +msgstr "" + +msgid "ldap_role_bind_pass_info" +msgstr "" + +msgid "ldap_role_bind_user" +msgstr "" + +msgid "ldap_role_bind_user_info" +msgstr "" + +msgid "ldap_role_by_attribute" +msgstr "" + +msgid "ldap_role_by_group" +msgstr "" + +msgid "ldap_role_by_plugin" +msgstr "" + +msgid "ldap_role_group_assignments" +msgstr "" + +msgid "ldap_role_grp_at" +msgstr "" + +msgid "ldap_role_grp_dn_info" +msgstr "" + +msgid "ldap_role_grp_info" +msgstr "" + +msgid "ldap_role_grp_isdn" +msgstr "" + +msgid "ldap_role_info" +msgstr "" + +msgid "ldap_role_mapping" +msgstr "" + +msgid "ldap_role_name_info" +msgstr "" + +msgid "ldap_role_not_exists" +msgstr "" + +msgid "ldap_role_selection" +msgstr "" + +msgid "ldap_role_selection_info" +msgstr "" + +msgid "ldap_role_settings" +msgstr "" + +msgid "ldap_rule_condition" +msgstr "" + +msgid "ldap_rule_type" +msgstr "" + +msgid "ldap_scope_one" +msgstr "" + +msgid "ldap_scope_sub" +msgstr "" + +msgid "ldap_search_base_info" +msgstr "" + +msgid "ldap_search_filter" +msgstr "" + +msgid "ldap_server_bind_dn" +msgstr "" + +msgid "ldap_server_bind_pass" +msgstr "" + +msgid "ldap_server_binding" +msgstr "" + +msgid "ldap_server_name" +msgstr "" + +msgid "ldap_server_name_info" +msgstr "" + +msgid "ldap_server_security_settings" +msgstr "" + +msgid "ldap_server_short" +msgstr "" + +msgid "ldap_server_url_info" +msgstr "" + +msgid "ldap_server_url_invalid_parts" +msgstr "" + +msgid "ldap_server_url_invalid_uris" +msgstr "" + +msgid "ldap_server_url_required" +msgstr "" + +msgid "ldap_server_version_info" +msgstr "" + +msgid "ldap_servers" +msgstr "" + +msgid "ldap_settings" +msgstr "" + +msgid "ldap_sync_cron" +msgstr "" + +msgid "ldap_sync_login" +msgstr "" + +msgid "ldap_tbl_role_ass" +msgstr "" + +msgid "ldap_tls_conflict" +msgstr "" + +msgid "ldap_update_field_info" +msgstr "" + +msgid "ldap_update_roles" +msgstr "" + +msgid "ldap_user_attribute" +msgstr "" + +msgid "ldap_user_dn" +msgstr "" + +msgid "ldap_user_mapping" +msgstr "" + +msgid "ldap_user_scope" +msgstr "" + +msgid "ldap_user_scope_info" +msgstr "" + +msgid "ldap_user_sync" +msgstr "" + +msgid "ldap_user_sync_cron" +msgstr "" + +msgid "ldap_user_sync_cron_info" +msgstr "" + +msgid "ldap_user_sync_info" +msgstr "" + +msgid "ldap_username_filter" +msgstr "" + +msgid "ldap_username_filter_info" +msgstr "" diff --git a/components/ILIAS/LDAP/lang/ldap_ar.po b/components/ILIAS/LDAP/lang/ldap_ar.po new file mode 100644 index 000000000000..245d14b16be6 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_ar.po @@ -0,0 +1,405 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: ldap\n" + +#, fuzzy +msgid "add_ldap_server" +msgstr "Add Server" + +msgid "ldap_add_missing" +msgstr "تعيين القوانين المفقودة" + +msgid "ldap_add_role_ass_rule" +msgstr "قاعدة جديدة لتعيين الوظائف" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +msgid "ldap_as_ds" +msgstr "Use as Data Source" + +msgid "ldap_as_ds_info" +msgstr "If activated, this LDAP configuration is used only for the synchronization of user accounts in combination with other authentication methods." + +msgid "ldap_assignment_type" +msgstr "نوع التعيين" + +msgid "ldap_authentication_settings" +msgstr "اعدادات المصادقة" + +msgid "ldap_bind_anonymous" +msgstr "التزام كمجهول" + +msgid "ldap_bind_user" +msgstr "التزام كمستخدم" + +msgid "ldap_btn_add_role_ass" +msgstr "اضافة قاعدة جديدة" + +msgid "ldap_check_role_assignment" +msgstr "تعيين الوظائف بعد اخر دخول" + +#, fuzzy +msgid "ldap_choose_role" +msgstr "Choose Role" + +msgid "ldap_confirm_del_role_ass" +msgstr "حذف تعيين وظيفة" + +msgid "ldap_deleted_role_mapping" +msgstr "Deleted assignment." + +msgid "ldap_deleted_rule" +msgstr "تم حذف تعيين الوظائف المختارة" + +msgid "ldap_dn_info" +msgstr "LDAP ادخل اسم مميز لمجموعة" + +msgid "ldap_edit_role_ass_rule" +msgstr "تعديل قاعدة تعيين وظيفة" + +#, fuzzy +msgid "ldap_edit_role_assignment" +msgstr "Edit Role -> Group Assignment" + +msgid "ldap_err_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +msgid "ldap_filter_info" +msgstr "(&(userattr=username)(userfilter)) هذه التصفية ستضاف الى تصفية البحث بهذه الطريقة" + +msgid "ldap_global_role" +msgstr "وظيفة عامة" + +msgid "ldap_global_role_assignment" +msgstr "ILIAS-تعيين وظيفة" + +msgid "ldap_global_role_info" +msgstr "حتى يتم تعيين مستخدمين جدد وظيفة الاختيار * مطلوبة في حالة اختيار نوع التزامنILIAS الرجاء اختيار وظيفة" + +msgid "ldap_group_attribute" +msgstr "وصف المجموعة" + +msgid "ldap_group_attribute_info" +msgstr "تصف المجموعة البحث عن" + +msgid "ldap_group_dn" +msgstr "DN مجموعة" + +msgid "ldap_group_dn_info" +msgstr "عند البحث عن مجموعة \"BaseDN\" اعتمد على" + +msgid "ldap_group_dn_short" +msgstr "Group DN:" + +msgid "ldap_group_filter" +msgstr "LDAP تصفية" + +msgid "ldap_group_filter_info" +msgstr "Filter that will be added to the search filter when searching for a group: (&(groupattr=group)(memberattr=username)(groupfilter))." + +msgid "ldap_group_member" +msgstr "وصف عضو المجموعة" + +msgid "ldap_group_member_info" +msgstr "The attribute of the group object where the user dn may be found. Choose \"Attribute Value is DN\" if the member attribute is the distinguished name of the users." + +msgid "ldap_group_member_optional" +msgstr "عضوية المجموعة اختيارية" + +msgid "ldap_group_member_short" +msgstr "Attribute:" + +msgid "ldap_group_membership" +msgstr "عضوية المجموعة" + +msgid "ldap_group_name" +msgstr "اسم المجموعة" + +msgid "ldap_group_name_info" +msgstr "يجب ان تكون اسماء مستخدمي المجموعة اسماء اعضاء حتى تتم المصادقة بنجاح" + +msgid "ldap_group_optional_info" +msgstr "
(&(userattr=username)(userfilter)) عند التفعيل، لن تحتاج عضوية المجموعة عملية مصادقة ناجحة. الرجاء ادخال تصفية مستخدم لاعضاء هذه المجموعات" + +msgid "ldap_group_restrictions" +msgstr "حدود عضوية المجموعة" + +msgid "ldap_group_scope" +msgstr "مجال البحث" + +msgid "ldap_group_scope_info" +msgstr "مجال بحث المجموعة. اذا لم تكن متأكدا اختر فرعي" + +msgid "ldap_group_search_base" +msgstr "قاعدة بحث المجموعة" + +msgid "ldap_group_user_filter" +msgstr "تصفية المستخدم" + +msgid "ldap_ilias_role" +msgstr "ILIAS اسم وظيفة" + +msgid "ldap_info_text" +msgstr "نص المعلومات" + +msgid "ldap_info_text_info" +msgstr "عند الادخال، سيتم عرض هذا النص على شاشة المعلومات للعنصر الذي عينت له الوظيفة. واختياريا سيكون هذا النص موجود في المكتبة وعلى سطع المكتب الشخصي" + +msgid "ldap_local_role" +msgstr "وظيفة محلية" + +msgid "ldap_mapping_info_type" +msgstr "عرض المعلومات ايضا في المكتبة\\سطح الملف الشخصي" + +msgid "ldap_mapping_table" +msgstr "ILIAS الملف الشخصي في LDAP يصف تعيين" + +msgid "ldap_mapping_template" +msgstr "Template for objectClass:" + +msgid "ldap_member_info" +msgstr "DN يمكن ايجاد وصف عنصر المجموعة حيث يوجد مستخدم" + +msgid "ldap_memberisdn" +msgstr "Attribute Value is DN" + +msgid "ldap_missing_bind_user" +msgstr "You have chosen \"Bind as User\": Please enter a valid LDAP username and password." + +msgid "ldap_missing_role_assignment" +msgstr "Please choose a global role new users will be assigned to." + +msgid "ldap_moment_sync" +msgstr "نوع التزامن" + +msgid "ldap_new_role_assignment" +msgstr "تعيين مجموعة <- اضافة وظيفة جديدة" + +msgid "ldap_plugin" +msgstr "تعيين بواسطة المساعد" + +msgid "ldap_plugin_id" +msgstr "اسم الهوية المساعد" + +msgid "ldap_plugin_info" +msgstr "تحقق من تعيين الوظيفة باستخدام المساعد. الرجاء ادخال اسم هوية مساعد صحيح" + +msgid "ldap_referrals" +msgstr "إحالات" + +msgid "ldap_referrals_info" +msgstr "او لا .يجب ان يكون هذا معطلا اذا كنت تستخدم خادم دليل نشط LDAP تتبع الاحالات الراجعة من خادم LDAP عند اتخاذ هذه الوضعية، فهي تحدد فيما اذا كانت مكتبة" + +msgid "ldap_remove_deprecated" +msgstr "عدم تعيين الوظائف المطلوبة" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +msgid "ldap_role_active" +msgstr "تفعيل تزامن المجموعة" + +msgid "ldap_role_assignments" +msgstr "تعيين وظيفة" + +msgid "ldap_role_at_info" +msgstr "LDAP يتوقف التعيين على وصف محدد في ملف المستخدم الشخصي في" + +msgid "ldap_role_at_name" +msgstr "اسم الوصف" + +msgid "ldap_role_at_value" +msgstr "قيمة الوصف" + +msgid "ldap_role_bind_pass" +msgstr "كلمة المرور" + +msgid "ldap_role_bind_pass_info" +msgstr "كلمة المرور" + +msgid "ldap_role_bind_user" +msgstr "DN مستخدم" + +msgid "ldap_role_bind_user_info" +msgstr "LDAPيحتاج المستخدم كتابة معلومات الوصول لمجموعات LDAPالرجاء ادخال اسم مميز لحساب" + +msgid "ldap_role_by_attribute" +msgstr "LDAP وصف" + +msgid "ldap_role_by_group" +msgstr "عضوية المجموعة" + +msgid "ldap_role_by_plugin" +msgstr "By Plugin" + +msgid "ldap_role_group_assignments" +msgstr "Existing Role -> Group Assignments" + +msgid "ldap_role_grp_at" +msgstr "الوصف" + +msgid "ldap_role_grp_dn_info" +msgstr "LDAP الرجاء ادخال اسم مميز لمجموعة" + +msgid "ldap_role_grp_info" +msgstr " المعطاة النظام في وظيفة LDAP سيتم تعيين اعضاء مجموعة محددة من" + +msgid "ldap_role_grp_isdn" +msgstr "Attribute value is DN" + +msgid "ldap_role_info" +msgstr "LDAP التي ستدير عضوية مجموعة ILIAS ادخل اسم لوظيفة" + +msgid "ldap_role_mapping" +msgstr "LDAP تخطيط مجموعة <- ILIAS وظيفة" + +msgid "ldap_role_name_info" +msgstr "الرجاء اختيار اما وظيفة عامة او ادخل اسم وظيفة محلية" + +msgid "ldap_role_not_exists" +msgstr "A role with that name does not exist" + +msgid "ldap_role_selection" +msgstr "Role Selection" + +msgid "ldap_role_selection_info" +msgstr "Your selection is ambiguous. Please choose one of the following roles." + +msgid "ldap_role_settings" +msgstr "LDAP اعدادات التزامن لمجموعة" + +msgid "ldap_rule_condition" +msgstr "الشرط" + +msgid "ldap_rule_type" +msgstr "نوع التعيين" + +msgid "ldap_scope_one" +msgstr "واحدة" + +msgid "ldap_scope_sub" +msgstr "فرعي" + +msgid "ldap_search_base_info" +msgstr "عند البحث عن مستخدمين \"BaseDN\" اعتمد على" + +msgid "ldap_search_filter" +msgstr "LDAP تصفية" + +msgid "ldap_server_bind_dn" +msgstr "الخاص بالمستخدم DN" + +msgid "ldap_server_bind_pass" +msgstr "كلمة المرور" + +msgid "ldap_server_binding" +msgstr "الالتزام" + +msgid "ldap_server_name" +msgstr "LDAP اسم انشاء" + +msgid "ldap_server_name_info" +msgstr "LDAP الرجاء اختياراسم لانشاء خادم" + +msgid "ldap_server_security_settings" +msgstr "اعدادات الحماية" + +msgid "ldap_server_short" +msgstr "Server URL:" + +msgid "ldap_server_url_info" +msgstr "A fully qualified URL for specifying the protocol, url and port to connect to. E.g \"ldap://ldap.ilias.de:389\". You may add multiple servers with commas separated." + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "المستخدم عادة هو رقم 3 LDAP اصدار" + +#, fuzzy +msgid "ldap_servers" +msgstr "LDAP Server" + +msgid "ldap_settings" +msgstr "اعدادات الخادم" + +msgid "ldap_sync_cron" +msgstr "Cron-Job لكل" + +msgid "ldap_sync_login" +msgstr "عند الدخول" + +msgid "ldap_tbl_role_ass" +msgstr "القواعد النشطة" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS can not be used in combination with LDAPv2. Please choose LDAP version \"3\" or disable TLS support." + +msgid "ldap_update_field_info" +msgstr "التحديث تلقائيا" + +msgid "ldap_update_roles" +msgstr "تعيين وظائف" + +msgid "ldap_user_attribute" +msgstr "وصف اسم الدخول" + +msgid "ldap_user_dn" +msgstr "البحث في قاعدة المستخدم" + +msgid "ldap_user_mapping" +msgstr "تخطيط ملف المستخدم الشخصي" + +msgid "ldap_user_scope" +msgstr "مجال البحث" + +msgid "ldap_user_scope_info" +msgstr "مجال بحث المستخدم. اذا لم تكن متأكدا اختر فرعي" + +msgid "ldap_user_sync" +msgstr "اعدادات تزامن المستخدم" + +#, fuzzy +msgid "ldap_user_sync_cron" +msgstr "LDAP User Synchronization " + +#, fuzzy +msgid "ldap_user_sync_cron_info" +msgstr "If activated, user accounts will be imported from the LDAP directory and synchronised continuously as an option." + +msgid "ldap_user_sync_info" +msgstr "Cron-Job تعرف فيما اذا كان المستخدمون الجدد قاموا بإنشاء اسماء دخول تلقائيا او بانتظام لكل" + +#, fuzzy +msgid "ldap_username_filter" +msgstr "Username Filter" + +#, fuzzy +msgid "ldap_username_filter_info" +msgstr "Use * as wildcard." diff --git a/components/ILIAS/LDAP/lang/ldap_bg.po b/components/ILIAS/LDAP/lang/ldap_bg.po new file mode 100644 index 000000000000..beaa86236e83 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_bg.po @@ -0,0 +1,517 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ldap\n" + +#, fuzzy +msgid "add_ldap_server" +msgstr "Add Server" + +#, fuzzy +msgid "ldap_add_missing" +msgstr "Assign Missing Roles" + +#, fuzzy +msgid "ldap_add_role_ass_rule" +msgstr "New Rule for Role Assignments" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +#, fuzzy +msgid "ldap_as_ds" +msgstr "Use as Data Source" + +#, fuzzy +msgid "ldap_as_ds_info" +msgstr "If activated, this LDAP configuration is used only for the synchronization of user accounts in combination with other authentication methods ()." + +#, fuzzy +msgid "ldap_assignment_type" +msgstr "Assignment Type" + +#, fuzzy +msgid "ldap_authentication_settings" +msgstr "Authentication Settings" + +#, fuzzy +msgid "ldap_bind_anonymous" +msgstr "Bind Anonymously" + +#, fuzzy +msgid "ldap_bind_user" +msgstr "Bind as User:" + +#, fuzzy +msgid "ldap_btn_add_role_ass" +msgstr "Add New Rule" + +#, fuzzy +msgid "ldap_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +#, fuzzy +msgid "ldap_choose_role" +msgstr "Choose Role" + +#, fuzzy +msgid "ldap_confirm_del_role_ass" +msgstr "Delete Role Assignmen" + +#, fuzzy +msgid "ldap_deleted_role_mapping" +msgstr "Deleted assignment." + +#, fuzzy +msgid "ldap_deleted_rule" +msgstr "Deleted selected role assignments." + +#, fuzzy +msgid "ldap_dn_info" +msgstr "Enter the distinguished name of the LDAP group." + +#, fuzzy +msgid "ldap_edit_role_ass_rule" +msgstr "Edit Role Assignment Rule" + +#, fuzzy +msgid "ldap_edit_role_assignment" +msgstr "Edit Role -> Group Assignment" + +#, fuzzy +msgid "ldap_err_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +#, fuzzy +msgid "ldap_filter_info" +msgstr "Filter that will be added to the search filter this way: (&(userattr=username)(userfilter))." + +#, fuzzy +msgid "ldap_global_role" +msgstr "Global Role" + +#, fuzzy +msgid "ldap_global_role_assignment" +msgstr "ILIAS-Role Assignment" + +#, fuzzy +msgid "ldap_global_role_info" +msgstr "Please choose an ILIAS Role new users will be assigned to." + +#, fuzzy +msgid "ldap_group_attribute" +msgstr "Attribute for Group" + +#, fuzzy +msgid "ldap_group_attribute_info" +msgstr "The group attribute to search for." + +#, fuzzy +msgid "ldap_group_dn" +msgstr "Group Search Base" + +#, fuzzy +msgid "ldap_group_dn_info" +msgstr "Gets prepended to \"BaseDN\" when searching for groups." + +#, fuzzy +msgid "ldap_group_dn_short" +msgstr "Group DN:" + +#, fuzzy +msgid "ldap_group_filter" +msgstr "LDAP Filter" + +#, fuzzy +msgid "ldap_group_filter_info" +msgstr "Filter that will be added to the search filter when searching for a group: (&(groupattr=group)(memberattr=username)(groupfilter))." + +#, fuzzy +msgid "ldap_group_member" +msgstr "Group Member Attribute" + +#, fuzzy +msgid "ldap_group_member_info" +msgstr "The attribute of the group object where the user dn may be found. Choose \"Attribute Value is DN\" if the member attribute is the distinguished name of the users." + +#, fuzzy +msgid "ldap_group_member_optional" +msgstr "Group Membership is Optional" + +#, fuzzy +msgid "ldap_group_member_short" +msgstr "Attribute:" + +#, fuzzy +msgid "ldap_group_membership" +msgstr "Group Membership" + +#, fuzzy +msgid "ldap_group_name" +msgstr "Group Name" + +#, fuzzy +msgid "ldap_group_name_info" +msgstr "The name of the group users have to be a member of to authenticate successfully." + +#, fuzzy +msgid "ldap_group_optional_info" +msgstr "If enabled, the group membership is not required for a successful authentication. Please enter a user filter for the members of these groups:
(&(userattr=username)(userfilter))" + +#, fuzzy +msgid "ldap_group_restrictions" +msgstr "Group Restrictions" + +#, fuzzy +msgid "ldap_group_scope" +msgstr "Search Scope" + +#, fuzzy +msgid "ldap_group_scope_info" +msgstr "Scope for group searching. If unsure choose \"Sub\"" + +#, fuzzy +msgid "ldap_group_search_base" +msgstr "Group Search Base" + +#, fuzzy +msgid "ldap_group_user_filter" +msgstr "User Filter" + +#, fuzzy +msgid "ldap_ilias_role" +msgstr "ILIAS Role" + +#, fuzzy +msgid "ldap_info_text" +msgstr "Information Text" + +#, fuzzy +msgid "ldap_info_text_info" +msgstr "If entered, this text will be shown in the repository and on the info screen for the object this role is assigned to." + +#, fuzzy +msgid "ldap_local_role" +msgstr "Local Role" + +#, fuzzy +msgid "ldap_mapping_info_type" +msgstr "Show Information also in the Repository/Personal Desktop" + +#, fuzzy +msgid "ldap_mapping_table" +msgstr "Assignment of LDAP Attributes to ILIAS User Profile" + +#, fuzzy +msgid "ldap_mapping_template" +msgstr "Template for objectClass:" + +#, fuzzy +msgid "ldap_member_info" +msgstr "The attribute of the group object where the user dn may be found." + +#, fuzzy +msgid "ldap_memberisdn" +msgstr "Attribute Value is DN" + +#, fuzzy +msgid "ldap_missing_bind_user" +msgstr "You have chosen \"Bind as User\": Please enter a valid LDAP username and password." + +#, fuzzy +msgid "ldap_missing_role_assignment" +msgstr "Please choose a global role new users will be assigned to." + +#, fuzzy +msgid "ldap_moment_sync" +msgstr "Type of Sychronization" + +#, fuzzy +msgid "ldap_new_role_assignment" +msgstr "Add New Role -> Group Assignment" + +#, fuzzy +msgid "ldap_plugin" +msgstr "Assignment by Plugin" + +#, fuzzy +msgid "ldap_plugin_id" +msgstr "Plugin Id" + +#, fuzzy +msgid "ldap_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +#, fuzzy +msgid "ldap_referrals" +msgstr "Referrals" + +#, fuzzy +msgid "ldap_referrals_info" +msgstr "If set, determines whether the LDAP library automatically follows referrals returned by LDAP servers or not. This should be disabled if you are using an active directory server." + +#, fuzzy +msgid "ldap_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +#, fuzzy +msgid "ldap_role_active" +msgstr "Enable Group Synchronization" + +#, fuzzy +msgid "ldap_role_assignments" +msgstr "Role Assignment" + +#, fuzzy +msgid "ldap_role_at_info" +msgstr "The assignment is based on a specific attribute in the LDAP user profile." + +#, fuzzy +msgid "ldap_role_at_name" +msgstr "Attribute Name" + +#, fuzzy +msgid "ldap_role_at_value" +msgstr "Attribute Value" + +#, fuzzy +msgid "ldap_role_bind_pass" +msgstr "Password" + +#, fuzzy +msgid "ldap_role_bind_pass_info" +msgstr "Password" + +#, fuzzy +msgid "ldap_role_bind_user" +msgstr "Usern DN" + +#, fuzzy +msgid "ldap_role_bind_user_info" +msgstr "Please enter a distinguished name of a LDAP user account. This user needs write access for the LDAP groups." + +#, fuzzy +msgid "ldap_role_by_attribute" +msgstr "LDAP Attribute" + +#, fuzzy +msgid "ldap_role_by_group" +msgstr "Groupmembership" + +#, fuzzy +msgid "ldap_role_by_plugin" +msgstr "By Plugin" + +#, fuzzy +msgid "ldap_role_group_assignments" +msgstr "Existing Role -> Group Assignments" + +#, fuzzy +msgid "ldap_role_grp_at" +msgstr "Attribute" + +#, fuzzy +msgid "ldap_role_grp_dn_info" +msgstr "Please enter the \"Distinguished Name\" of the LDAP Group." + +#, fuzzy +msgid "ldap_role_grp_info" +msgstr "Members of a specific LDAP Group will be assigned to the given ILIAS role." + +#, fuzzy +msgid "ldap_role_grp_isdn" +msgstr "Attribute value is DN" + +#, fuzzy +msgid "ldap_role_info" +msgstr "Enter the name of an ILIAS Role that will control the membership to the LDAP group." + +#, fuzzy +msgid "ldap_role_mapping" +msgstr "LDAP-Group -> Role Mapping" + +#, fuzzy +msgid "ldap_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +#, fuzzy +msgid "ldap_role_not_exists" +msgstr "A role with that name does not exist" + +#, fuzzy +msgid "ldap_role_selection" +msgstr "Role Selection" + +#, fuzzy +msgid "ldap_role_selection_info" +msgstr "Your selection is ambiguous. Please choose one of the following roles." + +#, fuzzy +msgid "ldap_role_settings" +msgstr "LDAP Group Synchronization Settings" + +#, fuzzy +msgid "ldap_rule_condition" +msgstr "condition" + +#, fuzzy +msgid "ldap_rule_type" +msgstr "Type of Assignment" + +#, fuzzy +msgid "ldap_scope_one" +msgstr "One" + +#, fuzzy +msgid "ldap_scope_sub" +msgstr "Sub" + +#, fuzzy +msgid "ldap_search_base_info" +msgstr "Gets prepended to basedn when searching for users." + +#, fuzzy +msgid "ldap_search_filter" +msgstr "LDAP Filter" + +#, fuzzy +msgid "ldap_server_bind_dn" +msgstr "User Search Base" + +#, fuzzy +msgid "ldap_server_bind_pass" +msgstr "Password" + +#, fuzzy +msgid "ldap_server_binding" +msgstr "Binding" + +#, fuzzy +msgid "ldap_server_name" +msgstr "Name of LDAP Configuration" + +#, fuzzy +msgid "ldap_server_name_info" +msgstr "Please choose a name for this LDAP server configuration." + +#, fuzzy +msgid "ldap_server_security_settings" +msgstr "Security Settings" + +#, fuzzy +msgid "ldap_server_short" +msgstr "Server URL:" + +#, fuzzy +msgid "ldap_server_url_info" +msgstr "A fully qualified URL for specifying the protocol, url and port to connect to. E.g \"ldap://ldap.ilias.de:389\"" + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +#, fuzzy +msgid "ldap_server_version_info" +msgstr "LDAP version to use, ususally 3." + +#, fuzzy +msgid "ldap_servers" +msgstr "LDAP Server" + +#, fuzzy +msgid "ldap_settings" +msgstr "Server Settings" + +#, fuzzy +msgid "ldap_sync_cron" +msgstr "Per Cron-Job" + +#, fuzzy +msgid "ldap_sync_login" +msgstr "On Login" + +#, fuzzy +msgid "ldap_tbl_role_ass" +msgstr "Avtive Rules" + +#, fuzzy +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS can not be used in combination with LDAPv2. Please choose LDAP version \"3\" or disable TLS support." + +#, fuzzy +msgid "ldap_update_field_info" +msgstr "Update automatically" + +#, fuzzy +msgid "ldap_update_roles" +msgstr "Role Assignments" + +#, fuzzy +msgid "ldap_user_attribute" +msgstr "Attribute for Login Name" + +#, fuzzy +msgid "ldap_user_dn" +msgstr "User Search Base" + +#, fuzzy +msgid "ldap_user_mapping" +msgstr "User Profile Mapping" + +#, fuzzy +msgid "ldap_user_scope" +msgstr "Search Scope" + +#, fuzzy +msgid "ldap_user_scope_info" +msgstr "Scope for user searching. If unsure choose \"Sub\"." + +#, fuzzy +msgid "ldap_user_sync" +msgstr "User Synchronization Settings" + +#, fuzzy +msgid "ldap_user_sync_cron" +msgstr "LDAP User Synchronization " + +#, fuzzy +msgid "ldap_user_sync_cron_info" +msgstr "If activated, user accounts will be imported from the LDAP directory and synchronised continuously as an option." + +#, fuzzy +msgid "ldap_user_sync_info" +msgstr "Defines whether new users are automatically created on login or regularly per Cron-Job." + +#, fuzzy +msgid "ldap_username_filter" +msgstr "Username Filter" + +#, fuzzy +msgid "ldap_username_filter_info" +msgstr "Use * as wildcard." diff --git a/components/ILIAS/LDAP/lang/ldap_cs.po b/components/ILIAS/LDAP/lang/ldap_cs.po new file mode 100644 index 000000000000..784c6df27d9a --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_cs.po @@ -0,0 +1,397 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: ldap\n" + +msgid "add_ldap_server" +msgstr "Přidat server" + +msgid "ldap_add_missing" +msgstr "Přiřadit chybějící role" + +msgid "ldap_add_role_ass_rule" +msgstr "Nové pravidlo pro přiřazení role" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +msgid "ldap_as_ds" +msgstr "Použít zdroj dat" + +msgid "ldap_as_ds_info" +msgstr "Je-li aktivováno, tato konfigurace LDAP je použita pro synchronizaci uživatelských účtů v kombinaci s jinými metodami autentizace." + +msgid "ldap_assignment_type" +msgstr "Typ přiřazení" + +msgid "ldap_authentication_settings" +msgstr "Nastavení autentizace" + +msgid "ldap_bind_anonymous" +msgstr "Anonymní přihlášení" + +msgid "ldap_bind_user" +msgstr "Připojen jako uživatel:" + +msgid "ldap_btn_add_role_ass" +msgstr "Přidat nové pravidlo" + +msgid "ldap_check_role_assignment" +msgstr "Přiřazení role po dalším přihlášení" + +msgid "ldap_choose_role" +msgstr "Vybrat roli" + +msgid "ldap_confirm_del_role_ass" +msgstr "Smazat přiřazení role" + +msgid "ldap_deleted_role_mapping" +msgstr "Přiřazení smazáno" + +msgid "ldap_deleted_rule" +msgstr "Přiřazení vybraných rolí smazáno." + +msgid "ldap_dn_info" +msgstr "Vložte vyhrazené jméno skupiny LDAP." + +msgid "ldap_edit_role_ass_rule" +msgstr "Upravit pravidlo přiřazení role" + +msgid "ldap_edit_role_assignment" +msgstr "Upravit roli -> Přiřazení skupiny" + +msgid "ldap_err_missing_plugin_id" +msgstr "Vložte prosím platné id pluginu." + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +msgid "ldap_filter_info" +msgstr "Filtr, který bude přidán k filtru vyhledávání tímto způsobem: (&(userattr=username)(userfilter))." + +msgid "ldap_global_role" +msgstr "Globální role" + +msgid "ldap_global_role_assignment" +msgstr "Přiřazení role ILIAS" + +msgid "ldap_global_role_info" +msgstr "Vyberte prosím přiřazení role ILIAS novým uživatelům." + +msgid "ldap_group_attribute" +msgstr "Atributy pro skupinu" + +msgid "ldap_group_attribute_info" +msgstr "Atributy skupinu pro vyhledávání." + +msgid "ldap_group_dn" +msgstr "Skupinové DN" + +msgid "ldap_group_dn_info" +msgstr "Určit předponu pro \"BaseDN\" pro vyhledávání skupin." + +msgid "ldap_group_dn_short" +msgstr "Skupinové DN:" + +msgid "ldap_group_filter" +msgstr "LDAP Filtr" + +msgid "ldap_group_filter_info" +msgstr "Filtr který bude přidán k filtru vyhledávání, pro vyhledávání skupin: (&(groupattr=group)(memberattr=username)(groupfilter))." + +msgid "ldap_group_member" +msgstr "Atributy skupin členů" + +msgid "ldap_group_member_info" +msgstr "Tyto atributy skupin objektů, kde DN uživatele mohou být nalezeni. Zvolte \"Hodnota atributu je DN\" když atributy členů je rozlišované jméno uživatelů." + +msgid "ldap_group_member_optional" +msgstr "Skupinové členství je volitelné" + +msgid "ldap_group_member_short" +msgstr "Atributy:" + +msgid "ldap_group_membership" +msgstr "Skupinové členství" + +msgid "ldap_group_name" +msgstr "Jméno skupiny" + +msgid "ldap_group_name_info" +msgstr "Název skupiny uživatelů je pro členy s úspěšnou autentizací." + +msgid "ldap_group_optional_info" +msgstr "Je-li zapnuto, členství skupiny není vyžadováno pro úspěšnou autentizaci. Vložte prosím filtr uživatelů pro členy této skupiny:
(&(userattr=username)(userfilter))" + +msgid "ldap_group_restrictions" +msgstr "Omezení skupiny" + +msgid "ldap_group_scope" +msgstr "Rozsah vyhledávání" + +msgid "ldap_group_scope_info" +msgstr "Rozsah skupinové vyhledávání. Není-li zajištěno zvolte \"Sub\"" + +msgid "ldap_group_search_base" +msgstr "Báze skupinového vyhledávání" + +msgid "ldap_group_user_filter" +msgstr "Uživatelský filtr" + +msgid "ldap_ilias_role" +msgstr "ILIAS Role" + +msgid "ldap_info_text" +msgstr "Informační text" + +msgid "ldap_info_text_info" +msgstr "Je-li vloženo, tento text bude zobrazen v úložišti a na informační obrazovce pro které je objekt této role přiřazen. Tento texte je volitelně dostupný v úložišti a na osobní pracovní ploše." + +msgid "ldap_local_role" +msgstr "Lokální role" + +msgid "ldap_mapping_info_type" +msgstr "Zobrazit informace také v Úložiště/Osobní pracovní plocha" + +msgid "ldap_mapping_table" +msgstr "Přiřazení atributů LDAP k uživatelskému profilu ILIAS" + +msgid "ldap_mapping_template" +msgstr "Šablona pro objectClass:" + +msgid "ldap_member_info" +msgstr "Atribut skupiny objektů, kde DN uživatele lze najít." + +msgid "ldap_memberisdn" +msgstr "Hodnota atributu je DN" + +msgid "ldap_missing_bind_user" +msgstr "Zvolil jste \"Připojen jako uživatel\": Vložte prosím platné jméno a heslo LDAP." + +msgid "ldap_missing_role_assignment" +msgstr "Vyberte prosím globální roli k přiřazení novému uživateli." + +msgid "ldap_moment_sync" +msgstr "Typ sychronizace" + +msgid "ldap_new_role_assignment" +msgstr "Přidat novou roli -> Skupinové přiřazení" + +msgid "ldap_plugin" +msgstr "Přiřazení Pluginem" + +msgid "ldap_plugin_id" +msgstr "Id Pluginu" + +msgid "ldap_plugin_info" +msgstr "Ověřte prosím přiřazení role pluginu. Vložte prosím platné id pluginu." + +msgid "ldap_referrals" +msgstr "Přesměrování" + +msgid "ldap_referrals_info" +msgstr "Je-li nastaveno, určuje zda knihovna LDAP automaticky následuje odkazovaná přesměrování vrácené LDAP servery nebo ne." + +msgid "ldap_remove_deprecated" +msgstr "Zrušit přiřazení neschválených rolí" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +msgid "ldap_role_active" +msgstr "Zapnout synchronizaci skupin" + +msgid "ldap_role_assignments" +msgstr "Přiřazení role" + +msgid "ldap_role_at_info" +msgstr "Toto přiřazení je založeno na specifickém atributu v uživatelském profilu LDAP." + +msgid "ldap_role_at_name" +msgstr "Název atributu" + +msgid "ldap_role_at_value" +msgstr "Hodnota atributu" + +msgid "ldap_role_bind_pass" +msgstr "Heslo" + +msgid "ldap_role_bind_pass_info" +msgstr "Heslo" + +msgid "ldap_role_bind_user" +msgstr "Uživatelské DN" + +msgid "ldap_role_bind_user_info" +msgstr "Vložte prosím vyhrazené jméno uživatelského účtu LDAP. Tento uživatel musí zapsaný přístup pro skupinu LDAP." + +msgid "ldap_role_by_attribute" +msgstr "Atribut LDAP" + +msgid "ldap_role_by_group" +msgstr "Skupinové členství" + +msgid "ldap_role_by_plugin" +msgstr "Podle Pluginů" + +msgid "ldap_role_group_assignments" +msgstr "Existující role -> Přiřazení skupiny" + +msgid "ldap_role_grp_at" +msgstr "Atribut" + +msgid "ldap_role_grp_dn_info" +msgstr "Vložte prosím \"Vyhrazené jméno\" skupiny LDAP." + +msgid "ldap_role_grp_info" +msgstr "Člen specifikované skupiny LDAP Group bude přiřazen k dané roli ILIAS." + +msgid "ldap_role_grp_isdn" +msgstr "Hodnota atributu je DN" + +msgid "ldap_role_info" +msgstr "Vložte název role ILIAS, která bude řídit členství ve skupině LDAP." + +msgid "ldap_role_mapping" +msgstr "Role ILIAS -> Mapování skupiny LDAP" + +msgid "ldap_role_name_info" +msgstr "Vyberte prosím globální roli, nebo vložte prosím jméno lokální role." + +msgid "ldap_role_not_exists" +msgstr "Role které jméno neexistuje" + +msgid "ldap_role_selection" +msgstr "Výběr role" + +msgid "ldap_role_selection_info" +msgstr "Váš výběr je nejednoznačný. Vyberte prosím jednu z následujících rolí." + +msgid "ldap_role_settings" +msgstr "Nastavení synchrozice skupin LDAP" + +msgid "ldap_rule_condition" +msgstr "Podmínka" + +msgid "ldap_rule_type" +msgstr "Typ přiřazení" + +msgid "ldap_scope_one" +msgstr "Jeden" + +msgid "ldap_scope_sub" +msgstr "Sub" + +msgid "ldap_search_base_info" +msgstr "Získat cestu do basedn pro hledání uživatelů." + +msgid "ldap_search_filter" +msgstr "LDAP Filtr" + +msgid "ldap_server_bind_dn" +msgstr "Uživatelské DN" + +msgid "ldap_server_bind_pass" +msgstr "Heslo" + +msgid "ldap_server_binding" +msgstr "Vazba" + +msgid "ldap_server_name" +msgstr "Název konfigurace LDAP" + +msgid "ldap_server_name_info" +msgstr "Zvolte prosím název pro tuto konfiguraci serveru LDAP." + +msgid "ldap_server_security_settings" +msgstr "Nastavení bezpečnosti" + +msgid "ldap_server_short" +msgstr "URL serveru:" + +msgid "ldap_server_url_info" +msgstr "Plně specifikovaná URL pro určení protokolu, URL a portu k připojení se. Např. \"ldap://ldap.ilias.de:389\". Můžete přidat více serverů oddělených čárkou. Servery jsou při dotazu cyklicky rotovány." + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "Verze LDAP k použití, obvykle 3." + +msgid "ldap_servers" +msgstr "LDAP Server" + +msgid "ldap_settings" +msgstr "Nastavení serveru" + +msgid "ldap_sync_cron" +msgstr "Přes Cron-Job" + +msgid "ldap_sync_login" +msgstr "Při přihlášení" + +msgid "ldap_tbl_role_ass" +msgstr "Aktivovat pravidla" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS nelze použít v kombinaci s LDAPv2. Zvolte prosím LDAP verzi \"3\" nebo vypněte podporu TLS." + +msgid "ldap_update_field_info" +msgstr "Aktializovat automaticky" + +msgid "ldap_update_roles" +msgstr "Přiřazení Role" + +msgid "ldap_user_attribute" +msgstr "Atributy pro přihlášení" + +msgid "ldap_user_dn" +msgstr "Uživatelská vyhledávací databáze" + +msgid "ldap_user_mapping" +msgstr "Mapování uživatelských profilů" + +msgid "ldap_user_scope" +msgstr "Oblast vyhledávání" + +msgid "ldap_user_scope_info" +msgstr "Oblast pro uživatelské vyhledávání. Není-li zajištěno, volte \"Sub\"." + +msgid "ldap_user_sync" +msgstr "Nastavení uživatelské synchronizace" + +msgid "ldap_user_sync_cron" +msgstr "Synchronizace uživatele LDAP" + +msgid "ldap_user_sync_cron_info" +msgstr "Je-li aktivována, budou uživatelské účty importovány z adresáře LDAP a budou průběžně synchronizovány jako volba." + +msgid "ldap_user_sync_info" +msgstr "Definuje zda nový uživatel je automaticky vytvářen při přihlášení, nebo řádně přes Cron-Job." + +msgid "ldap_username_filter" +msgstr "Filtr uživatelského jména" + +msgid "ldap_username_filter_info" +msgstr "Použijte * jako zástupný znak." diff --git a/components/ILIAS/LDAP/lang/ldap_da.po b/components/ILIAS/LDAP/lang/ldap_da.po new file mode 100644 index 000000000000..12912e8f4188 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_da.po @@ -0,0 +1,479 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ldap\n" + +#, fuzzy +msgid "add_ldap_server" +msgstr "Add Server" + +#, fuzzy +msgid "ldap_add_missing" +msgstr "Assign Missing Roles" + +#, fuzzy +msgid "ldap_add_role_ass_rule" +msgstr "New Rule for Role Assignments" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +#, fuzzy +msgid "ldap_as_ds" +msgstr "Use as Data Source" + +#, fuzzy +msgid "ldap_as_ds_info" +msgstr "If activated, this LDAP configuration is used only for the synchronization of user accounts in combination with other authentication methods." + +#, fuzzy +msgid "ldap_assignment_type" +msgstr "Assignment Type" + +msgid "ldap_authentication_settings" +msgstr "Autoriserings indstillinger" + +msgid "ldap_bind_anonymous" +msgstr "Bind Anonymt" + +msgid "ldap_bind_user" +msgstr "Bind som bruger:" + +msgid "ldap_btn_add_role_ass" +msgstr "Tilføj ny regel" + +#, fuzzy +msgid "ldap_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +#, fuzzy +msgid "ldap_choose_role" +msgstr "Choose Role" + +#, fuzzy +msgid "ldap_confirm_del_role_ass" +msgstr "Delete Role Assignmen" + +#, fuzzy +msgid "ldap_deleted_role_mapping" +msgstr "Deleted assignment." + +#, fuzzy +msgid "ldap_deleted_rule" +msgstr "Deleted selected role assignments." + +#, fuzzy +msgid "ldap_dn_info" +msgstr "Enter the distinguished name of the LDAP group." + +#, fuzzy +msgid "ldap_edit_role_ass_rule" +msgstr "Edit Role Assignment Rule" + +#, fuzzy +msgid "ldap_edit_role_assignment" +msgstr "Edit Role -> Group Assignment" + +#, fuzzy +msgid "ldap_err_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +#, fuzzy +msgid "ldap_filter_info" +msgstr "Filter that will be added to the search filter this way: (&(userattr=username)(userfilter))." + +msgid "ldap_global_role" +msgstr "Global rolle" + +msgid "ldap_global_role_assignment" +msgstr "ILIAS rolle tildeling" + +#, fuzzy +msgid "ldap_global_role_info" +msgstr "Please choose an ILIAS Role new users will be assigned to." + +#, fuzzy +msgid "ldap_group_attribute" +msgstr "Attribute for Group" + +#, fuzzy +msgid "ldap_group_attribute_info" +msgstr "The group attribute to search for." + +#, fuzzy +msgid "ldap_group_dn" +msgstr "Group DN" + +#, fuzzy +msgid "ldap_group_dn_info" +msgstr "Gets prepended to basedn when searching for groups." + +#, fuzzy +msgid "ldap_group_dn_short" +msgstr "Group DN:" + +#, fuzzy +msgid "ldap_group_filter" +msgstr "LDAP Filter" + +#, fuzzy +msgid "ldap_group_filter_info" +msgstr "Filter that will be added to the search filter when searching for a group: (&(groupattr=group)(memberattr=username)(groupfilter))." + +#, fuzzy +msgid "ldap_group_member" +msgstr "Group Member Attribute" + +#, fuzzy +msgid "ldap_group_member_info" +msgstr "The attribute of the group object where the user dn may be found. Choose \"Attribute Value is DN\" if the member attribute is the distinguished name of the users." + +msgid "ldap_group_member_optional" +msgstr "Gruppemedlemsskab er valgfrit" + +msgid "ldap_group_member_short" +msgstr "Attribut:" + +msgid "ldap_group_membership" +msgstr "Gruppemedlemsskab" + +#, fuzzy +msgid "ldap_group_name" +msgstr "Group Name" + +#, fuzzy +msgid "ldap_group_name_info" +msgstr "The name of the group users have to be a member of to authenticate successfully." + +#, fuzzy +msgid "ldap_group_optional_info" +msgstr "If enabled, the group membership is not required for a successful authentication. Please enter a user filter for the members of these groups:
(&(userattr=username)(userfilter))" + +#, fuzzy +msgid "ldap_group_restrictions" +msgstr "Group Restrictions" + +#, fuzzy +msgid "ldap_group_scope" +msgstr "Search Scope" + +#, fuzzy +msgid "ldap_group_scope_info" +msgstr "Scope for group searching. If unsure choose \"Sub\"" + +#, fuzzy +msgid "ldap_group_search_base" +msgstr "Group Search Base" + +msgid "ldap_group_user_filter" +msgstr "Brugerfilter" + +#, fuzzy +msgid "ldap_ilias_role" +msgstr "ILIAS Role" + +msgid "ldap_info_text" +msgstr "Informationstekst" + +#, fuzzy +msgid "ldap_info_text_info" +msgstr "If entered, this text will be shown in the repository and on the info screen for the object this role is assigned to." + +msgid "ldap_local_role" +msgstr "Lokal rolle" + +#, fuzzy +msgid "ldap_mapping_info_type" +msgstr "Show Information also in the Repository/Personal Desktop" + +#, fuzzy +msgid "ldap_mapping_table" +msgstr "Assignment of LDAP Attributes to ILIAS User Profile" + +#, fuzzy +msgid "ldap_mapping_template" +msgstr "Template for objectClass:" + +#, fuzzy +msgid "ldap_member_info" +msgstr "The attribute of the group object where the user dn may be found." + +#, fuzzy +msgid "ldap_memberisdn" +msgstr "Attribute Value is DN" + +#, fuzzy +msgid "ldap_missing_bind_user" +msgstr "You have chosen \"Bind as User\": Please enter a valid LDAP username and password." + +#, fuzzy +msgid "ldap_missing_role_assignment" +msgstr "Please choose a global role new users will be assigned to." + +#, fuzzy +msgid "ldap_moment_sync" +msgstr "Type of Sychronization" + +#, fuzzy +msgid "ldap_new_role_assignment" +msgstr "Add New Role > Group Assignment" + +#, fuzzy +msgid "ldap_plugin" +msgstr "Assignment by Plugin" + +#, fuzzy +msgid "ldap_plugin_id" +msgstr "Plugin Id" + +#, fuzzy +msgid "ldap_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +msgid "ldap_referrals" +msgstr "Henvisninger" + +#, fuzzy +msgid "ldap_referrals_info" +msgstr "If set, determines whether the LDAP library automatically follows referrals returned by LDAP servers or not." + +#, fuzzy +msgid "ldap_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +#, fuzzy +msgid "ldap_role_active" +msgstr "Enable Group Synchronization" + +#, fuzzy +msgid "ldap_role_assignments" +msgstr "Role Assignment" + +msgid "ldap_role_at_info" +msgstr "Tildelingen er bestemt af specifikke attributter i LDAP bruger profilen." + +msgid "ldap_role_at_name" +msgstr "Attribut navn" + +msgid "ldap_role_at_value" +msgstr "Attribut værdi" + +msgid "ldap_role_bind_pass" +msgstr "Password" + +msgid "ldap_role_bind_pass_info" +msgstr "Password" + +#, fuzzy +msgid "ldap_role_bind_user" +msgstr "Usern DN" + +#, fuzzy +msgid "ldap_role_bind_user_info" +msgstr "Please enter a distinguished name of a LDAP user account. This user needs write access for the LDAP groups." + +msgid "ldap_role_by_attribute" +msgstr "LDAP attribut" + +#, fuzzy +msgid "ldap_role_by_group" +msgstr "Groupmembership" + +msgid "ldap_role_by_plugin" +msgstr "Efter plugin" + +#, fuzzy +msgid "ldap_role_group_assignments" +msgstr "Existing Role > Group Assignments" + +#, fuzzy +msgid "ldap_role_grp_at" +msgstr "Attribute" + +#, fuzzy +msgid "ldap_role_grp_dn_info" +msgstr "Please enter the \"Distinguished Name\" of the LDAP Group." + +#, fuzzy +msgid "ldap_role_grp_info" +msgstr "Members of a specific LDAP Group will be assigned to the given ILIAS role." + +#, fuzzy +msgid "ldap_role_grp_isdn" +msgstr "Attribute value is DN" + +#, fuzzy +msgid "ldap_role_info" +msgstr "Enter the name of an ILIAS Role that will control the membership to the LDAP group." + +#, fuzzy +msgid "ldap_role_mapping" +msgstr "LDAPGroup > Role Mapping" + +#, fuzzy +msgid "ldap_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +msgid "ldap_role_not_exists" +msgstr "Der eksisterer ikke en rolle med det navn." + +msgid "ldap_role_selection" +msgstr "Rollevalg" + +#, fuzzy +msgid "ldap_role_selection_info" +msgstr "Your selection is ambiguous. Please choose one of the following roles." + +#, fuzzy +msgid "ldap_role_settings" +msgstr "LDAP Group Synchronization Settings" + +#, fuzzy +msgid "ldap_rule_condition" +msgstr "condition" + +#, fuzzy +msgid "ldap_rule_type" +msgstr "Type of Assignment" + +msgid "ldap_scope_one" +msgstr "En" + +#, fuzzy +msgid "ldap_scope_sub" +msgstr "Sub" + +#, fuzzy +msgid "ldap_search_base_info" +msgstr "Gets prepended to basedn when searching for users." + +msgid "ldap_search_filter" +msgstr "LDAP filter" + +msgid "ldap_server_bind_dn" +msgstr "Bruger DN" + +msgid "ldap_server_bind_pass" +msgstr "Password" + +msgid "ldap_server_binding" +msgstr "Binding" + +msgid "ldap_server_name" +msgstr "LDAP konfigurationens navn" + +msgid "ldap_server_name_info" +msgstr "Vælg et navn til denne LDAP serverkonfiguration." + +msgid "ldap_server_security_settings" +msgstr "Sikkerhedsindstillinger" + +#, fuzzy +msgid "ldap_server_short" +msgstr "Server URL:" + +#, fuzzy +msgid "ldap_server_url_info" +msgstr "A fully qualified URL for specifying the protocol, url and port to connect to. E.g \"ldap://ldap.ilias.de:389\"" + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "LDAP version der skal anvendes, normalt 3." + +#, fuzzy +msgid "ldap_servers" +msgstr "LDAP Server" + +#, fuzzy +msgid "ldap_settings" +msgstr "Server Settings" + +msgid "ldap_sync_cron" +msgstr "Per cronjob" + +msgid "ldap_sync_login" +msgstr "Ved login" + +msgid "ldap_tbl_role_ass" +msgstr "Aktive regler" + +#, fuzzy +msgid "ldap_tls_conflict" +msgstr "LDAPTLS can not be used in combination with LDAPv2. Please choose LDAP version \"3\" or disable TLS support." + +msgid "ldap_update_field_info" +msgstr "Opdater automatisk" + +msgid "ldap_update_roles" +msgstr "Rolletildelinger" + +#, fuzzy +msgid "ldap_user_attribute" +msgstr "Attribute for Login Name" + +msgid "ldap_user_dn" +msgstr "Bruger DN" + +#, fuzzy +msgid "ldap_user_mapping" +msgstr "User Profile Mapping" + +msgid "ldap_user_scope" +msgstr "Søge scope" + +#, fuzzy +msgid "ldap_user_scope_info" +msgstr "Scope for user searching. If unsure choose \"Sub\"." + +#, fuzzy +msgid "ldap_user_sync" +msgstr "User Synchronization Settings" + +#, fuzzy +msgid "ldap_user_sync_cron" +msgstr "LDAP User Synchronization " + +#, fuzzy +msgid "ldap_user_sync_cron_info" +msgstr "If activated, user accounts will be imported from the LDAP directory and synchronised continuously as an option." + +#, fuzzy +msgid "ldap_user_sync_info" +msgstr "Defines whether new users are automatically created on login or regularly per CronJob." + +#, fuzzy +msgid "ldap_username_filter" +msgstr "Username Filter" + +#, fuzzy +msgid "ldap_username_filter_info" +msgstr "Use * as wildcard." diff --git a/components/ILIAS/LDAP/lang/ldap_de.po b/components/ILIAS/LDAP/lang/ldap_de.po new file mode 100644 index 000000000000..bfe2ba471ae2 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_de.po @@ -0,0 +1,390 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ldap\n" + +msgid "add_ldap_server" +msgstr "Server hinzufügen" + +msgid "ldap_add_missing" +msgstr "Fehlende Rollen zuweisen" + +msgid "ldap_add_role_ass_rule" +msgstr "Neue Regel für die ILIAS-Rollenzuordnung" + +msgid "ldap_add_roles" +msgstr "Rollen hinzufügen" + +msgid "ldap_as_ds" +msgstr "Als Datenquelle verwenden" + +msgid "ldap_as_ds_info" +msgstr "In Kombination mit anderen Authentifizierungsarten (z. B. SAML) wird die LDAP-Konfiguration nur für die Synchronisierung der Angaben in den ILIAS-Konten genutzt. Eine direkte Authentifizierung über LDAP ist nicht möglich." + +msgid "ldap_assignment_type" +msgstr "Art der Zuordnung" + +msgid "ldap_authentication_settings" +msgstr "Einstellungen zur Authentifizierung" + +msgid "ldap_bind_anonymous" +msgstr "Anonym verbinden" + +msgid "ldap_bind_user" +msgstr "Als Benutzer verbinden:" + +msgid "ldap_btn_add_role_ass" +msgstr "Neue Regel anlegen" + +msgid "ldap_check_role_assignment" +msgstr "Rollenzuweisung nach späteren Logins" + +msgid "ldap_choose_role" +msgstr "Rolle auswählen" + +msgid "ldap_confirm_del_role_ass" +msgstr "Rollenzuordnung löschen" + +msgid "ldap_deleted_role_mapping" +msgstr "Die Zuordnung wurde entfernt" + +msgid "ldap_deleted_rule" +msgstr "Ausgewählte Rollenzuordnung gelöscht" + +msgid "ldap_dn_info" +msgstr "Wählen Sie hier den kompletten DN der LDAP-Gruppe." + +msgid "ldap_edit_role_ass_rule" +msgstr "Regel zur Rollenzuordnung bearbeiten" + +msgid "ldap_edit_role_assignment" +msgstr "Zuordnung bearbeiten" + +msgid "ldap_err_missing_plugin_id" +msgstr "Bitte geben Sie eine gültige Plugin-ID ein." + +msgid "ldap_escapedn" +msgstr "DN maskieren" + +msgid "ldap_escapedn_info" +msgstr "Wenn aktiviert, werden reservierte Zeichen im \"Distinguished Name (DN)\" für Abfragen von Gruppenzugehörigkeiten maskiert." + +msgid "ldap_filter_info" +msgstr "Filter, der dem Suchfilter folgendermaßen hinzugefügt wird: (&(userattr=username)(userfilter))" + +msgid "ldap_global_role" +msgstr "Globale Rolle" + +msgid "ldap_global_role_assignment" +msgstr "Rollenzuordnung" + +msgid "ldap_global_role_info" +msgstr "Bitte wählen Sie eine globale Rolle für neu anzulegende ILIAS-Benutzer. * Die Rolle ist erforderlich, sobald Sie eine Synchronisierungsart gewählt haben." + +msgid "ldap_group_attribute" +msgstr "Attributname der Gruppe" + +msgid "ldap_group_attribute_info" +msgstr "Geben Sie hier den Attributnamen der Gruppe ein." + +msgid "ldap_group_dn" +msgstr "Gruppen DN" + +msgid "ldap_group_dn_info" +msgstr "Suchbasis für die Gruppensuche. Wird der \"BaseDN\" vorangestellt. Z.B.: ou=Groups" + +msgid "ldap_group_dn_short" +msgstr "Group DN:" + +msgid "ldap_group_filter" +msgstr "LDAP Filter" + +msgid "ldap_group_filter_info" +msgstr "Filter, der dem Suchfilter folgendermassen hinzugefügt wird: (&(groupattr=group)(memberattr=username)(groupfilter))" + +msgid "ldap_group_member" +msgstr "Attributname der Gruppenmitglieder" + +msgid "ldap_group_member_info" +msgstr "Geben Sie hier den Attributnamen ein, dem die Gruppenmitglieder zugeordnet sind. Wählen Sie 'Attributwert ist DN', wenn die Mitgliedernamen als DN angelegt werden." + +msgid "ldap_group_member_optional" +msgstr "Optionale Gruppenmitgliedschaft" + +msgid "ldap_group_member_short" +msgstr "Attribut:" + +msgid "ldap_group_membership" +msgstr "Gruppenmitgliedschaft" + +msgid "ldap_group_name" +msgstr "Gruppenname" + +msgid "ldap_group_name_info" +msgstr "Name der Gruppe" + +msgid "ldap_group_optional_info" +msgstr "Wenn aktiviert ist die Gruppenmitgliedschaft für eine erfolgreiche Authentifizierung nicht erforderlich. Bitte geben Sie einen Benutzerfilter für diese Gruppenmitglieder an:
(&(userattr=username)(userfilter))" + +msgid "ldap_group_restrictions" +msgstr "Gruppenbeschränkungen" + +msgid "ldap_group_scope" +msgstr "Suchbereich" + +msgid "ldap_group_scope_info" +msgstr "Bereich für die Gruppensuche. Wählen Sie im Zweifelsfall \"Sub\"." + +msgid "ldap_group_search_base" +msgstr "Suchbasis" + +msgid "ldap_group_user_filter" +msgstr "Benutzerfilter" + +msgid "ldap_ilias_role" +msgstr "ILIAS-Rollenname" + +msgid "ldap_info_text" +msgstr "Informationstext" + +msgid "ldap_info_text_info" +msgstr "Sie können hier einen Informationstext angeben, der auf dem Reiter „Info“ des der Rolle zugehörigen Objektes angezeigt wird. Optional kann dieser Text auch im Magazin und auf dem Dashboard eingeblendet werden." + +msgid "ldap_local_role" +msgstr "Lokale Rolle" + +msgid "ldap_mapping_info_type" +msgstr "Auch im Magazin anzeigen." + +msgid "ldap_mapping_table" +msgstr "Zuordnung von Datenfeldern der ILIAS-Konten zu LDAP-Attributen" + +msgid "ldap_mapping_template" +msgstr "Vorlage benutzen für Objektklasse:" + +msgid "ldap_member_info" +msgstr "Geben Sie hier den Attributnamen ein, dem die Gruppenmitglieder zugeordnet sind. Wählen Sie 'Attributwert ist DN', wenn die Mitgliedernamen als DN angelegt werden." + +msgid "ldap_memberisdn" +msgstr "Attributwert ist DN" + +msgid "ldap_missing_bind_user" +msgstr "Sie haben als Verbindungsart 'Als Benutzer verbinden ausgewählt': Bitte tragen Sie einen Anmeldenamen und das Passwort ein." + +msgid "ldap_missing_role_assignment" +msgstr "Bitte wählen Sie eine globale Rolle aus, der neu anzulegende Benutzer zugeordnet werden sollen." + +msgid "ldap_moment_sync" +msgstr "Synchronisierungsart" + +msgid "ldap_new_role_assignment" +msgstr "Neue Zuordnung anlegen" + +msgid "ldap_plugin" +msgstr "Zuweisung über Plugin" + +msgid "ldap_plugin_id" +msgstr "Plugin-ID" + +msgid "ldap_plugin_info" +msgstr "Überprüfung der Rollenzuordnung per Plugin. Bitte geben Sie dazu eine gültige Plugin-ID ein." + +msgid "ldap_referrals" +msgstr "Weiterleitungen" + +msgid "ldap_referrals_info" +msgstr "Legt fest, ob Weiterleitungen des LDAP-Servers automatisch gefolgt wird oder nicht." + +msgid "ldap_remove_deprecated" +msgstr "Unberechtigte Rollen entfernen" + +msgid "ldap_remove_roles" +msgstr "Rollen entfernen" + +msgid "ldap_role_active" +msgstr "Gruppenaktualisierung eingeschaltet" + +msgid "ldap_role_assignments" +msgstr "Rollenzuordnung" + +msgid "ldap_role_at_info" +msgstr "Die Zuordnung erfolgt anhand eines bestimmten Attributs des LDAP-Kontos." + +msgid "ldap_role_at_name" +msgstr "Attributname" + +msgid "ldap_role_at_value" +msgstr "Attributwert" + +msgid "ldap_role_bind_pass" +msgstr "Passwort" + +msgid "ldap_role_bind_pass_info" +msgstr "Passwort des LDAP-Benutzers." + +msgid "ldap_role_bind_user" +msgstr "Anmeldename" + +msgid "ldap_role_bind_user_info" +msgstr "Bitte geben einen LDAP-Anmeldenamen ein. Dieser Benutzer muss Schreibzugriff auf die zu aktualisierenden Gruppen besitzen." + +msgid "ldap_role_by_attribute" +msgstr "Benutzerattribut" + +msgid "ldap_role_by_group" +msgstr "Gruppenzugehörigkeit" + +msgid "ldap_role_by_plugin" +msgstr "Per Plugin" + +msgid "ldap_role_group_assignments" +msgstr "Vorhandene Zuordnungen" + +msgid "ldap_role_grp_at" +msgstr "Attribut" + +msgid "ldap_role_grp_dn_info" +msgstr "Bitte geben Sie den vollständigen \"Distinguished Name\" der Gruppe an." + +msgid "ldap_role_grp_info" +msgstr "Mitglieder einer bestimmten LDAP Gruppe werden der angegebenen ILIAS-Rolle zugeordnet." + +msgid "ldap_role_grp_isdn" +msgstr "Attributwert ist DN" + +msgid "ldap_role_info" +msgstr "Bitte geben Sie den Namen der ILIAS-Rolle ein, die die LDAP-Gruppenzugehörigkeit steuern soll." + +msgid "ldap_role_mapping" +msgstr "Zuordnung ILIAS-Rollen ➜ LDAP-Gruppen" + +msgid "ldap_role_name_info" +msgstr "Bitte wählen Sie entweder eine globale Rolle oder geben Sie den Namen einer lokalen Rolle ein." + +msgid "ldap_role_not_exists" +msgstr "Eine ILIAS-Rolle mit dem folgenden Namen existiert nicht:" + +msgid "ldap_role_selection" +msgstr "Auswahl der Rollen" + +msgid "ldap_role_selection_info" +msgstr "Ihre Auswahl ist nicht eindeutig. Bitte wählen Sie eine der nachfolgenden Rollen." + +msgid "ldap_role_settings" +msgstr "Einstellungen zur LDAP-Gruppen Aktualisierung" + +msgid "ldap_rule_condition" +msgstr "Bedingung" + +msgid "ldap_rule_type" +msgstr "Art der Zuordnung" + +msgid "ldap_scope_one" +msgstr "One" + +msgid "ldap_scope_sub" +msgstr "Sub" + +msgid "ldap_search_base_info" +msgstr "Suchbasis für die Benutzersuche. Wird der \"BaseDN\" vorangestellt. Z.B.: ou=People" + +msgid "ldap_search_filter" +msgstr "LDAP Filter" + +msgid "ldap_server_bind_dn" +msgstr "DN des Benutzers" + +msgid "ldap_server_bind_pass" +msgstr "Passwort" + +msgid "ldap_server_binding" +msgstr "Verbindungsart" + +msgid "ldap_server_name" +msgstr "Name der LDAP-Konfiguration" + +msgid "ldap_server_name_info" +msgstr "Bitte wählen Sie einen Namen für diese Server-Konfiguration!" + +msgid "ldap_server_security_settings" +msgstr "Sicherheitseinstellungen" + +msgid "ldap_server_short" +msgstr "Server URL:" + +msgid "ldap_server_url_info" +msgstr "Bitte tragen Sie die komplette URL für die Verbindung zum LDAP-Server ein, z.B. \"ldap://ldaps.ilias.de:636\". Mehrere URLs können kommagetrennt für Failover-Unterstützung angegeben werden. Bei Verbindungsfehlern rotiert ILIAS automatisch durch die verfügbaren Server. Hinweis: Während der Authentifizierung erfolgt die URL-Rotation nur im Arbeitsspeicher (nicht persistiert). In anderen Kontexten (z.B. im asynchronen Import von Konten via Cron-Job) wird eine erfolgreiche Rotation in der Datenbank gespeichert." + +msgid "ldap_server_url_invalid_parts" +msgstr "Die folgenden Server-URL(s) konnten nicht als gültige URIs erkannt werden und funktionieren ggf. erst nach Korrektur:" + +msgid "ldap_server_url_invalid_uris" +msgstr "Jeder kommagetrennte Eintrag muss eine gültige URI sein (z. B. ldap://host:389). Ungültig:" + +msgid "ldap_server_url_required" +msgstr "Die Server-URL ist erforderlich." + +msgid "ldap_server_version_info" +msgstr "Protokollversion des LDAP-Server (in den meisten Fällen \"LDAPv3\")." + +msgid "ldap_servers" +msgstr "LDAP Server" + +msgid "ldap_settings" +msgstr "Server-Einstellungen" + +msgid "ldap_sync_cron" +msgstr "Per Cron-Job" + +msgid "ldap_sync_login" +msgstr "Bei Anmeldung der Benutzer" + +msgid "ldap_tbl_role_ass" +msgstr "Aktive Regeln für die Rollenzuordnung" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS kann nicht in Kombination mit Protokollversion 2 genutzt werden." + +msgid "ldap_update_field_info" +msgstr "Automatisch aktualisieren" + +msgid "ldap_update_roles" +msgstr "Rollenzuordnungen" + +msgid "ldap_user_attribute" +msgstr "Attributname der Anmeldekonten" + +msgid "ldap_user_dn" +msgstr "Suchbasis" + +msgid "ldap_user_mapping" +msgstr "Zuordnung der Profildaten" + +msgid "ldap_user_scope" +msgstr "Suchbereich" + +msgid "ldap_user_scope_info" +msgstr "Bereich für die Benutzersuche. Wählen Sie im Zweifelsfall \"Sub\"." + +msgid "ldap_user_sync" +msgstr "Einstellungen zur Benutzersynchronisierung" + +msgid "ldap_user_sync_cron" +msgstr "LDAP-Benutzersynchronisierung" + +msgid "ldap_user_sync_cron_info" +msgstr "Wenn aktiviert, werden Anmeldekonten aus dem LDAP-Verzeichnis importiert und optional laufend synchronisiert." + +msgid "ldap_user_sync_info" +msgstr "Legt fest, ob noch nicht in ILIAS vorhandene Benutzer automatisch beim ersten Login oder aber regelmäßig per Cron-Job angelegt werden." + +msgid "ldap_username_filter" +msgstr "Anmeldenamen-Filter" + +msgid "ldap_username_filter_info" +msgstr "Der Anmeldenamen-Filter kann optional verwendet werden, um diese LDAP-Serverkonfiguration anhand des auf der Anmeldeseite eingegebenen Anmeldenamen automatisch zu bestimmen. Das Zeichen „*“ kann als Platzhalter verwendet werden. Zum Beispiel entspricht „*example\\.com“ allen Anmeldenamen, die mit „example.com“ enden. Wenn der konfigurierte Filter mit dem eingegebenen Anmeldenamen übereinstimmt, wird diese LDAP-Serverkonfiguration bevorzugt, falls eine feste Authentifizierungsreihenfolge festgelegt ist." diff --git a/components/ILIAS/LDAP/lang/ldap_el.po b/components/ILIAS/LDAP/lang/ldap_el.po new file mode 100644 index 000000000000..c87bb094ffb1 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_el.po @@ -0,0 +1,422 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ldap\n" + +#, fuzzy +msgid "add_ldap_server" +msgstr "Add Server" + +#, fuzzy +msgid "ldap_add_missing" +msgstr "Assign Missing Roles" + +msgid "ldap_add_role_ass_rule" +msgstr "New Rule for Role Assignments" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +#, fuzzy +msgid "ldap_as_ds" +msgstr "Use as Data Source" + +#, fuzzy +msgid "ldap_as_ds_info" +msgstr "If activated, this LDAP configuration is used only for the synchronization of user accounts in combination with other authentication methods." + +msgid "ldap_assignment_type" +msgstr "Assignment Type" + +msgid "ldap_authentication_settings" +msgstr "Authentication Settings" + +msgid "ldap_bind_anonymous" +msgstr "Bind Anonymously" + +msgid "ldap_bind_user" +msgstr "Bind as User:" + +msgid "ldap_btn_add_role_ass" +msgstr "Add New Rule" + +#, fuzzy +msgid "ldap_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +#, fuzzy +msgid "ldap_choose_role" +msgstr "Choose Role" + +msgid "ldap_confirm_del_role_ass" +msgstr "Delete Role Assignmen" + +msgid "ldap_deleted_role_mapping" +msgstr "Deleted assignment." + +#, fuzzy +msgid "ldap_deleted_rule" +msgstr "Deleted selected role assignments." + +msgid "ldap_dn_info" +msgstr "Enter the distinguished name of the LDAP group." + +msgid "ldap_edit_role_ass_rule" +msgstr "Edit Role Assignment Rule" + +#, fuzzy +msgid "ldap_edit_role_assignment" +msgstr "Edit Role -> Group Assignment" + +#, fuzzy +msgid "ldap_err_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +msgid "ldap_filter_info" +msgstr "Filter that will be added to the search filter this way: (&(userattr=username)(userfilter))." + +#, fuzzy +msgid "ldap_global_role" +msgstr "Global Role" + +msgid "ldap_global_role_assignment" +msgstr "ILIAS-Role Assignment" + +msgid "ldap_global_role_info" +msgstr "Please choose an ILIAS Role new users will be assigned to." + +msgid "ldap_group_attribute" +msgstr "Attribute for Group" + +msgid "ldap_group_attribute_info" +msgstr "The group attribute to search for." + +msgid "ldap_group_dn" +msgstr "Group DN" + +msgid "ldap_group_dn_info" +msgstr "Gets prepended to basedn when searching for groups." + +msgid "ldap_group_dn_short" +msgstr "Group DN:" + +msgid "ldap_group_filter" +msgstr "LDAP Filter" + +msgid "ldap_group_filter_info" +msgstr "Filter that will be added to the search filter when searching for a group: (&(groupattr=group)(memberattr=username)(groupfilter))." + +msgid "ldap_group_member" +msgstr "Group Member Attribute" + +msgid "ldap_group_member_info" +msgstr "The attribute of the group object where the user dn may be found. Choose \"Attribute Value is DN\" if the member attribute is the distinguished name of the users." + +msgid "ldap_group_member_optional" +msgstr "Group Membership is Optional" + +msgid "ldap_group_member_short" +msgstr "Attribute:" + +msgid "ldap_group_membership" +msgstr "Group Membership" + +msgid "ldap_group_name" +msgstr "Group Name" + +msgid "ldap_group_name_info" +msgstr "The name of the group users have to be a member of to authenticate successfully." + +msgid "ldap_group_optional_info" +msgstr "If enabled, the group membership is not required for a successful authentication. Please enter a user filter for the members of these groups:
(&(userattr=username)(userfilter))" + +msgid "ldap_group_restrictions" +msgstr "Group Restrictions" + +msgid "ldap_group_scope" +msgstr "Search Scope" + +msgid "ldap_group_scope_info" +msgstr "Scope for group searching. If unsure choose \"Sub\"" + +msgid "ldap_group_search_base" +msgstr "Group Search Base" + +msgid "ldap_group_user_filter" +msgstr "User Filter" + +msgid "ldap_ilias_role" +msgstr "ILIAS Role" + +msgid "ldap_info_text" +msgstr "Information Text" + +msgid "ldap_info_text_info" +msgstr "If entered, this text will be shown in the repository and on the info screen for the object this role is assigned to." + +#, fuzzy +msgid "ldap_local_role" +msgstr "Local Role" + +msgid "ldap_mapping_info_type" +msgstr "Show Information also in the Repository/Personal Desktop" + +msgid "ldap_mapping_table" +msgstr "Assignment of LDAP Attributes to ILIAS User Profile" + +msgid "ldap_mapping_template" +msgstr "Template for objectClass:" + +msgid "ldap_member_info" +msgstr "The attribute of the group object where the user dn may be found." + +msgid "ldap_memberisdn" +msgstr "Attribute Value is DN" + +msgid "ldap_missing_bind_user" +msgstr "You have chosen \"Bind as User\": Please enter a valid LDAP username and password." + +msgid "ldap_missing_role_assignment" +msgstr "Please choose a global role new users will be assigned to." + +msgid "ldap_moment_sync" +msgstr "Type of Sychronization" + +msgid "ldap_new_role_assignment" +msgstr "Add New Role -> Group Assignment" + +#, fuzzy +msgid "ldap_plugin" +msgstr "Assignment by Plugin" + +#, fuzzy +msgid "ldap_plugin_id" +msgstr "Plugin Id" + +#, fuzzy +msgid "ldap_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +msgid "ldap_referrals" +msgstr "Referrals" + +msgid "ldap_referrals_info" +msgstr "If set, determines whether the LDAP library automatically follows referrals returned by LDAP servers or not." + +#, fuzzy +msgid "ldap_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +msgid "ldap_role_active" +msgstr "Enable Group Synchronization" + +msgid "ldap_role_assignments" +msgstr "Role Assignment" + +msgid "ldap_role_at_info" +msgstr "The assignment is based on a specific attribute in the LDAP user profile." + +msgid "ldap_role_at_name" +msgstr "Attribute Name" + +msgid "ldap_role_at_value" +msgstr "Attribute Value" + +msgid "ldap_role_bind_pass" +msgstr "Password" + +msgid "ldap_role_bind_pass_info" +msgstr "Password" + +msgid "ldap_role_bind_user" +msgstr "Usern DN" + +msgid "ldap_role_bind_user_info" +msgstr "Please enter a distinguished name of a LDAP user account. This user needs write access for the LDAP groups." + +msgid "ldap_role_by_attribute" +msgstr "LDAP Attribute" + +msgid "ldap_role_by_group" +msgstr "Groupmembership" + +#, fuzzy +msgid "ldap_role_by_plugin" +msgstr "By Plugin" + +msgid "ldap_role_group_assignments" +msgstr "Existing Role -> Group Assignments" + +msgid "ldap_role_grp_at" +msgstr "Attribute" + +msgid "ldap_role_grp_dn_info" +msgstr "Please enter the \"Distinguished Name\" of the LDAP Group." + +msgid "ldap_role_grp_info" +msgstr "Members of a specific LDAP Group will be assigned to the given ILIAS role." + +msgid "ldap_role_grp_isdn" +msgstr "Attribute value is DN" + +msgid "ldap_role_info" +msgstr "Enter the name of an ILIAS Role that will control the membership to the LDAP group." + +msgid "ldap_role_mapping" +msgstr "LDAP-Group -> Role Mapping" + +#, fuzzy +msgid "ldap_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +msgid "ldap_role_not_exists" +msgstr "A role with that name does not exist" + +#, fuzzy +msgid "ldap_role_selection" +msgstr "Role Selection" + +#, fuzzy +msgid "ldap_role_selection_info" +msgstr "Your selection is ambiguous. Please choose one of the following roles." + +msgid "ldap_role_settings" +msgstr "LDAP Group Synchronization Settings" + +msgid "ldap_rule_condition" +msgstr "condition" + +msgid "ldap_rule_type" +msgstr "Type of Assignment" + +msgid "ldap_scope_one" +msgstr "One" + +msgid "ldap_scope_sub" +msgstr "Sub" + +msgid "ldap_search_base_info" +msgstr "Gets prepended to basedn when searching for users." + +msgid "ldap_search_filter" +msgstr "LDAP Filter" + +msgid "ldap_server_bind_dn" +msgstr "User DN" + +msgid "ldap_server_bind_pass" +msgstr "Password" + +msgid "ldap_server_binding" +msgstr "Binding" + +msgid "ldap_server_name" +msgstr "Name of LDAP Configuration" + +msgid "ldap_server_name_info" +msgstr "Please choose a name for this LDAP server configuration." + +msgid "ldap_server_security_settings" +msgstr "Security Settings" + +msgid "ldap_server_short" +msgstr "Server URL:" + +msgid "ldap_server_url_info" +msgstr "A fully qualified URL for specifying the protocol, url and port to connect to. E.g \"ldap://ldap.ilias.de:389\"" + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "LDAP version to use, ususally 3." + +#, fuzzy +msgid "ldap_servers" +msgstr "LDAP Server" + +msgid "ldap_settings" +msgstr "Server Settings" + +msgid "ldap_sync_cron" +msgstr "Per Cron-Job" + +msgid "ldap_sync_login" +msgstr "On Login" + +msgid "ldap_tbl_role_ass" +msgstr "Avtive Rules" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS can not be used in combination with LDAPv2. Please choose LDAP version \"3\" or disable TLS support." + +msgid "ldap_update_field_info" +msgstr "Update automatically" + +#, fuzzy +msgid "ldap_update_roles" +msgstr "Role Assignments" + +msgid "ldap_user_attribute" +msgstr "Attribute for Login Name" + +msgid "ldap_user_dn" +msgstr "User DN" + +msgid "ldap_user_mapping" +msgstr "User Profile Mapping" + +msgid "ldap_user_scope" +msgstr "Search Scope" + +msgid "ldap_user_scope_info" +msgstr "Scope for user searching. If unsure choose \"Sub\"." + +msgid "ldap_user_sync" +msgstr "User Synchronization Settings" + +#, fuzzy +msgid "ldap_user_sync_cron" +msgstr "LDAP User Synchronization " + +#, fuzzy +msgid "ldap_user_sync_cron_info" +msgstr "If activated, user accounts will be imported from the LDAP directory and synchronised continuously as an option." + +msgid "ldap_user_sync_info" +msgstr "Defines whether new users are automatically created on login or regularly per Cron-Job." + +#, fuzzy +msgid "ldap_username_filter" +msgstr "Username Filter" + +#, fuzzy +msgid "ldap_username_filter_info" +msgstr "Use * as wildcard." diff --git a/components/ILIAS/LDAP/lang/ldap_en.po b/components/ILIAS/LDAP/lang/ldap_en.po new file mode 100644 index 000000000000..b2f8d5c3fa51 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_en.po @@ -0,0 +1,390 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ldap\n" + +msgid "add_ldap_server" +msgstr "Add Server" + +msgid "ldap_add_missing" +msgstr "Assign Missing Roles" + +msgid "ldap_add_role_ass_rule" +msgstr "New Rule for Role Assignments" + +msgid "ldap_add_roles" +msgstr "Add Roles" + +msgid "ldap_as_ds" +msgstr "Use as Data Source" + +msgid "ldap_as_ds_info" +msgstr "If activated, this LDAP configuration is used only for the synchronization of user accounts in combination with other authentication methods." + +msgid "ldap_assignment_type" +msgstr "Assignment Type" + +msgid "ldap_authentication_settings" +msgstr "Authentication Settings" + +msgid "ldap_bind_anonymous" +msgstr "Bind Anonymously" + +msgid "ldap_bind_user" +msgstr "Bind as User:" + +msgid "ldap_btn_add_role_ass" +msgstr "Add New Rule" + +msgid "ldap_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +msgid "ldap_choose_role" +msgstr "Choose Role" + +msgid "ldap_confirm_del_role_ass" +msgstr "Delete Role Assignment" + +msgid "ldap_deleted_role_mapping" +msgstr "Deleted assignment." + +msgid "ldap_deleted_rule" +msgstr "Deleted selected role assignments." + +msgid "ldap_dn_info" +msgstr "Enter the distinguished name of the LDAP group." + +msgid "ldap_edit_role_ass_rule" +msgstr "Edit Role Assignment Rule" + +msgid "ldap_edit_role_assignment" +msgstr "Edit Role ➜ Group Assignment" + +msgid "ldap_err_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +msgid "ldap_escapedn" +msgstr "Escape DN" + +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +msgid "ldap_filter_info" +msgstr "Filter that will be added to the search filter this way: (&(userattr=username)(userfilter))." + +msgid "ldap_global_role" +msgstr "Global Role" + +msgid "ldap_global_role_assignment" +msgstr "ILIAS-Role Assignment" + +msgid "ldap_global_role_info" +msgstr "Please choose an ILIAS Role new users will be assigned to. * The role selection is required in case you chose a type of synchronisation." + +msgid "ldap_group_attribute" +msgstr "Attribute for Group" + +msgid "ldap_group_attribute_info" +msgstr "The group attribute to search for." + +msgid "ldap_group_dn" +msgstr "Group DN" + +msgid "ldap_group_dn_info" +msgstr "Gets prepended to ‘BaseDN’ when searching for groups." + +msgid "ldap_group_dn_short" +msgstr "Group DN:" + +msgid "ldap_group_filter" +msgstr "LDAP Filter" + +msgid "ldap_group_filter_info" +msgstr "Filter that will be added to the search filter when searching for a group: (&(groupattr=group)(memberattr=username)(groupfilter))." + +msgid "ldap_group_member" +msgstr "Group Member Attribute" + +msgid "ldap_group_member_info" +msgstr "The attribute of the group object where the user dn may be found. Choose ‘Attribute Value is DN’ if the member attribute is the distinguished name of the users." + +msgid "ldap_group_member_optional" +msgstr "Group Membership is Optional" + +msgid "ldap_group_member_short" +msgstr "Attribute:" + +msgid "ldap_group_membership" +msgstr "Group Membership" + +msgid "ldap_group_name" +msgstr "Group Name" + +msgid "ldap_group_name_info" +msgstr "The name of the group users have to be a member of to authenticate successfully." + +msgid "ldap_group_optional_info" +msgstr "If enabled, the group membership is not required for a successful authentication. Please enter a user filter for the members of these groups:
(&(userattr=username)(userfilter))" + +msgid "ldap_group_restrictions" +msgstr "Group Membership Restrictions" + +msgid "ldap_group_scope" +msgstr "Search Scope" + +msgid "ldap_group_scope_info" +msgstr "Scope for group searching. If unsure choose ‘Sub’" + +msgid "ldap_group_search_base" +msgstr "Group Search Base" + +msgid "ldap_group_user_filter" +msgstr "User Filter" + +msgid "ldap_ilias_role" +msgstr "ILIAS Role Name" + +msgid "ldap_info_text" +msgstr "Information Text" + +msgid "ldap_info_text_info" +msgstr "If entered, this text will be shown on the info screen for the object this role is assigned to. Optionally this text is available in the Repository." + +msgid "ldap_local_role" +msgstr "Local Role" + +msgid "ldap_mapping_info_type" +msgstr "Show Information also in the Repository" + +msgid "ldap_mapping_table" +msgstr "Assignment of LDAP Attributes to ILIAS User Profile" + +msgid "ldap_mapping_template" +msgstr "Template for objectClass:" + +msgid "ldap_member_info" +msgstr "The attribute of the group object where the user dn may be found." + +msgid "ldap_memberisdn" +msgstr "Attribute Value is DN" + +msgid "ldap_missing_bind_user" +msgstr "You have chosen ‘Bind as User’: Please enter a valid LDAP username and password." + +msgid "ldap_missing_role_assignment" +msgstr "Please choose a global role new users will be assigned to." + +msgid "ldap_moment_sync" +msgstr "Type of Synchronization" + +msgid "ldap_new_role_assignment" +msgstr "Add New Role ➜ Group Assignment" + +msgid "ldap_plugin" +msgstr "Assignment by Plugin" + +msgid "ldap_plugin_id" +msgstr "Plugin ID" + +msgid "ldap_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +msgid "ldap_referrals" +msgstr "Referrals" + +msgid "ldap_referrals_info" +msgstr "If set, determines whether the LDAP library automatically follows referrals returned by LDAP servers or not. This should be disabled if you are using an active directory server." + +msgid "ldap_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +msgid "ldap_role_active" +msgstr "Enable Group Synchronization" + +msgid "ldap_role_assignments" +msgstr "Role Assignment" + +msgid "ldap_role_at_info" +msgstr "The assignment is based on a specific attribute in the LDAP user profile." + +msgid "ldap_role_at_name" +msgstr "Attribute Name" + +msgid "ldap_role_at_value" +msgstr "Attribute Value" + +msgid "ldap_role_bind_pass" +msgstr "Password" + +msgid "ldap_role_bind_pass_info" +msgstr "Password" + +msgid "ldap_role_bind_user" +msgstr "Users DN" + +msgid "ldap_role_bind_user_info" +msgstr "Please enter a distinguished name of a LDAP user account. This user needs write access for the LDAP groups." + +msgid "ldap_role_by_attribute" +msgstr "LDAP Attribute" + +msgid "ldap_role_by_group" +msgstr "Groupmembership" + +msgid "ldap_role_by_plugin" +msgstr "By Plugin" + +msgid "ldap_role_group_assignments" +msgstr "Existing Role ➜ Group Assignments" + +msgid "ldap_role_grp_at" +msgstr "Attribute" + +msgid "ldap_role_grp_dn_info" +msgstr "Please enter the ‘Distinguished Name’ of the LDAP Group." + +msgid "ldap_role_grp_info" +msgstr "Members of a specific LDAP Group will be assigned to the given ILIAS role." + +msgid "ldap_role_grp_isdn" +msgstr "Attribute value is DN" + +msgid "ldap_role_info" +msgstr "Enter the name of an ILIAS Role that will control the membership to the LDAP group." + +msgid "ldap_role_mapping" +msgstr "ILIAS Role ➜ LDAP Group Mapping" + +msgid "ldap_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +msgid "ldap_role_not_exists" +msgstr "A role with that name does not exist" + +msgid "ldap_role_selection" +msgstr "Role Selection" + +msgid "ldap_role_selection_info" +msgstr "Your selection is ambiguous. Please choose one of the following roles." + +msgid "ldap_role_settings" +msgstr "LDAP Group Synchronization Settings" + +msgid "ldap_rule_condition" +msgstr "Condition" + +msgid "ldap_rule_type" +msgstr "Type of Assignment" + +msgid "ldap_scope_one" +msgstr "One" + +msgid "ldap_scope_sub" +msgstr "Sub" + +msgid "ldap_search_base_info" +msgstr "Gets prepended to basedn when searching for users." + +msgid "ldap_search_filter" +msgstr "LDAP Filter" + +msgid "ldap_server_bind_dn" +msgstr "User DN" + +msgid "ldap_server_bind_pass" +msgstr "Password" + +msgid "ldap_server_binding" +msgstr "Binding" + +msgid "ldap_server_name" +msgstr "Name of LDAP Configuration" + +msgid "ldap_server_name_info" +msgstr "Please choose a name for this LDAP server configuration." + +msgid "ldap_server_security_settings" +msgstr "Security Settings" + +msgid "ldap_server_short" +msgstr "Server URL:" + +msgid "ldap_server_url_info" +msgstr "Please enter a fully qualified URL for specifying the protocol, url and port to connect to, e.g \"ldaps://ldap.ilias.de:636\". Multiple URLs can be comma-separated for failover support. In case of connection failures, ILIAS will automatically rotate through the available servers. Note: During authentication, URL rotation is performed in-memory only (not persisted). In other contexts (e.g. during the asynchronous import of accounts via cron job), each failed connection will rotate the URL order and persist it to the database, helping future requests avoid recently-failed servers." + +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "LDAP version to use, usually 3." + +msgid "ldap_servers" +msgstr "LDAP Server" + +msgid "ldap_settings" +msgstr "Server Settings" + +msgid "ldap_sync_cron" +msgstr "Per Cron Job" + +msgid "ldap_sync_login" +msgstr "On Login" + +msgid "ldap_tbl_role_ass" +msgstr "Active Rules" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS can not be used in combination with LDAPv2. Please choose LDAP version ‘3’ or disable TLS support." + +msgid "ldap_update_field_info" +msgstr "Update automatically" + +msgid "ldap_update_roles" +msgstr "Role Assignments" + +msgid "ldap_user_attribute" +msgstr "Attribute for Login Name" + +msgid "ldap_user_dn" +msgstr "User Search Base" + +msgid "ldap_user_mapping" +msgstr "User Profile Mapping" + +msgid "ldap_user_scope" +msgstr "Search Scope" + +msgid "ldap_user_scope_info" +msgstr "Scope for user searching. If unsure choose ‘Sub’." + +msgid "ldap_user_sync" +msgstr "User Synchronization Settings" + +msgid "ldap_user_sync_cron" +msgstr "LDAP User Synchronization" + +msgid "ldap_user_sync_cron_info" +msgstr "If activated, user accounts will be imported from the LDAP directory and synchronised continuously as an option." + +msgid "ldap_user_sync_info" +msgstr "Defines whether new users are automatically created on login or regularly per cron job." + +msgid "ldap_username_filter" +msgstr "Username Filter" + +msgid "ldap_username_filter_info" +msgstr "The username filter can be optionally used for the automatic determination of this LDAP server configuration by the entered username on the login page. The \"*\" character can be used as a wildcard. For example, \"*example\\.com\" matches all users whose entered username ends with \"example.com\". If the configured filter matches the entered username, this LDAP server configuration is preferred if a fixed authentication sequence is configured." diff --git a/components/ILIAS/LDAP/lang/ldap_es.po b/components/ILIAS/LDAP/lang/ldap_es.po new file mode 100644 index 000000000000..5cbafb6b721a --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_es.po @@ -0,0 +1,393 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: ldap\n" + +msgid "add_ldap_server" +msgstr "Añadir Servidor" + +msgid "ldap_add_missing" +msgstr "Asignar roles faltantes" + +msgid "ldap_add_role_ass_rule" +msgstr "Nueva regla para asignación de roles" + +msgid "ldap_add_roles" +msgstr "Add Roles" + +msgid "ldap_as_ds" +msgstr "Usar como fuente de datos" + +msgid "ldap_as_ds_info" +msgstr "Si se activa, esta configuración LDAP se utiliza únicamente para la sincronización de cuentas de usuario en combinación con otros métodos de autenticación (p. ej., CAS)." + +msgid "ldap_assignment_type" +msgstr "Tipo de asignación" + +msgid "ldap_authentication_settings" +msgstr "Ajustes de autenticación" + +msgid "ldap_bind_anonymous" +msgstr "Escuchar de forma anónima (Bind)" + +msgid "ldap_bind_user" +msgstr "Escuchar como usuario (Bind):" + +msgid "ldap_btn_add_role_ass" +msgstr "Añadir nueva regla" + +msgid "ldap_check_role_assignment" +msgstr "Asignación de roles tras inicios de sesión posteriores" + +msgid "ldap_choose_role" +msgstr "Elegir rol" + +msgid "ldap_confirm_del_role_ass" +msgstr "Eliminar asignación de rol" + +msgid "ldap_deleted_role_mapping" +msgstr "Asignación eliminada." + +msgid "ldap_deleted_rule" +msgstr "Se han eliminado las asignaciones de roles seleccionadas." + +msgid "ldap_dn_info" +msgstr "Introduzca el nombre distinguido (DN) del grupo LDAP." + +msgid "ldap_edit_role_ass_rule" +msgstr "Editar regla de asignación de roles" + +msgid "ldap_edit_role_assignment" +msgstr "Editar asignación Rol ➜ Grupo" + +msgid "ldap_err_missing_plugin_id" +msgstr "Por favor, introduzca un ID de plugin válido." + +msgid "ldap_escapedn" +msgstr "Escape DN" + +msgid "ldap_escapedn_info" +msgstr "Si está activado, los caracteres especiales en el \"Nombre Distinguido (DN)\" de las cuentas de usuario se escapan en las consultas de pertenencia a grupos." + +msgid "ldap_filter_info" +msgstr "Filtro que se añadirá al filtro de búsqueda de esta forma: (&(userattr=username)(userfilter))." + +msgid "ldap_global_role" +msgstr "Rol global" + +msgid "ldap_global_role_assignment" +msgstr "Asignación de roles de ILIAS" + +msgid "ldap_global_role_info" +msgstr "Elija un rol de ILIAS al que se asignarán los nuevos usuarios. * La selección de rol es obligatoria en caso de que haya elegido un tipo de sincronización." + +msgid "ldap_group_attribute" +msgstr "Atributo para grupo" + +msgid "ldap_group_attribute_info" +msgstr "El atributo de grupo a buscar." + +msgid "ldap_group_dn" +msgstr "DN del grupo" + +msgid "ldap_group_dn_info" +msgstr "Se antepone al 'BaseDN' cuando se buscan grupos." + +msgid "ldap_group_dn_short" +msgstr "DN del grupo:" + +msgid "ldap_group_filter" +msgstr "Filtro LDAP" + +msgid "ldap_group_filter_info" +msgstr "Filtro que se añadirá al filtro de búsqueda cuando se busque un grupo: (&(groupattr=group)(memberattr=username)(groupfilter))." + +msgid "ldap_group_member" +msgstr "Atributo de miembro del grupo" + +msgid "ldap_group_member_info" +msgstr "El atributo del objeto de grupo donde se puede encontrar el DN del usuario. Elija 'El valor del atributo es DN' si el atributo de miembro es el nombre distintivo (distinguished name) de los usuarios." + +msgid "ldap_group_member_optional" +msgstr "La pertenencia al grupo es opcional" + +msgid "ldap_group_member_short" +msgstr "Atributo:" + +msgid "ldap_group_membership" +msgstr "Pertenencia al grupo" + +msgid "ldap_group_name" +msgstr "Nombre del grupo" + +msgid "ldap_group_name_info" +msgstr "El nombre del grupo al que los usuarios deben pertenecer para autenticarse con éxito." + +msgid "ldap_group_optional_info" +msgstr "Si está habilitado, la pertenencia al grupo no es obligatoria para una autenticación exitosa. Por favor, introduzca un filtro de usuario para los miembros de estos grupos:
(&(userattr=username)(userfilter))" + +msgid "ldap_group_restrictions" +msgstr "Restricciones de pertenencia al grupo" + +msgid "ldap_group_scope" +msgstr "Ámbito de búsqueda" + +msgid "ldap_group_scope_info" +msgstr "Ámbito para la búsqueda de grupos. Si no está seguro, elija 'Sub'" + +msgid "ldap_group_search_base" +msgstr "Base de búsqueda de grupos" + +msgid "ldap_group_user_filter" +msgstr "Filtro de usuario" + +msgid "ldap_ilias_role" +msgstr "Nombre del rol de ILIAS" + +msgid "ldap_info_text" +msgstr "Texto de información" + +msgid "ldap_info_text_info" +msgstr "Si se introduce, este texto se mostrará en la pantalla de información del objeto al que está asignado este rol. Opcionalmente, este texto está disponible en el Repositorio." + +msgid "ldap_local_role" +msgstr "Rol local" + +msgid "ldap_mapping_info_type" +msgstr "Mostrar información también en el Repositorio" + +msgid "ldap_mapping_table" +msgstr "Asignación de atributos LDAP al perfil de usuario de ILIAS" + +msgid "ldap_mapping_template" +msgstr "Plantilla para objectClass:" + +msgid "ldap_member_info" +msgstr "El atributo del objeto de grupo donde se puede encontrar el DN del usuario." + +msgid "ldap_memberisdn" +msgstr "El valor del atributo es DN" + +msgid "ldap_missing_bind_user" +msgstr "Ha elegido ‘Vincular como usuario’: Por favor, introduzca un nombre de usuario y contraseña de LDAP válidos." + +msgid "ldap_missing_role_assignment" +msgstr "Por favor, elija un rol global al que se asignarán los nuevos usuarios." + +msgid "ldap_moment_sync" +msgstr "Tipo de sincronización" + +msgid "ldap_new_role_assignment" +msgstr "Añadir nueva asignación Rol ➜ Grupo" + +msgid "ldap_plugin" +msgstr "Asignación por Plugin" + +msgid "ldap_plugin_id" +msgstr "ID del Plugin" + +msgid "ldap_plugin_info" +msgstr "Validar la asignación de roles con un plugin. Por favor, introduzca un ID de plugin válido." + +msgid "ldap_referrals" +msgstr "Referidos (Referrals)" + +msgid "ldap_referrals_info" +msgstr "Si se establece, determina si la biblioteca LDAP sigue automáticamente los referidos devueltos por los servidores LDAP o no. Esto debe desactivarse si está utilizando un servidor Active Directory." + +msgid "ldap_remove_deprecated" +msgstr "Desasignar roles obsoletos" + +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +msgid "ldap_role_active" +msgstr "Activar sincronización de grupos" + +msgid "ldap_role_assignments" +msgstr "Asignación de roles" + +msgid "ldap_role_at_info" +msgstr "La asignación se basa en un atributo específico en el perfil de usuario de LDAP." + +msgid "ldap_role_at_name" +msgstr "Nombre del atributo" + +msgid "ldap_role_at_value" +msgstr "Valor del atributo" + +msgid "ldap_role_bind_pass" +msgstr "Contraseña" + +msgid "ldap_role_bind_pass_info" +msgstr "Contraseña" + +msgid "ldap_role_bind_user" +msgstr "DN de usuario" + +msgid "ldap_role_bind_user_info" +msgstr "Por favor, introduzca el nombre distinguido (DN) de una cuenta de usuario LDAP. Este usuario necesita permisos de escritura para los grupos LDAP." + +msgid "ldap_role_by_attribute" +msgstr "Atributo LDAP" + +msgid "ldap_role_by_group" +msgstr "Pertenencia a grupo" + +msgid "ldap_role_by_plugin" +msgstr "Por Plugin" + +msgid "ldap_role_group_assignments" +msgstr "Asignaciones existentes Rol ➜ Grupo" + +msgid "ldap_role_grp_at" +msgstr "Atributo" + +msgid "ldap_role_grp_dn_info" +msgstr "Por favor, introduzca el ‘Nombre Distinguido’ (DN) del grupo LDAP." + +msgid "ldap_role_grp_info" +msgstr "Los miembros de un grupo LDAP específico serán asignados al rol de ILIAS indicado." + +msgid "ldap_role_grp_isdn" +msgstr "El valor del atributo es DN" + +msgid "ldap_role_info" +msgstr "Introduzca el nombre de un rol de ILIAS que controlará la pertenencia al grupo LDAP." + +msgid "ldap_role_mapping" +msgstr "Mapeo de Rol ILIAS ➜ Grupo LDAP" + +msgid "ldap_role_name_info" +msgstr "Elija un rol global o introduzca el nombre de un rol local." + +msgid "ldap_role_not_exists" +msgstr "No existe un rol con ese nombre" + +msgid "ldap_role_selection" +msgstr "Selección de Rol" + +msgid "ldap_role_selection_info" +msgstr "Su selección es ambigua. Por favor, elija uno de los siguientes roles." + +msgid "ldap_role_settings" +msgstr "Ajustes de Sincronización de Grupos LDAP" + +msgid "ldap_rule_condition" +msgstr "Condición" + +msgid "ldap_rule_type" +msgstr "Tipo de Asignación" + +msgid "ldap_scope_one" +msgstr "Uno (Nivel actual)" + +msgid "ldap_scope_sub" +msgstr "Sub (Subárbol)" + +msgid "ldap_search_base_info" +msgstr "Se antepone al DN base al buscar usuarios." + +msgid "ldap_search_filter" +msgstr "Filtro LDAP" + +msgid "ldap_server_bind_dn" +msgstr "DN del usuario (Bind DN)" + +msgid "ldap_server_bind_pass" +msgstr "Contraseña" + +msgid "ldap_server_binding" +msgstr "Vinculación (Binding)" + +msgid "ldap_server_name" +msgstr "Nombre de la Configuración LDAP" + +msgid "ldap_server_name_info" +msgstr "Elija un nombre para esta configuración de servidor LDAP." + +msgid "ldap_server_security_settings" +msgstr "Ajustes de Seguridad" + +msgid "ldap_server_short" +msgstr "URL del Servidor:" + +msgid "ldap_server_url_info" +msgstr "Una URL completa para especificar el protocolo, la URL y el puerto para conectar. P. ej. \"ldaps://ldap.ilias.de:636\"." + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "Versión de LDAP a utilizar, normalmente 3." + +msgid "ldap_servers" +msgstr "Servidor LDAP" + +msgid "ldap_settings" +msgstr "Ajustes del Servidor" + +msgid "ldap_sync_cron" +msgstr "Mediante Tarea Cron" + +msgid "ldap_sync_login" +msgstr "Al Iniciar Sesión" + +msgid "ldap_tbl_role_ass" +msgstr "Reglas Activas" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS no se puede utilizar en combinación con LDAPv2. Por favor, elija la versión de LDAP '3' o desactive el soporte TLS." + +msgid "ldap_update_field_info" +msgstr "Actualizar automáticamente" + +msgid "ldap_update_roles" +msgstr "Asignaciones de Rol" + +msgid "ldap_user_attribute" +msgstr "Atributo para el Nombre de Usuario" + +msgid "ldap_user_dn" +msgstr "Base de Búsqueda de Usuarios" + +msgid "ldap_user_mapping" +msgstr "Mapeo de perfil de usuario" + +msgid "ldap_user_scope" +msgstr "Ámbito de búsqueda" + +msgid "ldap_user_scope_info" +msgstr "Ámbito para la búsqueda de usuarios. En caso de duda, elija 'Sub'." + +msgid "ldap_user_sync" +msgstr "Ajustes de sincronización de usuarios" + +msgid "ldap_user_sync_cron" +msgstr "Sincronización de usuarios LDAP" + +msgid "ldap_user_sync_cron_info" +msgstr "Si se activa, las cuentas de usuario se importarán del directorio LDAP y se sincronizarán de forma continua como opción." + +msgid "ldap_user_sync_info" +msgstr "Define si los nuevos usuarios se crean automáticamente al iniciar sesión o regularmente mediante una tarea programada (cron)." + +msgid "ldap_username_filter" +msgstr "Filtro de nombre de usuario" + +msgid "ldap_username_filter_info" +msgstr "El filtro de nombre de usuario puede utilizarse opcionalmente para la determinación automática de esta configuración del servidor LDAP mediante el nombre de usuario introducido en la página de inicio de sesión. El carácter \"*\" puede utilizarse como comodín. Por ejemplo, \"*example\\.com\" coincide con todos los usuarios cuyo nombre de usuario introducido termina en \"example.com\". Si el filtro configurado coincide con el nombre de usuario introducido, se preferirá esta configuración de servidor LDAP si se ha configurado una secuencia de autenticación fija." diff --git a/components/ILIAS/LDAP/lang/ldap_et.po b/components/ILIAS/LDAP/lang/ldap_et.po new file mode 100644 index 000000000000..19b95c00e104 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_et.po @@ -0,0 +1,401 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ldap\n" + +#, fuzzy +msgid "add_ldap_server" +msgstr "Add Server" + +msgid "ldap_add_missing" +msgstr "Assign Missing Roles" + +msgid "ldap_add_role_ass_rule" +msgstr "New Rule for Role Assignments" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +msgid "ldap_as_ds" +msgstr "Use as Data Source" + +msgid "ldap_as_ds_info" +msgstr "If activated, this LDAP configuration is used only for the synchronization of user accounts in combination with other authentication methods." + +msgid "ldap_assignment_type" +msgstr "Assignment Type" + +msgid "ldap_authentication_settings" +msgstr "Authentication Settings" + +msgid "ldap_bind_anonymous" +msgstr "Bind Anonymously" + +msgid "ldap_bind_user" +msgstr "Bind as User:" + +msgid "ldap_btn_add_role_ass" +msgstr "Add New Rule" + +msgid "ldap_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +msgid "ldap_choose_role" +msgstr "Choose Role" + +msgid "ldap_confirm_del_role_ass" +msgstr "Delete Role Assignment" + +msgid "ldap_deleted_role_mapping" +msgstr "Deleted assignment." + +msgid "ldap_deleted_rule" +msgstr "Deleted selected role assignments." + +msgid "ldap_dn_info" +msgstr "Enter the distinguished name of the LDAP group." + +msgid "ldap_edit_role_ass_rule" +msgstr "Edit Role Assignment Rule" + +msgid "ldap_edit_role_assignment" +msgstr "Edit Role -> Group Assignment" + +msgid "ldap_err_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +msgid "ldap_filter_info" +msgstr "Filter that will be added to the search filter this way: (&(userattr=username)(userfilter))." + +msgid "ldap_global_role" +msgstr "Global Role" + +msgid "ldap_global_role_assignment" +msgstr "ILIAS-Role Assignment" + +msgid "ldap_global_role_info" +msgstr "Please choose an ILIAS Role new users will be assigned to. * The role selection is required in case you chose a type of synchronisation." + +msgid "ldap_group_attribute" +msgstr "Attribute for Group" + +msgid "ldap_group_attribute_info" +msgstr "The group attribute to search for." + +msgid "ldap_group_dn" +msgstr "Group DN" + +msgid "ldap_group_dn_info" +msgstr "Gets prepended to \"BaseDN\" when searching for groups." + +msgid "ldap_group_dn_short" +msgstr "Group DN:" + +msgid "ldap_group_filter" +msgstr "LDAP Filter" + +msgid "ldap_group_filter_info" +msgstr "Filter that will be added to the search filter when searching for a group: (&(groupattr=group)(memberattr=username)(groupfilter))." + +msgid "ldap_group_member" +msgstr "Group Member Attribute" + +msgid "ldap_group_member_info" +msgstr "The attribute of the group object where the user dn may be found. Choose \"Attribute Value is DN\" if the member attribute is the distinguished name of the users." + +msgid "ldap_group_member_optional" +msgstr "Grupi liikmelisus on valikuline" + +msgid "ldap_group_member_short" +msgstr "Attribute:" + +msgid "ldap_group_membership" +msgstr "Grupi liikmelisus" + +msgid "ldap_group_name" +msgstr "Grupi nimi" + +msgid "ldap_group_name_info" +msgstr "The name of the group users have to be a member of to authenticate successfully." + +msgid "ldap_group_optional_info" +msgstr "If enabled, the group membership is not required for a successful authentication. Please enter a user filter for the members of these groups:
(&(userattr=username)(userfilter))" + +msgid "ldap_group_restrictions" +msgstr "Grupi piirangud" + +msgid "ldap_group_scope" +msgstr "Search Scope" + +msgid "ldap_group_scope_info" +msgstr "Scope for group searching. If unsure choose \"Sub\"" + +msgid "ldap_group_search_base" +msgstr "Group Search Base" + +msgid "ldap_group_user_filter" +msgstr "Kasutajate filter" + +msgid "ldap_ilias_role" +msgstr "ILIAS Role Name" + +msgid "ldap_info_text" +msgstr "Infotekst" + +msgid "ldap_info_text_info" +msgstr "If entered, this text will be shown on the info screen for the object this role is assigned to. Optionally this text is available in the Repository and on the Personal Desktop." + +msgid "ldap_local_role" +msgstr "Kohalik roll" + +msgid "ldap_mapping_info_type" +msgstr "Näita infot ka varamus/isiklikul töölaual" + +msgid "ldap_mapping_table" +msgstr "Assignment of LDAP Attributes to ILIAS User Profile" + +msgid "ldap_mapping_template" +msgstr "Template for objectClass:" + +msgid "ldap_member_info" +msgstr "The attribute of the group object where the user dn may be found." + +msgid "ldap_memberisdn" +msgstr "Attribute Value is DN" + +msgid "ldap_missing_bind_user" +msgstr "You have chosen \"Bind as User\": Please enter a valid LDAP username and password." + +msgid "ldap_missing_role_assignment" +msgstr "Please choose a global role new users will be assigned to." + +msgid "ldap_moment_sync" +msgstr "Type of Sychronization" + +msgid "ldap_new_role_assignment" +msgstr "Lisa uus roll -> Group Assignment" + +msgid "ldap_plugin" +msgstr "Assignment by Plugin" + +msgid "ldap_plugin_id" +msgstr "Plugin Id" + +msgid "ldap_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +msgid "ldap_referrals" +msgstr "Referrals" + +msgid "ldap_referrals_info" +msgstr "If set, determines whether the LDAP library automatically follows referrals returned by LDAP servers or not. This should be disabled if you are using an active directory server." + +msgid "ldap_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +msgid "ldap_role_active" +msgstr "Enable Group Synchronization" + +msgid "ldap_role_assignments" +msgstr "Role Assignment" + +msgid "ldap_role_at_info" +msgstr "The assignment is based on a specific attribute in the LDAP user profile." + +msgid "ldap_role_at_name" +msgstr "Attribute Name" + +msgid "ldap_role_at_value" +msgstr "Attribute Value" + +msgid "ldap_role_bind_pass" +msgstr "Password" + +msgid "ldap_role_bind_pass_info" +msgstr "Password" + +msgid "ldap_role_bind_user" +msgstr "Usern DN" + +msgid "ldap_role_bind_user_info" +msgstr "Please enter a distinguished name of a LDAP user account. This user needs write access for the LDAP groups." + +msgid "ldap_role_by_attribute" +msgstr "LDAP Attribute" + +msgid "ldap_role_by_group" +msgstr "Groupmembership" + +msgid "ldap_role_by_plugin" +msgstr "By Plugin" + +msgid "ldap_role_group_assignments" +msgstr "Existing Role -> Group Assignments" + +msgid "ldap_role_grp_at" +msgstr "Attribute" + +msgid "ldap_role_grp_dn_info" +msgstr "Please enter the \"Distinguished Name\" of the LDAP Group." + +msgid "ldap_role_grp_info" +msgstr "Members of a specific LDAP Group will be assigned to the given ILIAS role." + +msgid "ldap_role_grp_isdn" +msgstr "Attribute value is DN" + +msgid "ldap_role_info" +msgstr "Enter the name of an ILIAS Role that will control the membership to the LDAP group." + +msgid "ldap_role_mapping" +msgstr "ILIAS Role -> LDAP Group Mapping" + +msgid "ldap_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +msgid "ldap_role_not_exists" +msgstr "A role with that name does not exist" + +msgid "ldap_role_selection" +msgstr "Role Selection" + +msgid "ldap_role_selection_info" +msgstr "Your selection is ambiguous. Please choose one of the following roles." + +msgid "ldap_role_settings" +msgstr "LDAP Group Synchronization Settings" + +msgid "ldap_rule_condition" +msgstr "Condition" + +msgid "ldap_rule_type" +msgstr "Type of Assignment" + +msgid "ldap_scope_one" +msgstr "One" + +msgid "ldap_scope_sub" +msgstr "Sub" + +msgid "ldap_search_base_info" +msgstr "Gets prepended to basedn when searching for users." + +msgid "ldap_search_filter" +msgstr "LDAP Filter" + +msgid "ldap_server_bind_dn" +msgstr "User DN" + +msgid "ldap_server_bind_pass" +msgstr "Password" + +msgid "ldap_server_binding" +msgstr "Binding" + +msgid "ldap_server_name" +msgstr "Name of LDAP Configuration" + +msgid "ldap_server_name_info" +msgstr "Please choose a name for this LDAP server configuration." + +msgid "ldap_server_security_settings" +msgstr "Security Settings" + +msgid "ldap_server_short" +msgstr "Server URL:" + +msgid "ldap_server_url_info" +msgstr "A fully qualified URL for specifying the protocol, url and port to connect to. E.g \"ldap://ldap.ilias.de:389\". You may add multiple servers with commas separated." + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "LDAP version to use, ususally 3." + +#, fuzzy +msgid "ldap_servers" +msgstr "LDAP Server" + +msgid "ldap_settings" +msgstr "Server Settings" + +msgid "ldap_sync_cron" +msgstr "Per Cron-Job" + +msgid "ldap_sync_login" +msgstr "Sisse logimisel" + +msgid "ldap_tbl_role_ass" +msgstr "Active Rules" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS can not be used in combination with LDAPv2. Please choose LDAP version \"3\" or disable TLS support." + +msgid "ldap_update_field_info" +msgstr "Update automatically" + +msgid "ldap_update_roles" +msgstr "Role Assignments" + +msgid "ldap_user_attribute" +msgstr "Attribute for Login Name" + +msgid "ldap_user_dn" +msgstr "User Search Base" + +msgid "ldap_user_mapping" +msgstr "User Profile Mapping" + +msgid "ldap_user_scope" +msgstr "Search Scope" + +msgid "ldap_user_scope_info" +msgstr "Scope for user searching. If unsure choose \"Sub\"." + +msgid "ldap_user_sync" +msgstr "Kasutaja sünkroniseerimise seaded" + +msgid "ldap_user_sync_cron" +msgstr "LDAP User Synchronization" + +msgid "ldap_user_sync_cron_info" +msgstr "If activated, user accounts will be imported from the LDAP directory and synchronised continuously as an option." + +msgid "ldap_user_sync_info" +msgstr "Defines whether new users are automatically created on login or regularly per Cron-Job." + +#, fuzzy +msgid "ldap_username_filter" +msgstr "Username Filter" + +#, fuzzy +msgid "ldap_username_filter_info" +msgstr "Use * as wildcard." diff --git a/components/ILIAS/LDAP/lang/ldap_fa.po b/components/ILIAS/LDAP/lang/ldap_fa.po new file mode 100644 index 000000000000..1edb5c562c07 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_fa.po @@ -0,0 +1,405 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: ldap\n" + +#, fuzzy +msgid "add_ldap_server" +msgstr "Add Server" + +msgid "ldap_add_missing" +msgstr "Assign Missing Roles" + +msgid "ldap_add_role_ass_rule" +msgstr "New Rule for Role Assignments" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +msgid "ldap_as_ds" +msgstr "Use as Data Source" + +msgid "ldap_as_ds_info" +msgstr "If activated, this LDAP configuration is used only for the synchronization of user accounts in combination with other authentication methods." + +msgid "ldap_assignment_type" +msgstr "Assignment Type" + +msgid "ldap_authentication_settings" +msgstr "تنظیمات احراز هویت" + +msgid "ldap_bind_anonymous" +msgstr "Bind Anonymously" + +msgid "ldap_bind_user" +msgstr "Bind as User:" + +msgid "ldap_btn_add_role_ass" +msgstr "Add New Rule" + +msgid "ldap_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +#, fuzzy +msgid "ldap_choose_role" +msgstr "Choose Role" + +msgid "ldap_confirm_del_role_ass" +msgstr "Delete Role Assignment" + +msgid "ldap_deleted_role_mapping" +msgstr "Deleted assignment." + +msgid "ldap_deleted_rule" +msgstr "Deleted selected role assignments." + +msgid "ldap_dn_info" +msgstr "Enter the distinguished name of the LDAP group." + +msgid "ldap_edit_role_ass_rule" +msgstr "Edit Role Assignment Rule" + +#, fuzzy +msgid "ldap_edit_role_assignment" +msgstr "Edit Role -> Group Assignment" + +msgid "ldap_err_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +msgid "ldap_filter_info" +msgstr "Filter that will be added to the search filter this way: (&(userattr=username)(userfilter))." + +msgid "ldap_global_role" +msgstr "Global Role" + +msgid "ldap_global_role_assignment" +msgstr "ILIAS-Role Assignment" + +msgid "ldap_global_role_info" +msgstr "Please choose an ILIAS Role new users will be assigned to. * The role selection is required in case you chose a type of synchronisation." + +msgid "ldap_group_attribute" +msgstr "Attribute for Group" + +msgid "ldap_group_attribute_info" +msgstr "The group attribute to search for." + +msgid "ldap_group_dn" +msgstr "Group DN" + +msgid "ldap_group_dn_info" +msgstr "Gets prepended to \"BaseDN\" when searching for groups." + +msgid "ldap_group_dn_short" +msgstr "Group DN:" + +msgid "ldap_group_filter" +msgstr "LDAP Filter" + +msgid "ldap_group_filter_info" +msgstr "Filter that will be added to the search filter when searching for a group: (&(groupattr=group)(memberattr=username)(groupfilter))." + +msgid "ldap_group_member" +msgstr "Group Member Attribute" + +msgid "ldap_group_member_info" +msgstr "The attribute of the group object where the user dn may be found. Choose \"Attribute Value is DN\" if the member attribute is the distinguished name of the users." + +msgid "ldap_group_member_optional" +msgstr "Group Membership is Optional" + +msgid "ldap_group_member_short" +msgstr "Attribute:" + +msgid "ldap_group_membership" +msgstr "Group Membership" + +msgid "ldap_group_name" +msgstr "Group Name" + +msgid "ldap_group_name_info" +msgstr "The name of the group users have to be a member of to authenticate successfully." + +msgid "ldap_group_optional_info" +msgstr "If enabled, the group membership is not required for a successful authentication. Please enter a user filter for the members of these groups:
(&(userattr=username)(userfilter))" + +msgid "ldap_group_restrictions" +msgstr "Group Membership Restrictions" + +msgid "ldap_group_scope" +msgstr "Search Scope" + +msgid "ldap_group_scope_info" +msgstr "Scope for group searching. If unsure choose \"Sub\"" + +msgid "ldap_group_search_base" +msgstr "Group Search Base" + +msgid "ldap_group_user_filter" +msgstr "User Filter" + +msgid "ldap_ilias_role" +msgstr "ILIAS Role Name" + +msgid "ldap_info_text" +msgstr "Information Text" + +msgid "ldap_info_text_info" +msgstr "If entered, this text will be shown on the info screen for the object this role is assigned to. Optionally this text is available in the Repository and on the Personal Desktop." + +msgid "ldap_local_role" +msgstr "Local Role" + +msgid "ldap_mapping_info_type" +msgstr "Show Information also in the Repository/Personal Desktop" + +msgid "ldap_mapping_table" +msgstr "Assignment of LDAP Attributes to ILIAS User Profile" + +msgid "ldap_mapping_template" +msgstr "Template for objectClass:" + +msgid "ldap_member_info" +msgstr "The attribute of the group object where the user dn may be found." + +msgid "ldap_memberisdn" +msgstr "Attribute Value is DN" + +msgid "ldap_missing_bind_user" +msgstr "You have chosen \"Bind as User\": Please enter a valid LDAP username and password." + +msgid "ldap_missing_role_assignment" +msgstr "Please choose a global role new users will be assigned to." + +msgid "ldap_moment_sync" +msgstr "Type of Sychronization" + +msgid "ldap_new_role_assignment" +msgstr "Add New Role -> Group Assignment" + +msgid "ldap_plugin" +msgstr "Assignment by Plugin" + +msgid "ldap_plugin_id" +msgstr "Plugin Id" + +msgid "ldap_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +msgid "ldap_referrals" +msgstr "Referrals" + +msgid "ldap_referrals_info" +msgstr "If set, determines whether the LDAP library automatically follows referrals returned by LDAP servers or not. This should be disabled if you are using an active directory server." + +msgid "ldap_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +msgid "ldap_role_active" +msgstr "Enable Group Synchronization" + +msgid "ldap_role_assignments" +msgstr "Role Assignment" + +msgid "ldap_role_at_info" +msgstr "The assignment is based on a specific attribute in the LDAP user profile." + +msgid "ldap_role_at_name" +msgstr "Attribute Name" + +msgid "ldap_role_at_value" +msgstr "Attribute Value" + +msgid "ldap_role_bind_pass" +msgstr "رمز عبور" + +msgid "ldap_role_bind_pass_info" +msgstr "رمز عبور" + +msgid "ldap_role_bind_user" +msgstr "Usern DN" + +msgid "ldap_role_bind_user_info" +msgstr "Please enter a distinguished name of a LDAP user account. This user needs write access for the LDAP groups." + +msgid "ldap_role_by_attribute" +msgstr "LDAP Attribute" + +msgid "ldap_role_by_group" +msgstr "Groupmembership" + +msgid "ldap_role_by_plugin" +msgstr "By Plugin" + +msgid "ldap_role_group_assignments" +msgstr "Existing Role -> Group Assignments" + +msgid "ldap_role_grp_at" +msgstr "Attribute" + +msgid "ldap_role_grp_dn_info" +msgstr "Please enter the \"Distinguished Name\" of the LDAP Group." + +msgid "ldap_role_grp_info" +msgstr "Members of a specific LDAP Group will be assigned to the given ILIAS role." + +msgid "ldap_role_grp_isdn" +msgstr "Attribute value is DN" + +msgid "ldap_role_info" +msgstr "Enter the name of an ILIAS Role that will control the membership to the LDAP group." + +msgid "ldap_role_mapping" +msgstr "ILIAS Role -> LDAP Group Mapping" + +msgid "ldap_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +msgid "ldap_role_not_exists" +msgstr "A role with that name does not exist" + +msgid "ldap_role_selection" +msgstr "Role Selection" + +msgid "ldap_role_selection_info" +msgstr "Your selection is ambiguous. Please choose one of the following roles." + +msgid "ldap_role_settings" +msgstr "LDAP Group Synchronization Settings" + +msgid "ldap_rule_condition" +msgstr "Condition" + +msgid "ldap_rule_type" +msgstr "Type of Assignment" + +msgid "ldap_scope_one" +msgstr "One" + +msgid "ldap_scope_sub" +msgstr "Sub" + +msgid "ldap_search_base_info" +msgstr "Gets prepended to basedn when searching for users." + +msgid "ldap_search_filter" +msgstr "LDAP Filter" + +msgid "ldap_server_bind_dn" +msgstr "User DN" + +msgid "ldap_server_bind_pass" +msgstr "رمز عبور" + +msgid "ldap_server_binding" +msgstr "Binding" + +msgid "ldap_server_name" +msgstr "Name of LDAP Configuration" + +msgid "ldap_server_name_info" +msgstr "Please choose a name for this LDAP server configuration." + +msgid "ldap_server_security_settings" +msgstr "تنظیمات امنیت" + +msgid "ldap_server_short" +msgstr "Server URL:" + +msgid "ldap_server_url_info" +msgstr "A fully qualified URL for specifying the protocol, url and port to connect to. E.g \"ldap://ldap.ilias.de:389\". You may add multiple servers with commas separated." + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "LDAP version to use, ususally 3." + +#, fuzzy +msgid "ldap_servers" +msgstr "LDAP Server" + +msgid "ldap_settings" +msgstr "Server Settings" + +msgid "ldap_sync_cron" +msgstr "Per Cron-Job" + +msgid "ldap_sync_login" +msgstr "On Login" + +msgid "ldap_tbl_role_ass" +msgstr "Active Rules" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS can not be used in combination with LDAPv2. Please choose LDAP version \"3\" or disable TLS support." + +msgid "ldap_update_field_info" +msgstr "بروز رسانی اتوماتیک" + +msgid "ldap_update_roles" +msgstr "Role Assignments" + +msgid "ldap_user_attribute" +msgstr "Attribute for Login Name" + +msgid "ldap_user_dn" +msgstr "User Search Base" + +msgid "ldap_user_mapping" +msgstr "User Profile Mapping" + +msgid "ldap_user_scope" +msgstr "Search Scope" + +msgid "ldap_user_scope_info" +msgstr "Scope for user searching. If unsure choose \"Sub\"." + +msgid "ldap_user_sync" +msgstr "User Synchronization Settings" + +#, fuzzy +msgid "ldap_user_sync_cron" +msgstr "LDAP User Synchronization " + +#, fuzzy +msgid "ldap_user_sync_cron_info" +msgstr "If activated, user accounts will be imported from the LDAP directory and synchronised continuously as an option." + +msgid "ldap_user_sync_info" +msgstr "Defines whether new users are automatically created on login or regularly per Cron-Job." + +#, fuzzy +msgid "ldap_username_filter" +msgstr "Username Filter" + +#, fuzzy +msgid "ldap_username_filter_info" +msgstr "Use * as wildcard." diff --git a/components/ILIAS/LDAP/lang/ldap_fr.po b/components/ILIAS/LDAP/lang/ldap_fr.po new file mode 100644 index 000000000000..55e80894b3cb --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_fr.po @@ -0,0 +1,395 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: ldap\n" + +msgid "add_ldap_server" +msgstr "Ajouter serveur" + +msgid "ldap_add_missing" +msgstr "Assigner rôles manquants" + +msgid "ldap_add_role_ass_rule" +msgstr "Nouvelle règle pour les assignations de rôle" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +msgid "ldap_as_ds" +msgstr "Utiliser comme source de données" + +msgid "ldap_as_ds_info" +msgstr "Si activée, cette configuration de LDAP est utilisée uniquement pour la synchronisation des comptes d'utilisateur en association avec une autre méthode d'authentification (i.e. Radius)." + +msgid "ldap_assignment_type" +msgstr "Type d'assignation" + +msgid "ldap_authentication_settings" +msgstr "Paramètres d'Authentification" + +msgid "ldap_bind_anonymous" +msgstr "Bind de façon anonyme" + +msgid "ldap_bind_user" +msgstr "Bind comme utilisateur :" + +msgid "ldap_btn_add_role_ass" +msgstr "Ajouter nouvelle règle" + +msgid "ldap_check_role_assignment" +msgstr "Assignation de rôles après connexions ultérieures (logon)" + +msgid "ldap_choose_role" +msgstr "Choisir Rôle" + +msgid "ldap_confirm_del_role_ass" +msgstr "Supprimer assignation de rôle" + +msgid "ldap_deleted_role_mapping" +msgstr "Assignation supprimée." + +msgid "ldap_deleted_rule" +msgstr "Assignations de rôle sélectionnées supprimées." + +msgid "ldap_dn_info" +msgstr "Saisir le Distinguished Name du groupe LDAP." + +msgid "ldap_edit_role_ass_rule" +msgstr "Modifier règle d'assignation de rôle" + +msgid "ldap_edit_role_assignment" +msgstr "Editer Rôle ➜ Association Groupe" + +msgid "ldap_err_missing_plugin_id" +msgstr "Veuillez saisir un id de plugin valide." + +msgid "ldap_escapedn" +msgstr "Escape DN" + +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +msgid "ldap_filter_info" +msgstr "Filtre qui sera ajouté au filtre de recherche : (&(userattr=username)(userfilter))." + +msgid "ldap_global_role" +msgstr "Rôle global" + +msgid "ldap_global_role_assignment" +msgstr "Assignation de rôle ILIAS" + +msgid "ldap_global_role_info" +msgstr "Veuillez choisir un rôle ILIAS sur lequel les nouveaux utilisateurs seront assignés." + +msgid "ldap_group_attribute" +msgstr "Attribut pour le groupe" + +msgid "ldap_group_attribute_info" +msgstr "L'attribut du groupe à rechercher ." + +msgid "ldap_group_dn" +msgstr "DN de Groupe" + +msgid "ldap_group_dn_info" +msgstr "Récupère préfixé à la baseDN lors de recherche de groupes." + +msgid "ldap_group_dn_short" +msgstr "Groupe DN :" + +msgid "ldap_group_filter" +msgstr "Filtre LDAP" + +msgid "ldap_group_filter_info" +msgstr "Filtre qui sera ajouté au filtre de recherche lors de recherche pour un groupe : (&(groupattr=group)(memberattr=username)(groupfilter))." + +msgid "ldap_group_member" +msgstr "Attribut de membre de groupe" + +msgid "ldap_group_member_info" +msgstr "L'attribut de l'objet du groupe où l'utilisateur DN pourrait être trouvé. Choisir \"La valeur de l'attribut est DN\" si l'attribut du membre est le Distinguished Name des utilisateurs." + +msgid "ldap_group_member_optional" +msgstr "L'appartenance au groupe est facultative" + +msgid "ldap_group_member_short" +msgstr "Attribut :" + +msgid "ldap_group_membership" +msgstr "Appartenance au Groupe" + +msgid "ldap_group_name" +msgstr "Nom de groupe" + +msgid "ldap_group_name_info" +msgstr "Le nom des utilisateurs du groupe doit être connu pour être authentifié avec succès." + +msgid "ldap_group_optional_info" +msgstr "Si actif, l'appartenance au groupe n'est pas nécessaire pour une authentification valide. Veuilllez définir un filtre utilisateur pour les membres de ces groupes :
(&(userattr=username)(userfilter))" + +msgid "ldap_group_restrictions" +msgstr "Restrictions de groupe" + +msgid "ldap_group_scope" +msgstr "Périmètre de Recherche" + +msgid "ldap_group_scope_info" +msgstr "Champ pour la recherche de groupe. En cas de doute choisissez \"Sub\"" + +msgid "ldap_group_search_base" +msgstr "Base de recherche de groupe" + +msgid "ldap_group_user_filter" +msgstr "Filtre utilisateur" + +msgid "ldap_ilias_role" +msgstr "Rôle ILIAS" + +msgid "ldap_info_text" +msgstr "Message d'Information" + +msgid "ldap_info_text_info" +msgstr "Si saisi, ce texte sera affiché dans le catalogue et sur l'onglet Info de l'objet sur lequel ce rôle est assigné." + +msgid "ldap_local_role" +msgstr "Rôle local" + +msgid "ldap_mapping_info_type" +msgstr "Afficher les informations dans le catalogue et le bureau personnel" + +msgid "ldap_mapping_table" +msgstr "Assignation d'attributs LDAP au profil utilisateur ILIAS" + +msgid "ldap_mapping_template" +msgstr "Template pour objectClass:" + +msgid "ldap_member_info" +msgstr "L'attribut de l'objet du groupe où l'untilisateur DN pourrait être trouvé." + +msgid "ldap_memberisdn" +msgstr "La valeur d'attribut est DN" + +msgid "ldap_missing_bind_user" +msgstr "Vous avez choisi \"Bind comme utilisateur\" : Veuillez saisir un nom d'utilisateur LDAP valide et un mot de passe." + +msgid "ldap_missing_role_assignment" +msgstr "Veuillez choisir un rôle global sur lequel les nouveaux utilisateurs seront assignés." + +msgid "ldap_moment_sync" +msgstr "Type de la synchronisation" + +msgid "ldap_new_role_assignment" +msgstr "Ajouter nouveau rôle ➜ assignation de groupe" + +msgid "ldap_plugin" +msgstr "Assignation par Plugin" + +msgid "ldap_plugin_id" +msgstr "Id de plugin" + +msgid "ldap_plugin_info" +msgstr "Valider l'assignation de rôle avec un plugin. Veuillez saisir un id de plugin valide." + +msgid "ldap_referrals" +msgstr "Références" + +msgid "ldap_referrals_info" +msgstr "Si cochée, détermine si la librairie LDAP suit automatiquement ou pas les références envoyés par les serveurs LDAP." + +msgid "ldap_remove_deprecated" +msgstr "Déassigner rôles obsolètes" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +msgid "ldap_role_active" +msgstr "Activer synchronisation de groupe" + +msgid "ldap_role_assignments" +msgstr "Assignation de rôle" + +msgid "ldap_role_at_info" +msgstr "L'assignation est basé sur un attribut sppécifique dans le profil utilisateur du LDAP." + +msgid "ldap_role_at_name" +msgstr "Nom d'attribut" + +msgid "ldap_role_at_value" +msgstr "Valeur d'attribut" + +msgid "ldap_role_bind_pass" +msgstr "Mot de passe" + +msgid "ldap_role_bind_pass_info" +msgstr "Mot de passe" + +msgid "ldap_role_bind_user" +msgstr "DN Utilisateur" + +msgid "ldap_role_bind_user_info" +msgstr "Veuillez saisir le Distinguished Name d'un compte utilisateur LDAP. Cet utilisateur doit avoir un accès en écriture sur les groupes LDAP." + +msgid "ldap_role_by_attribute" +msgstr "Attribut LDAP" + +msgid "ldap_role_by_group" +msgstr "Adhésion de groupe" + +msgid "ldap_role_by_plugin" +msgstr "Par plugin" + +msgid "ldap_role_group_assignments" +msgstr "Rôle existant ➜ assignations de groupe" + +msgid "ldap_role_grp_at" +msgstr "Attribut" + +msgid "ldap_role_grp_dn_info" +msgstr "Veuillez saisir le Distinguished Nmanr du groupe LDAP." + +msgid "ldap_role_grp_info" +msgstr "Les membres d'un groupe LDAP spécifique seont assignés au rôle ILIAS fourni." + +msgid "ldap_role_grp_isdn" +msgstr "La valeur d'attribut est DN" + +msgid "ldap_role_info" +msgstr "Saisir le nom d'un rôle ILIAS qui contrôlera l'adhésion à un groupe LDAP." + +msgid "ldap_role_mapping" +msgstr "Groupe LDAP ➜ Mappage de rôle" + +msgid "ldap_role_name_info" +msgstr "Veuillez soit choisir un rôle global soit saisir le nom d'un rôle local." + +msgid "ldap_role_not_exists" +msgstr "Un rôle avec ce nom n'existe pas" + +msgid "ldap_role_selection" +msgstr "Sélection de rôle" + +msgid "ldap_role_selection_info" +msgstr "Votre sélection est ambigue. Veuillez choisir l'un des rôles suivants." + +msgid "ldap_role_settings" +msgstr "Paramètres de synchronisation de groupe LDAP" + +msgid "ldap_rule_condition" +msgstr "condition" + +msgid "ldap_rule_type" +msgstr "Type de l'assignation" + +msgid "ldap_scope_one" +msgstr "Un" + +msgid "ldap_scope_sub" +msgstr "Sous" + +msgid "ldap_search_base_info" +msgstr "Récupère préfixé à la baseDN lors de recherche d'utilisateurs." + +msgid "ldap_search_filter" +msgstr "Filtre LDAP" + +msgid "ldap_server_bind_dn" +msgstr "DN de l'utilisateur" + +msgid "ldap_server_bind_pass" +msgstr "Mot de Passe" + +msgid "ldap_server_binding" +msgstr "Authentification" + +msgid "ldap_server_name" +msgstr "Nom de Configuration LDAP" + +msgid "ldap_server_name_info" +msgstr "Veuillez choisir un nom pour cette configuration de serveur LDAP." + +msgid "ldap_server_security_settings" +msgstr "Paramètres de Sécurité" + +msgid "ldap_server_short" +msgstr "URL du serveur :" + +msgid "ldap_server_url_info" +msgstr "Une URL certifiée pour spécifier le protocole, url et port à connecter e.g. \"ldap://ldap.ilias.de:389\"" + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "Version LDAP à utiliser, habituellement 3." + +msgid "ldap_servers" +msgstr "Serveur LDAP" + +msgid "ldap_settings" +msgstr "Paramètres du serveur" + +msgid "ldap_sync_cron" +msgstr "Par tâche Cron" + +msgid "ldap_sync_login" +msgstr "Sur connexion" + +msgid "ldap_tbl_role_ass" +msgstr "Activer règles" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS ne peut être utilisé en combinaison avec LDAPv2. Veuillez choisir LDAP version \"3\" ou désactiver le support TLS." + +msgid "ldap_update_field_info" +msgstr "Mettre à jour automatiquement" + +msgid "ldap_update_roles" +msgstr "Assignations de rôle" + +msgid "ldap_user_attribute" +msgstr "Attribut pour le nom de connexion (login)" + +msgid "ldap_user_dn" +msgstr "DN de l'utilisateur" + +msgid "ldap_user_mapping" +msgstr "Mappage du profil de l'utilisateur" + +msgid "ldap_user_scope" +msgstr "Périmètre de Recherche" + +msgid "ldap_user_scope_info" +msgstr "Périmètre pour la recherche d'utilisateur. En cas de doute choisissez \"Sub\"." + +msgid "ldap_user_sync" +msgstr "Paramètres de synchronisation de l'utilisateur" + +msgid "ldap_user_sync_cron" +msgstr "Synchronisation Utilisateurs LDAP" + +msgid "ldap_user_sync_cron_info" +msgstr "Lorsque activé, les comptes utilisateurs sont importés depuis l'annuaire LDAP et synchronisés en permanence (en option)." + +msgid "ldap_user_sync_info" +msgstr "Définit si les nouveaux utilisateurs sont automatiquement créés sur connexion ou périodiquement par tâche Cron." + +msgid "ldap_username_filter" +msgstr "Filtre de noms d’utilisateurs" + +msgid "ldap_username_filter_info" +msgstr "Utiliser * comme un caractère générique." diff --git a/components/ILIAS/LDAP/lang/ldap_hr.po b/components/ILIAS/LDAP/lang/ldap_hr.po new file mode 100644 index 000000000000..3def2cb38413 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_hr.po @@ -0,0 +1,397 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: ldap\n" + +msgid "add_ldap_server" +msgstr "Dodaj server" + +msgid "ldap_add_missing" +msgstr "Dodijeli nedostajuće uloge" + +msgid "ldap_add_role_ass_rule" +msgstr "Novo pravilo za dodjelu uloga" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +msgid "ldap_as_ds" +msgstr "Koristite kao izvor podataka" + +msgid "ldap_as_ds_info" +msgstr "Ako se aktivira, ova konfiguracija LDAP-a koristi se samo za sinkronizaciju korisničkih računa u kombinaciji s drugim metodama provjere autentičnosti." + +msgid "ldap_assignment_type" +msgstr "Vrsta dodjele" + +msgid "ldap_authentication_settings" +msgstr "Postavke provjere autentičnosti" + +msgid "ldap_bind_anonymous" +msgstr "Poveži anonimno" + +msgid "ldap_bind_user" +msgstr "Poveži kao korisnika:" + +msgid "ldap_btn_add_role_ass" +msgstr "Dodaj novo pravilo" + +msgid "ldap_check_role_assignment" +msgstr "Dodjela uloga nakon kasnijih prijava" + +msgid "ldap_choose_role" +msgstr "Odaberi ulogu" + +msgid "ldap_confirm_del_role_ass" +msgstr "Izbriši dodjelu uloge" + +msgid "ldap_deleted_role_mapping" +msgstr "Dodjela je izbrisana." + +msgid "ldap_deleted_rule" +msgstr "Odabrane dodjele uloga su izbrisane." + +msgid "ldap_dn_info" +msgstr "Unesite razlikovno ime LDAP grupe." + +msgid "ldap_edit_role_ass_rule" +msgstr "Uredi pravilo za dodjelu uloga" + +msgid "ldap_edit_role_assignment" +msgstr "Uredi ulogu -> Dodjela grupe" + +msgid "ldap_err_missing_plugin_id" +msgstr "Unesite valjani ID dodatka." + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +msgid "ldap_filter_info" +msgstr "Filtar koji će se dodati filtru za pretraživanje na ovaj način: (&(userattr=username)(userfilter))." + +msgid "ldap_global_role" +msgstr "Globalna uloga" + +msgid "ldap_global_role_assignment" +msgstr "Dodjela uloga ILIAS-a" + +msgid "ldap_global_role_info" +msgstr "Molimo odaberite ulogu ILIAS-a kojoj će biti dodijeljeni novi korisnici. * Odabir uloge je potreban u slučaju da ste odabrali vrstu sinkronizacije." + +msgid "ldap_group_attribute" +msgstr "Atribut za grupu" + +msgid "ldap_group_attribute_info" +msgstr "Atribut grupe za pretraživanje." + +msgid "ldap_group_dn" +msgstr "DN grupe" + +msgid "ldap_group_dn_info" +msgstr "Osnova prilikom pretraživanja grupa. Stavlja se ispred \"BaseDN\"" + +msgid "ldap_group_dn_short" +msgstr "DN grupe:" + +msgid "ldap_group_filter" +msgstr "Filtar LDAP-a" + +msgid "ldap_group_filter_info" +msgstr "Filtar koji će se dodati filtru za pretraživanje prilikom pretraživanja grupe: (&(groupattr=group)(memberattr=username)(groupfilter))." + +msgid "ldap_group_member" +msgstr "Atribut člana grupe" + +msgid "ldap_group_member_info" +msgstr "Atribut objekta grupe u kojem se može naći korisnik dn. Odaberite 'Vrijednost atributa je DN' ako je atribut člana istaknuto ime korisnika." + +msgid "ldap_group_member_optional" +msgstr "Članstvo u grupi nije obavezno" + +msgid "ldap_group_member_short" +msgstr "Atribut:" + +msgid "ldap_group_membership" +msgstr "Članstvo u grupi" + +msgid "ldap_group_name" +msgstr "Ime grupe" + +msgid "ldap_group_name_info" +msgstr "Kako bi se uspješno provjerila autentičnost, korisnici grupe moraju biti članovi." + +msgid "ldap_group_optional_info" +msgstr "Ako je omogućeno, članstvo u grupi nije potrebno za uspješnu provjeru autentičnosti. Unesite korisnički filtar za članove ovih grupa:
(&(userattr=username)(userfilter))" + +msgid "ldap_group_restrictions" +msgstr "Ograničenja za članstvo u grupi" + +msgid "ldap_group_scope" +msgstr "Opseg pretraživanja" + +msgid "ldap_group_scope_info" +msgstr "Opseg za grupno pretraživanje. Ako niste sigurni, odaberite 'Sub'" + +msgid "ldap_group_search_base" +msgstr "Baza pretraživanja grupa" + +msgid "ldap_group_user_filter" +msgstr "Korisnički filtar" + +msgid "ldap_ilias_role" +msgstr "Ime uloge ILIAS-a" + +msgid "ldap_info_text" +msgstr "Tekst informacije" + +msgid "ldap_info_text_info" +msgstr "Ako se unese, ovaj će se tekst prikazati na stranici s informacijama za objekt kojem je dodijeljena ova uloga. Po želji je ovaj tekst dostupan u Repozitoriju i na Osobnoj radnoj površini." + +msgid "ldap_local_role" +msgstr "Lokalna uloga" + +msgid "ldap_mapping_info_type" +msgstr "Prikažite informacije i u repozitoriju/na osobnoj radnoj površini" + +msgid "ldap_mapping_table" +msgstr "Dodjela LDAP atributa korisničkom profilu ILIAS-a" + +msgid "ldap_mapping_template" +msgstr "Predložak za objectClass:" + +msgid "ldap_member_info" +msgstr "Atribut objekta grupe gdje se može naći korisnički dn." + +msgid "ldap_memberisdn" +msgstr "Vrijednost atributa je DN" + +msgid "ldap_missing_bind_user" +msgstr "Odabrali ste ‘Poveži kao korisnika’: Unesite važeće korisničko ime LDAP- ai lozinku." + +msgid "ldap_missing_role_assignment" +msgstr "Odaberite globalnu ulogu kojoj će se dodijeliti novi korisnici." + +msgid "ldap_moment_sync" +msgstr "Vrsta sinkronizacije" + +msgid "ldap_new_role_assignment" +msgstr "Dodaj novu ulogu -> Dodjela grupe" + +msgid "ldap_plugin" +msgstr "Dodjela pomoću dodatka" + +msgid "ldap_plugin_id" +msgstr "Id dodatka" + +msgid "ldap_plugin_info" +msgstr "Potvrdite dodjelu uloge dodatkom. Unesite valjani ID dodatka." + +msgid "ldap_referrals" +msgstr "Prosljeđivanja" + +msgid "ldap_referrals_info" +msgstr "Ako je postavljeno, određuje slijedi li LDAP knjižnica automatski prosljeđivanja koje vraćaju LDAP serveri ili ne. Ovo treba onemogućiti ako koristite aktivni server direktorija." + +msgid "ldap_remove_deprecated" +msgstr "Ukloni neovlaštene uloge" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +msgid "ldap_role_active" +msgstr "Omogući sinkronizaciju grupe" + +msgid "ldap_role_assignments" +msgstr "Dodjela uloga" + +msgid "ldap_role_at_info" +msgstr "Dodjela se temelji na određenom atributu u korisničkom profilu LDAP-a." + +msgid "ldap_role_at_name" +msgstr "Naziv atributa" + +msgid "ldap_role_at_value" +msgstr "Vrijednost atributa" + +msgid "ldap_role_bind_pass" +msgstr "Lozinka" + +msgid "ldap_role_bind_pass_info" +msgstr "Lozinka" + +msgid "ldap_role_bind_user" +msgstr "DN korisnika" + +msgid "ldap_role_bind_user_info" +msgstr "Unesite prepoznatljivo ime korisničkog računa LDAP-a. Ovaj korisnik treba pristup pisanju za LDAP grupe." + +msgid "ldap_role_by_attribute" +msgstr "Atribut LDAP-a" + +msgid "ldap_role_by_group" +msgstr "Članstvo u grupi" + +msgid "ldap_role_by_plugin" +msgstr "Dodatkom" + +msgid "ldap_role_group_assignments" +msgstr "Postojeća uloga -> Grupne dodjele" + +msgid "ldap_role_grp_at" +msgstr "Atribut" + +msgid "ldap_role_grp_dn_info" +msgstr "Molimo unesite ‘Razlikovno ime’ LDAP grupe." + +msgid "ldap_role_grp_info" +msgstr "Članovi određene LDAP grupe bit će dodijeljeni zadanoj ulozi ILIAS-a." + +msgid "ldap_role_grp_isdn" +msgstr "Vrijednost atributa je DN" + +msgid "ldap_role_info" +msgstr "Unesite ime uloge ILIAS-a koja će kontrolirati članstvo u LDAP grupi." + +msgid "ldap_role_mapping" +msgstr "Uloga ILIAS-a -> Mapiranje grupe LDAP-a" + +msgid "ldap_role_name_info" +msgstr "Odaberite globalnu ulogu ili unesite naziv lokalne uloge." + +msgid "ldap_role_not_exists" +msgstr "Uloga tog naziva ne postoji" + +msgid "ldap_role_selection" +msgstr "Odabir uloga" + +msgid "ldap_role_selection_info" +msgstr "Vaš je izbor dvosmislen. Odaberite jednu od sljedećih uloga." + +msgid "ldap_role_settings" +msgstr "Postavke sinkronizacije grupe LDAP-a" + +msgid "ldap_rule_condition" +msgstr "Stanje" + +msgid "ldap_rule_type" +msgstr "Vrsta dodjele" + +msgid "ldap_scope_one" +msgstr "Jedan" + +msgid "ldap_scope_sub" +msgstr "Pod" + +msgid "ldap_search_base_info" +msgstr "Osnova za pretraživanje korisnika. Stavlja se ispred \"BaseDN\"" + +msgid "ldap_search_filter" +msgstr "Filtar LDAP-a" + +msgid "ldap_server_bind_dn" +msgstr "DN korisnika" + +msgid "ldap_server_bind_pass" +msgstr "Lozinka" + +msgid "ldap_server_binding" +msgstr "Povezivanje" + +msgid "ldap_server_name" +msgstr "Naziv konfiguracije LDAP-a" + +msgid "ldap_server_name_info" +msgstr "Molimo odaberite ime za ovu konfiguraciju servera LDAP-a." + +msgid "ldap_server_security_settings" +msgstr "Sigurnosne postavke" + +msgid "ldap_server_short" +msgstr "URL servera:" + +msgid "ldap_server_url_info" +msgstr "Potpuno kvalificirani URL za specificiranje protokola, URL-a i porta za povezivanje. Npr. \"ldap://ldap.ilias.de:389\". Možete dodati više servera odvojenih zarezima." + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "Verzija LDAP-a koju treba koristiti, obično 3." + +msgid "ldap_servers" +msgstr "Server LDAP-a" + +msgid "ldap_settings" +msgstr "Postavke servera" + +msgid "ldap_sync_cron" +msgstr "Po Cron-Jobu" + +msgid "ldap_sync_login" +msgstr "Na prijavi" + +msgid "ldap_tbl_role_ass" +msgstr "Aktivna pravila" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS se ne može koristiti u kombinaciji s LDAPv2. Odaberite LDAP verziju ‘3’ ili onemogućite TLS podršku." + +msgid "ldap_update_field_info" +msgstr "Ažurirajte automatski" + +msgid "ldap_update_roles" +msgstr "Dodjeljivanje uloga" + +msgid "ldap_user_attribute" +msgstr "Atribut za ime za prijavu" + +msgid "ldap_user_dn" +msgstr "Baza pretraživanja korisnika" + +msgid "ldap_user_mapping" +msgstr "Mapiranje korisničkog profila" + +msgid "ldap_user_scope" +msgstr "Opseg pretraživanja" + +msgid "ldap_user_scope_info" +msgstr "Opseg pretraživanja korisnika. Ako niste sigurni, odaberite 'Sub'." + +msgid "ldap_user_sync" +msgstr "Postavke sinkronizacije korisnika" + +msgid "ldap_user_sync_cron" +msgstr "Sinkronizacija korisnika LDAP-a" + +msgid "ldap_user_sync_cron_info" +msgstr "Ako se aktiviraju, korisnički računi bit će uvezeni iz direktorija LDAP-a i kontinuirano sinkronizirani kao opcija." + +msgid "ldap_user_sync_info" +msgstr "Definira hoće li se novi korisnici automatski stvarati prilikom prijave ili redovito po Cron-Jobu." + +msgid "ldap_username_filter" +msgstr "Filtar korisničkog imena" + +msgid "ldap_username_filter_info" +msgstr "Upotrijebite * kao zamjenski znak." diff --git a/components/ILIAS/LDAP/lang/ldap_hu.po b/components/ILIAS/LDAP/lang/ldap_hu.po new file mode 100644 index 000000000000..a59c00e09ec1 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_hu.po @@ -0,0 +1,393 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ldap\n" + +msgid "add_ldap_server" +msgstr "Szerver hozzáadása" + +msgid "ldap_add_missing" +msgstr "Hiányzó szerepkörök összerendelése" + +msgid "ldap_add_role_ass_rule" +msgstr "Új szerepkör a szerep-összerendelésekhez" + +msgid "ldap_add_roles" +msgstr "Szerepkör hozzáadása" + +msgid "ldap_as_ds" +msgstr "Adatok forrásaként" + +msgid "ldap_as_ds_info" +msgstr "Ez az LDAP-konfiguráció a többi hitelesítési módszerrel együtt (például CAS) csak a felhasználói fiókok szinkronizációjához használható. A közvetlen LDAP-hitelesítés így nem lehetséges." + +msgid "ldap_assignment_type" +msgstr "Hozzárendelési típus" + +msgid "ldap_authentication_settings" +msgstr "Hitelesítési beállítások" + +msgid "ldap_bind_anonymous" +msgstr "Kapcsolódás névtelenül" + +msgid "ldap_bind_user" +msgstr "Kapcsolódás felhasználóval" + +msgid "ldap_btn_add_role_ass" +msgstr "Új szerepkör hozzáadása" + +msgid "ldap_check_role_assignment" +msgstr "Legutóbbi bejelentkezések utáni szerep-összerendelések" + +msgid "ldap_choose_role" +msgstr "Válasszon szabályt" + +msgid "ldap_confirm_del_role_ass" +msgstr "Szerep-összerendelés törlése" + +msgid "ldap_deleted_role_mapping" +msgstr "Összerendelés törlése" + +msgid "ldap_deleted_rule" +msgstr "Kiválasztott összerendelését sikeresen törölte." + +msgid "ldap_dn_info" +msgstr "Adja meg az LDAP-csoport megkülönböztető nevét." + +msgid "ldap_edit_role_ass_rule" +msgstr "Szerep-összerendelési szabály módosítása" + +msgid "ldap_edit_role_assignment" +msgstr "Szerepkör módosítása ➜ Csoporthoz rendelés" + +msgid "ldap_err_missing_plugin_id" +msgstr "Valós bővítmény azonosítót adjon meg!" + +msgid "ldap_escapedn" +msgstr "DN maszkolása" + +msgid "ldap_escapedn_info" +msgstr "A felhasználói fiókok ‘Megkülönböztetett név (DN)’-ében lévő speciális karaktereket maszkoljuk a csoporttagság lekérdézésében." + +msgid "ldap_filter_info" +msgstr "Szűrő, amely a keresési szűrőhöz a következőképpen adódik hozzá: (&(userattr=username)(userfilter)). Például (objectclass=user)" + +msgid "ldap_global_role" +msgstr "Globális szerepkör" + +msgid "ldap_global_role_assignment" +msgstr "ILIAS-szerepkör hozzárendelése" + +msgid "ldap_global_role_info" +msgstr "Válasszon egy ILIAS-szerepkört, melynek az új felhasználó automatikusan tagja lesz. * A szerepkiválasztás kötelező, ha választott szinkronizációt." + +msgid "ldap_group_attribute" +msgstr "Csoport attribútuma" + +msgid "ldap_group_attribute_info" +msgstr "A csoport attribútumának neve. Például cn" + +msgid "ldap_group_dn" +msgstr "Csoport DN" + +msgid "ldap_group_dn_info" +msgstr "Csoport keresésekor a BaseDN-hez fűzzük hozzá. Például ou=Groups" + +msgid "ldap_group_dn_short" +msgstr "Csoport DN:" + +msgid "ldap_group_filter" +msgstr "LDAP-szűrő" + +msgid "ldap_group_filter_info" +msgstr "Szűrő, amely a keresési szűrőhöz a következőképpen adódik hozzá: (&(groupattr=group)(memberattr=username)(groupfilter))." + +msgid "ldap_group_member" +msgstr "Csoporttagság attribútuma" + +msgid "ldap_group_member_info" +msgstr "A csoport attribútuma, ahol valószínűleg felhasználó DN található. Válassza a ‘Attribútum értéke DN’-t, ha a tag attribútuma a felhasználó egyedi neve." + +msgid "ldap_group_member_optional" +msgstr "A csoporttagság választható" + +msgid "ldap_group_member_short" +msgstr "Attribútum:" + +msgid "ldap_group_membership" +msgstr "Csoporttagság" + +msgid "ldap_group_name" +msgstr "Csoportok nevei" + +msgid "ldap_group_name_info" +msgstr "A sikeres hitelesítéshez szükséges, hogy a felhasználó a csoportok egyikének tagja legyen. A csoportokat vesszővel elválasztva sorolja fel. Például Hallgatok, Oktatok" + +msgid "ldap_group_optional_info" +msgstr "Nem szükséges a csoporttagság a sikeres hitelesítéshez. Adja meg ezen csoportok tagjainak felhasználószűrőjét:
(&(userattr=username)(userfilter))" + +msgid "ldap_group_restrictions" +msgstr "Csoporttagság megszorítások" + +msgid "ldap_group_scope" +msgstr "Keresési hatókör" + +msgid "ldap_group_scope_info" +msgstr "Hatókör csoport kereséséhez. Ha bizonytalan, válassza az ‘Al’-t." + +msgid "ldap_group_search_base" +msgstr "Csoportkeresési alap" + +msgid "ldap_group_user_filter" +msgstr "Felhasználószűrő" + +msgid "ldap_ilias_role" +msgstr "ILIAS-szerepnév" + +msgid "ldap_info_text" +msgstr "Információs szöveg" + +msgid "ldap_info_text_info" +msgstr "Ha meg van adva, ez a szöveg fog megjelenni az információs képernyőn azokhoz az objektumokhoz, amelyek ehhez a szerepkörhöz vannak rendelve. Választhatóan ez a szöveg elérhető a Tartalomtárban." + +msgid "ldap_local_role" +msgstr "Lokális szerepkör" + +msgid "ldap_mapping_info_type" +msgstr "Információ megjelenítése a Tartalomtárban" + +msgid "ldap_mapping_table" +msgstr "LDAP-tulajdonságok összerendelése ILIAS felhasználói profillal" + +msgid "ldap_mapping_template" +msgstr "Sablon objectClass-hoz" + +msgid "ldap_member_info" +msgstr "A csoportobjektum tulajdonsága, ahol a felhasználó DN valószínűleg található." + +msgid "ldap_memberisdn" +msgstr "Attribútum értéke DN" + +msgid "ldap_missing_bind_user" +msgstr "A ‘Kapcsolódás felhasználónévvel’ opciót választotta. Adjon meg egy érvényes LDAP-felhasználónevet és jelszót!" + +msgid "ldap_missing_role_assignment" +msgstr "Válasszon egy globális szerepkört, amelyhez hozzárendelésre kerülnek majd az új felhasználók!" + +msgid "ldap_moment_sync" +msgstr "Szinkronizáció típusa" + +msgid "ldap_new_role_assignment" +msgstr "Új szerepkör hozzáadása ➜ Csoport-összerendelés" + +msgid "ldap_plugin" +msgstr "Összerendelés bővítménnyel" + +msgid "ldap_plugin_id" +msgstr "Bővítmény azonosító" + +msgid "ldap_plugin_info" +msgstr "Szerep-összerendelés érvényesítése bővítménnyel. Adjon meg egy valós bővítmény azonosítót!" + +msgid "ldap_referrals" +msgstr "Átirányítások" + +msgid "ldap_referrals_info" +msgstr "Bejelölése azt jelenti, hogy az LDAP-kiszolgáló automatikusan követi az átirányításokat. Active Directory Server esetén ne használja." + +msgid "ldap_remove_deprecated" +msgstr "Érvénytelenített szerepkörök összerendelésének megszüntetése" + +msgid "ldap_remove_roles" +msgstr "Szerepkörök eltávolítása" + +msgid "ldap_role_active" +msgstr "Csoportszinkronizáció engedélyezése" + +msgid "ldap_role_assignments" +msgstr "Szerep-összerendelés" + +msgid "ldap_role_at_info" +msgstr "A hozzárendelés az LDAP-ban megadott speciális tulajdonságon alapszik." + +msgid "ldap_role_at_name" +msgstr "Tulajdonságnév" + +msgid "ldap_role_at_value" +msgstr "Attribútum értéke" + +msgid "ldap_role_bind_pass" +msgstr "Jelszó" + +msgid "ldap_role_bind_pass_info" +msgstr "Jelszó" + +msgid "ldap_role_bind_user" +msgstr "Felhasználói DN" + +msgid "ldap_role_bind_user_info" +msgstr "Adjon meg egy egyedi LDAP felhasználónevet! Ennek a felhasználónak írási jog kell az LDAP-csoportokhoz." + +msgid "ldap_role_by_attribute" +msgstr "LDAP-tulajdonság" + +msgid "ldap_role_by_group" +msgstr "Csoporttagság" + +msgid "ldap_role_by_plugin" +msgstr "Bővítménnyel" + +msgid "ldap_role_group_assignments" +msgstr "Létező szerepkör ➜ Csoport-összerendelések" + +msgid "ldap_role_grp_at" +msgstr "Tulajdonság" + +msgid "ldap_role_grp_dn_info" +msgstr "Adja meg az LDAP-csoport megkülönböztető nevét!" + +msgid "ldap_role_grp_info" +msgstr "A megadott LDAP-csoport tagjai hozzárendelésre fognak kerülni az adott ILIAS-szerepkörhöz." + +msgid "ldap_role_grp_isdn" +msgstr "Attribútum értéke DN" + +msgid "ldap_role_info" +msgstr "Adjon meg egy ILIAS-szerepkört, amely felügyeli az LDAP-csoport tagságot." + +msgid "ldap_role_mapping" +msgstr "LDAP-szerepkör ➜ LDAP-leképezés" + +msgid "ldap_role_name_info" +msgstr "Válasszon egy globális szerepkört, vagy adja meg egy helyi szerepkör nevét." + +msgid "ldap_role_not_exists" +msgstr "Nem létezik ilyen névvel szerepkör" + +msgid "ldap_role_selection" +msgstr "Szerepkiválasztás" + +msgid "ldap_role_selection_info" +msgstr "Nem egyértelmű a választása. Egyet válasszon az alábbi szerepkörök közül." + +msgid "ldap_role_settings" +msgstr "LDAP csoportszinkronizációs beállítások" + +msgid "ldap_rule_condition" +msgstr "feltétel" + +msgid "ldap_rule_type" +msgstr "Hozzárendelés típusa" + +msgid "ldap_scope_one" +msgstr "Egy" + +msgid "ldap_scope_sub" +msgstr "Al" + +msgid "ldap_search_base_info" +msgstr "Felhasználó keresésekor a BaseDN-hez fűzzük hozzá. Például ou=People" + +msgid "ldap_search_filter" +msgstr "LDAP-szűrő" + +msgid "ldap_server_bind_dn" +msgstr "Felhasználó megkülönböztetett neve
Distinguished name, DN. Például ldap.user@pelda.hu" + +msgid "ldap_server_bind_pass" +msgstr "Jelszó" + +msgid "ldap_server_binding" +msgstr "Kapcsolódás" + +msgid "ldap_server_name" +msgstr "LDAP-konfiguráció neve" + +msgid "ldap_server_name_info" +msgstr "Adjon nevet ennek az LDAP-konfigurációnak" + +msgid "ldap_server_security_settings" +msgstr "Biztonsági beállítások" + +msgid "ldap_server_short" +msgstr "LDAP-kiszolgáló URL-je" + +msgid "ldap_server_url_info" +msgstr "Teljes URL az LDAP-kiszolgáló eléréséhez (url és port). Például ldaps://ldap.pelda.hu:636 vagy ldaps://192.168.1.1:636." + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "Az LDAP-verziószáma, általában 3" + +msgid "ldap_servers" +msgstr "LDAP Szerver" + +msgid "ldap_settings" +msgstr "Kiszolgáló beállításai" + +msgid "ldap_sync_cron" +msgstr "Ütemezett feladattal" + +msgid "ldap_sync_login" +msgstr "Bejelentkezéskor" + +msgid "ldap_tbl_role_ass" +msgstr "Aktív szerepkörök" + +msgid "ldap_tls_conflict" +msgstr "LDAPv2 nem használható TLS-titkosítással. Válassza az LDAPv3-at, vagy tiltsa le a TLS-titkosítás használatát." + +msgid "ldap_update_field_info" +msgstr "Automatikus frissítés" + +msgid "ldap_update_roles" +msgstr "Szerep-összerendelés" + +msgid "ldap_user_attribute" +msgstr "Felhasználónév attribútuma
Például samaccountname" + +msgid "ldap_user_dn" +msgstr "Keresési alap" + +msgid "ldap_user_mapping" +msgstr "Felhasználói profil leképezése" + +msgid "ldap_user_scope" +msgstr "Keresési hatókör" + +msgid "ldap_user_scope_info" +msgstr "A keresése hatóköre (scope). Ha bizonytalan, válassza az Al-t." + +msgid "ldap_user_sync" +msgstr "Felhasználói szinkronizációs beállítások" + +msgid "ldap_user_sync_cron" +msgstr "LDAP-felhasználók szinkronizálása" + +msgid "ldap_user_sync_cron_info" +msgstr "Az LDAP-szerverről importáljuk és folyamatos szinkronizáljuk a felhasználói fiókokat." + +msgid "ldap_user_sync_info" +msgstr "Annak meghatározása, hogy az új felhasználói fiókok automatikusan jöjjenek létre bejelentkezéskor vagy rendszeres időközönként ütemezett feladattal." + +msgid "ldap_username_filter" +msgstr "Felhasználónév szűrése" + +msgid "ldap_username_filter_info" +msgstr "A felhasználónév-szűrő opcionálisan használható az LDAP-kiszolgáló konfigurációjának automatikus meghatározására a bejelentkezési oldalon megadott felhasználónév alapján. A * (csillag) karakter helyettesítő karakterként használható. Például az ‘*pelda\\.hu’ megfelel minden olyan felhasználónak, akinek a megadott felhasználóneve ‘pelda.hu’-ra végződik. Ha a konfigurált szűrő megegyezik a megadott felhasználónévvel, akkor ezt az LDAP-kiszolgáló konfigurációt részesítjük előnyben, ha rögzített hitelesítési sorrendet állítottak be." diff --git a/components/ILIAS/LDAP/lang/ldap_it.po b/components/ILIAS/LDAP/lang/ldap_it.po new file mode 100644 index 000000000000..9a5625a28356 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_it.po @@ -0,0 +1,395 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: ldap\n" + +msgid "add_ldap_server" +msgstr "Aggiungi Server" + +msgid "ldap_add_missing" +msgstr "Assegna ruoli mancanti" + +msgid "ldap_add_role_ass_rule" +msgstr "Nuova regola per le assegnazioni del ruolo" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +msgid "ldap_as_ds" +msgstr "Utilizza come sorgente dati" + +msgid "ldap_as_ds_info" +msgstr "Se attivata, questa configurazione LDAP viene utilizzata solo per la sincronizzazione degli account utente in combinazione con altri metodi di autenticazione (ad esempio CAS o Radius)." + +msgid "ldap_assignment_type" +msgstr "Tipo di Proprietà" + +msgid "ldap_authentication_settings" +msgstr "Regole di autenticazione" + +msgid "ldap_bind_anonymous" +msgstr "Relaziona anonimamente" + +msgid "ldap_bind_user" +msgstr "Relaziona come utente:" + +msgid "ldap_btn_add_role_ass" +msgstr "Aggiungi un nuovo ruolo" + +msgid "ldap_check_role_assignment" +msgstr "Assegnazione di ruoli dopo gli ultimi accessi" + +msgid "ldap_choose_role" +msgstr "Scegli ruolo" + +msgid "ldap_confirm_del_role_ass" +msgstr "Cancella le assegnazioni di Ruolo" + +msgid "ldap_deleted_role_mapping" +msgstr "Assegnazione cancellata." + +msgid "ldap_deleted_rule" +msgstr "Cancellate le assegnazioni dei ruoli selezionati" + +msgid "ldap_dn_info" +msgstr "Inserisci il nome esatto del gruppo LDAP." + +msgid "ldap_edit_role_ass_rule" +msgstr "Edita le regole di assegnazione del Ruolo." + +msgid "ldap_edit_role_assignment" +msgstr "Modifica ruolo -> Assegnazione gruppo" + +msgid "ldap_err_missing_plugin_id" +msgstr "Si prega si inserire un valido plug-in id." + +msgid "ldap_escapedn" +msgstr "Salva i caratteri speciali in DN" + +msgid "ldap_escapedn_info" +msgstr "Se abilitato, i caratteri speciali in \"Distinguished Name (DN)\" degli account utenti sono salvati nelle query per i membri dei gruppi." + +msgid "ldap_filter_info" +msgstr "Filtro che sarà aggiunto ai filtri di ricerca in questo modo: (&(userattr=username)(userfilter))." + +msgid "ldap_global_role" +msgstr "Ruolo globale" + +msgid "ldap_global_role_assignment" +msgstr "Assegnazione di ruolo in ILIAS" + +msgid "ldap_global_role_info" +msgstr "Per favore scegli un ruolo ILIAS a cui i nuovi tenti verranno assegnati." + +msgid "ldap_group_attribute" +msgstr "Attributi del gruppo" + +msgid "ldap_group_attribute_info" +msgstr "Attributi del Gruppo da ricercare." + +msgid "ldap_group_dn" +msgstr "Gruppo DN" + +msgid "ldap_group_dn_info" +msgstr "Viene anteposto a \"BaseDN\" quando si ricercano gruppi." + +msgid "ldap_group_dn_short" +msgstr "Gruppo DN:" + +msgid "ldap_group_filter" +msgstr "Filtro LDAP" + +msgid "ldap_group_filter_info" +msgstr "Filtro che sarà aggiunto ai filtri di ricerca, in caso di ricerca di gruppi, in questo modo: (&(groupattr=group)(memberattr=username)(groupfilter))." + +msgid "ldap_group_member" +msgstr "Attributi dei Membri di Gruppo" + +msgid "ldap_group_member_info" +msgstr "L'attributo dell'oggetto gruppo in cui è possibile trovare l'utente dn. Scegli \"Il valore dell'attributo è DN\" se l'attributo membro è il nome distinto degli utenti." + +msgid "ldap_group_member_optional" +msgstr "L'appartenenza al gruppo è opzionale." + +msgid "ldap_group_member_short" +msgstr "Attributo:" + +msgid "ldap_group_membership" +msgstr "Appartenenza al gruppo" + +msgid "ldap_group_name" +msgstr "Nome del Gruppo" + +msgid "ldap_group_name_info" +msgstr "Il nome del gruppo degli utenti deve essere quello di un membro per essere autenticato con successo." + +msgid "ldap_group_optional_info" +msgstr "Se abilitato, l'appartenenza al gruppo non è richiesta per l'autenticazione. Per favore inserisci un filtro utenti per i membri di questi gruppi:
(&(userattr=username)(userfilter))" + +msgid "ldap_group_restrictions" +msgstr "Restrizioni dei Membri di Grupo" + +msgid "ldap_group_scope" +msgstr "Tipo di ricerca" + +msgid "ldap_group_scope_info" +msgstr "Estensione della ricerca di Gruppi. Se non sei sicuro, scegli \"Sub\"." + +msgid "ldap_group_search_base" +msgstr "Base di ricerca del Gruppo" + +msgid "ldap_group_user_filter" +msgstr "Filtro utenti" + +msgid "ldap_ilias_role" +msgstr "Ruolo in ILIAS" + +msgid "ldap_info_text" +msgstr "Testo informativo" + +msgid "ldap_info_text_info" +msgstr "Se presente, questo testo sarà mostrato nella schermata delle informazioni dell'oggetto, assegnato a questo ruolo. Opzionalmente, questo testo è disponibile nel Repository." + +msgid "ldap_local_role" +msgstr "Ruolo locale" + +msgid "ldap_mapping_info_type" +msgstr "Mostra le Informazioni anche nel Repository" + +msgid "ldap_mapping_table" +msgstr "Assegnazione di attributi LDAP al profilo utente ILIAS." + +msgid "ldap_mapping_template" +msgstr "Modello per objectClass:" + +msgid "ldap_member_info" +msgstr "L'attributo dell'oggetto Gruppo, dove si trova l'utente dn" + +msgid "ldap_memberisdn" +msgstr "Il valore dell'attributo è DN" + +msgid "ldap_missing_bind_user" +msgstr "Hai scelto \"Relaziona come utente\". Per favore, inserisci username e password LDAP validi." + +msgid "ldap_missing_role_assignment" +msgstr "Per favore scegli un Ruolo generale a cui saranno assegnati i nuovi utenti" + +msgid "ldap_moment_sync" +msgstr "Tipo di sincronizzazione" + +msgid "ldap_new_role_assignment" +msgstr "Aggiungi un nuovo ruolo -> Assegnazione gruppo" + +msgid "ldap_plugin" +msgstr "Assegna tramite plugin" + +msgid "ldap_plugin_id" +msgstr "Id del plugin" + +msgid "ldap_plugin_info" +msgstr "Convalidare l'assegnazione di ruolo con un plugin. Si prega si inserire un valido id plugin." + +msgid "ldap_referrals" +msgstr "Referenze" + +msgid "ldap_referrals_info" +msgstr "Se impostato, determina se la libreria LDAP si aggiorna ai riferimenti del server LDAP, oppure no. Questo dovrebbe essere disabilitato, se si usa un Active Server Directory." + +msgid "ldap_remove_deprecated" +msgstr "Deassegna ruoli obsoleti" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +msgid "ldap_role_active" +msgstr "Abilita la sincronizzazione del gruppo" + +msgid "ldap_role_assignments" +msgstr "Assegnazione di ruolo" + +msgid "ldap_role_at_info" +msgstr "L'assegnazione è basata su uno specifico attributo nel profilo utente LDAP." + +msgid "ldap_role_at_name" +msgstr "Nome dell'attributo" + +msgid "ldap_role_at_value" +msgstr "Valore dell'attributo" + +msgid "ldap_role_bind_pass" +msgstr "Password" + +msgid "ldap_role_bind_pass_info" +msgstr "Password" + +msgid "ldap_role_bind_user" +msgstr "Usern DN" + +msgid "ldap_role_bind_user_info" +msgstr "Per favore inserisci il nome esatto di un account utente LDAP. Tale utente deve avere diritti di scrittura per i gruppi LDAP.
" + +msgid "ldap_role_by_attribute" +msgstr "Attributo LDAP" + +msgid "ldap_role_by_group" +msgstr "Appartenenza al gruppo" + +msgid "ldap_role_by_plugin" +msgstr "Con plugin" + +msgid "ldap_role_group_assignments" +msgstr "Ruoli esistenti -> Assegnazioni dei gruppi" + +msgid "ldap_role_grp_at" +msgstr "Attributi" + +msgid "ldap_role_grp_dn_info" +msgstr "Per favore inserisci il nome esatto del gruppo LDAP." + +msgid "ldap_role_grp_info" +msgstr "Membri di uno specifico gruppo LDAP sarano assegnati ad un dato ruolo ILIAS." + +msgid "ldap_role_grp_isdn" +msgstr "L'attributo del Valore è DN" + +msgid "ldap_role_info" +msgstr "Inserisci il nome di un ruolo ILIAS che controllerà l'appartenenza al gruppo LDAP." + +msgid "ldap_role_mapping" +msgstr "Ruolo ILIAS -> Mappatura gruppi LDAP" + +msgid "ldap_role_name_info" +msgstr "Si prega di scegliere un ruolo globale o immettere il nome di un ruolo locale." + +msgid "ldap_role_not_exists" +msgstr "Non esiste un ruolo con questo nome." + +msgid "ldap_role_selection" +msgstr "Selezione del ruolo" + +msgid "ldap_role_selection_info" +msgstr "La tua selezione è ambigua. Si prega di scegliere uno dei seguenti ruoli." + +msgid "ldap_role_settings" +msgstr "Impostazioni delle sincronizzazioni dei Gruppi LDAP" + +msgid "ldap_rule_condition" +msgstr "Condizione" + +msgid "ldap_rule_type" +msgstr "Tipo di assegnazione" + +msgid "ldap_scope_one" +msgstr "Uno" + +msgid "ldap_scope_sub" +msgstr "Richiesta" + +msgid "ldap_search_base_info" +msgstr "Viene anteposto a \"BaseDN\" quando si ricercano utenti." + +msgid "ldap_search_filter" +msgstr "Filtro LDAP" + +msgid "ldap_server_bind_dn" +msgstr "DN Utente" + +msgid "ldap_server_bind_pass" +msgstr "Password" + +msgid "ldap_server_binding" +msgstr "Relaziona" + +msgid "ldap_server_name" +msgstr "Nome della configurazione LDAP" + +msgid "ldap_server_name_info" +msgstr "Per favore scegli un nome per la configurazione di questo server LDAP." + +msgid "ldap_server_security_settings" +msgstr "Impostazioni di sicurezza" + +msgid "ldap_server_short" +msgstr "URL del server:" + +msgid "ldap_server_url_info" +msgstr "Un URL qualificato per specificare il protocollo, url e porta di connessione.
Esempio: \"ldap://ldap.ilias.de:389\".
Puoi aggiungere più server separati da una virgola." + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "Versione LDAP da usare, normalmente 3." + +msgid "ldap_servers" +msgstr "Server LDAP" + +msgid "ldap_settings" +msgstr "Impostazioni del server" + +msgid "ldap_sync_cron" +msgstr "Per Cron-Job" + +msgid "ldap_sync_login" +msgstr "Al login" + +msgid "ldap_tbl_role_ass" +msgstr "Regole attive" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS non può essere usato in combinazione con LDAPv2. Per favore, usa LDAP versione '3' o disabilita il supporto TLS." + +msgid "ldap_update_field_info" +msgstr "Aggiorna automaticamente" + +msgid "ldap_update_roles" +msgstr "Assegnazioni di ruolo" + +msgid "ldap_user_attribute" +msgstr "Attributi del Login Name" + +msgid "ldap_user_dn" +msgstr "Base di ricerca utenti" + +msgid "ldap_user_mapping" +msgstr "Mappatura dei profili utenti" + +msgid "ldap_user_scope" +msgstr "Tipo di ricerca" + +msgid "ldap_user_scope_info" +msgstr "Ambito di ricerca degli utenti. Se non sei sicuro, scegli \"Sub\"." + +msgid "ldap_user_sync" +msgstr "Impostazioni di sincronizzazione degli utenti" + +msgid "ldap_user_sync_cron" +msgstr "Sincronizzazione utente LDAP" + +msgid "ldap_user_sync_cron_info" +msgstr "Se attivo, gli account utenti saranno importati dalla directory LDAP e sincronizzati continuamente come operazione." + +msgid "ldap_user_sync_info" +msgstr "Definisce se i nuovi utenti sono creati automaticamente al login oppure con regolarità secondo un Cron-Job." + +msgid "ldap_username_filter" +msgstr "Filtro nome utente" + +msgid "ldap_username_filter_info" +msgstr "Utilizza * come carattere jolly." diff --git a/components/ILIAS/LDAP/lang/ldap_ja.po b/components/ILIAS/LDAP/lang/ldap_ja.po new file mode 100644 index 000000000000..c02b5d10f158 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_ja.po @@ -0,0 +1,393 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: ldap\n" + +msgid "add_ldap_server" +msgstr "サーバを追加" + +msgid "ldap_add_missing" +msgstr "未役割を割当てる" + +msgid "ldap_add_role_ass_rule" +msgstr "役割割当て用の新しいルール" + +msgid "ldap_add_roles" +msgstr "役割を選択追加" + +msgid "ldap_as_ds" +msgstr "データーソースとして使用" + +msgid "ldap_as_ds_info" +msgstr "有効にするとこのLDAP構成は他の認証方式(例:CASやRadius)の組み合わせとユーザアカウントの同期にのみ使用されます。" + +msgid "ldap_assignment_type" +msgstr "割当てのタイプ" + +msgid "ldap_authentication_settings" +msgstr "認証設定" + +msgid "ldap_bind_anonymous" +msgstr "匿名で認証" + +msgid "ldap_bind_user" +msgstr "ユーザで認証:" + +msgid "ldap_btn_add_role_ass" +msgstr "新規役割を追加" + +msgid "ldap_check_role_assignment" +msgstr "後でログイン時の役割割当て" + +msgid "ldap_choose_role" +msgstr "役割を選択" + +msgid "ldap_confirm_del_role_ass" +msgstr "役割割り当てを削除" + +msgid "ldap_deleted_role_mapping" +msgstr "割当てを削除しました。" + +msgid "ldap_deleted_rule" +msgstr "選択した役割割当を削除しました。" + +msgid "ldap_dn_info" +msgstr "LDAP グループの識別名を入力してください。" + +msgid "ldap_edit_role_ass_rule" +msgstr "役割割当てのルールを編集" + +msgid "ldap_edit_role_assignment" +msgstr "役割編集 -> グルーク割当て" + +msgid "ldap_err_missing_plugin_id" +msgstr "有効なプラグインIDを入力してください。" + +msgid "ldap_escapedn" +msgstr "DN回避" + +msgid "ldap_escapedn_info" +msgstr "有効にするとユーザアカウントの\"識別名\"の特定文字はグループメンバーシップ用の問合せが回避されます。" + +msgid "ldap_filter_info" +msgstr "検索フィルタへ追加されるフィルタは次の通り: (&(userattr=username)(userfilter))" + +msgid "ldap_global_role" +msgstr "グローバル 役割" + +msgid "ldap_global_role_assignment" +msgstr "ILIAS-役割割当て" + +msgid "ldap_global_role_info" +msgstr "新規ユーザへ割当てられるILIASの役割を選んでください。*同期のタイプを選んだ場合は役割割当てが必須です。" + +msgid "ldap_group_attribute" +msgstr "グループの検索" + +msgid "ldap_group_attribute_info" +msgstr "検索用のグループ属性" + +msgid "ldap_group_dn" +msgstr "グループDN" + +msgid "ldap_group_dn_info" +msgstr "グループ検索時に\"BaseDN\"へ付与" + +msgid "ldap_group_dn_short" +msgstr "グループDN:" + +msgid "ldap_group_filter" +msgstr "LDAPフィルタ" + +msgid "ldap_group_filter_info" +msgstr "グループ検索時に検索フィルタへ追加するフィルタ: (&(groupattr=group)(memberattr=username)(groupfilter))." + +msgid "ldap_group_member" +msgstr "グループメンバー属性" + +msgid "ldap_group_member_info" +msgstr "ユーザDNを見つけるグループ オブジェクトの属性。メンバー属性がユーザの識別名の場合は\"属性値はDN\"を選択。" + +msgid "ldap_group_member_optional" +msgstr "グループメンバーシップはオプション" + +msgid "ldap_group_member_short" +msgstr "属性:" + +msgid "ldap_group_membership" +msgstr "グループメンバーシップ" + +msgid "ldap_group_name" +msgstr "グループ名" + +msgid "ldap_group_name_info" +msgstr "グループユーザの名前は正しく認証されるメンバーである必要があります。" + +msgid "ldap_group_optional_info" +msgstr "有効にするとグループメンバーシップは認証許可を必要としません。これらのグループのメンバーシップ用のユーザフィルタを入力してください。:
(&(userattr=username)(userfilter))" + +msgid "ldap_group_restrictions" +msgstr "グループ メンバーシップの制限" + +msgid "ldap_group_scope" +msgstr "範囲を検索" + +msgid "ldap_group_scope_info" +msgstr "グループ検索の範囲。不確実な場合は\"Sub\"を選択。" + +msgid "ldap_group_search_base" +msgstr "グループ検索ベース" + +msgid "ldap_group_user_filter" +msgstr "ユーザフィルタ" + +msgid "ldap_ilias_role" +msgstr "ILIAS役割名" + +msgid "ldap_info_text" +msgstr "インフォメーションテキスト" + +msgid "ldap_info_text_info" +msgstr "入力するとこのテキストがこの役割に割当てられたオブジェクトをinfo画面上に表示されます。 必要に応じてこのテキストやリポジトリ内とパーソナルデスクトップ上で利用できます。" + +msgid "ldap_local_role" +msgstr "ローカル役割" + +msgid "ldap_mapping_info_type" +msgstr "リポジトリ/パーソナルデスクトップ内の情報も表示" + +msgid "ldap_mapping_table" +msgstr "LDAP属性のILIAS ユーザプロファイルへの割当て" + +msgid "ldap_mapping_template" +msgstr "オブジェクトクラス用のテンプレート:" + +msgid "ldap_member_info" +msgstr "ユーザDNのある場所のグループ オブジェクトの属性です。" + +msgid "ldap_memberisdn" +msgstr "属性値はDN" + +msgid "ldap_missing_bind_user" +msgstr " \"ユーザで認証\"を選択しました:LDAPユーザ名とパスワードを入力してください。" + +msgid "ldap_missing_role_assignment" +msgstr "新規ユーザが割当てられようにグローバル役割を選んでください。" + +msgid "ldap_moment_sync" +msgstr "同期のタイプ" + +msgid "ldap_new_role_assignment" +msgstr "新規役割を追加 -> グループ割当て" + +msgid "ldap_plugin" +msgstr "プラグインによる割当て" + +msgid "ldap_plugin_id" +msgstr "プラグインID" + +msgid "ldap_plugin_info" +msgstr "プラグイン有りの役割割当てを検証します。有効なプラグインIDを入力してください。" + +msgid "ldap_referrals" +msgstr "照会" + +msgid "ldap_referrals_info" +msgstr "設定するとLDAPライブラリーはLDAPサーバが返す照会を自動的にフォローするかどうかを決定します。アクティブディレクトリサーバを使用している場合は機能しないようにする事が必須です。" + +msgid "ldap_remove_deprecated" +msgstr "未使用の役割を解除" + +msgid "ldap_remove_roles" +msgstr "役割を削除" + +msgid "ldap_role_active" +msgstr "グループ 同期を有効" + +msgid "ldap_role_assignments" +msgstr "役割割当て" + +msgid "ldap_role_at_info" +msgstr "割当はLDAPユーザプロファイル内の特定の属性に基づいています。" + +msgid "ldap_role_at_name" +msgstr "属性名" + +msgid "ldap_role_at_value" +msgstr "属性値" + +msgid "ldap_role_bind_pass" +msgstr "パスワード" + +msgid "ldap_role_bind_pass_info" +msgstr "パスワード" + +msgid "ldap_role_bind_user" +msgstr "Usern DN" + +msgid "ldap_role_bind_user_info" +msgstr "LDAP ユーザアカウントの識別名を入力してください。 このユーザはLDAP グループの書込み権が必要です。" + +msgid "ldap_role_by_attribute" +msgstr "LDAP属性" + +msgid "ldap_role_by_group" +msgstr "グループメンバーシップ" + +msgid "ldap_role_by_plugin" +msgstr "プラグインによる" + +msgid "ldap_role_group_assignments" +msgstr "既存の役割 -> グループ割当て" + +msgid "ldap_role_grp_at" +msgstr "属性" + +msgid "ldap_role_grp_dn_info" +msgstr "LDAPグループの \"識別名\" を入力してください。" + +msgid "ldap_role_grp_info" +msgstr "特定のLDAPグループメンバーは与えられたILIAS役割に割当てられます。" + +msgid "ldap_role_grp_isdn" +msgstr "属性値はDN" + +msgid "ldap_role_info" +msgstr "LDAPグループのメンバーシップをコントロールするILIAS役割名を入力してください。" + +msgid "ldap_role_mapping" +msgstr "ILIAS役割 -> LDAP グループMapping" + +msgid "ldap_role_name_info" +msgstr "グローバル役割を選ぶか、ローカル役割の名前を入力してください。" + +msgid "ldap_role_not_exists" +msgstr "その名前の役割は存在しません。" + +msgid "ldap_role_selection" +msgstr "役割選択" + +msgid "ldap_role_selection_info" +msgstr "選択がわかりません。次の役割のいずれかを選択してください。" + +msgid "ldap_role_settings" +msgstr "LDAP グループ同期設定" + +msgid "ldap_rule_condition" +msgstr "条件" + +msgid "ldap_rule_type" +msgstr "割当てタイプ" + +msgid "ldap_scope_one" +msgstr "One" + +msgid "ldap_scope_sub" +msgstr "Sub" + +msgid "ldap_search_base_info" +msgstr "ユーザ検索時にはbasednへ付与する" + +msgid "ldap_search_filter" +msgstr "LDAPフィルタ" + +msgid "ldap_server_bind_dn" +msgstr "ユーザDN" + +msgid "ldap_server_bind_pass" +msgstr "パスワード" + +msgid "ldap_server_binding" +msgstr "認証操作" + +msgid "ldap_server_name" +msgstr "LDAP構成名" + +msgid "ldap_server_name_info" +msgstr "このLDAPサーバーの構成名を選んでください。" + +msgid "ldap_server_security_settings" +msgstr "セキュリティ設定" + +msgid "ldap_server_short" +msgstr "サーバーURL" + +msgid "ldap_server_url_info" +msgstr "指定のプロトコル、URL、ポートにより接続する完全修飾のURL名。 例 \"ldap://ldap.ilias.de:389\"。複数のサーバをコンマ区切りで追記できます。" + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "使用するLDAPバージョンは通常3です。" + +msgid "ldap_servers" +msgstr "LDAP Server" + +msgid "ldap_settings" +msgstr "サーバー設定" + +msgid "ldap_sync_cron" +msgstr "Cron-Jobごと" + +msgid "ldap_sync_login" +msgstr "ログオン時" + +msgid "ldap_tbl_role_ass" +msgstr "ルールをアクティブにする" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLSはLDAPv2と組合わせて使用する事はできません。LDAPバージョン \"3\"を選択するかTLSサポートを無効にしてください。" + +msgid "ldap_update_field_info" +msgstr "自動更新" + +msgid "ldap_update_roles" +msgstr "役割割当て" + +msgid "ldap_user_attribute" +msgstr "ログイン名属性" + +msgid "ldap_user_dn" +msgstr "ユーザ検索ベース" + +msgid "ldap_user_mapping" +msgstr "ユーザプロファイルのマッピング" + +msgid "ldap_user_scope" +msgstr "検索範囲" + +msgid "ldap_user_scope_info" +msgstr "ユーザ検索範囲。よく分からない場合は\"Sub\"を選択。" + +msgid "ldap_user_sync" +msgstr "ユーザ同期設定" + +msgid "ldap_user_sync_cron" +msgstr "LDAPユーザ同期" + +msgid "ldap_user_sync_cron_info" +msgstr "有効にするとユーザアカウントがLDAPディレクトリからインポートされてオプションで同期を継続します。" + +msgid "ldap_user_sync_info" +msgstr "新規ユーザをログイン時あるいは定期Cron ジョブで自動生成するかを定義します。" + +msgid "ldap_username_filter" +msgstr "ユーザ名フィルター" + +msgid "ldap_username_filter_info" +msgstr "ワイルドカードに*を使用" diff --git a/components/ILIAS/LDAP/lang/ldap_ka.po b/components/ILIAS/LDAP/lang/ldap_ka.po new file mode 100644 index 000000000000..65158fad481e --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_ka.po @@ -0,0 +1,407 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ldap\n" + +#, fuzzy +msgid "add_ldap_server" +msgstr "Add Server" + +msgid "ldap_add_missing" +msgstr "დაკარგული პასუხისმგებლობების დანიშვნა" + +msgid "ldap_add_role_ass_rule" +msgstr "ახალი წესი პასუხისმგებლობის დანიშვნებზე" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +msgid "ldap_as_ds" +msgstr "მონაცემთა წყაროების გამოყენება" + +msgid "ldap_as_ds_info" +msgstr "თუ გააქტიურებულია, ეს LDAPკონფიგურაცია გამოიყენება მომხმარებელთა ანგარიშების სინქრონიზაციიშტვის სხვა ავტორიზების მეთოდებთან კომბინაციაში ( მაგალითად CAS ან RADIUS)" + +msgid "ldap_assignment_type" +msgstr "დანიშვნის სახეობა" + +msgid "ldap_authentication_settings" +msgstr "ავტორიზების პარამეტრები" + +msgid "ldap_bind_anonymous" +msgstr "ანონიმურად დაკავშირება" + +msgid "ldap_bind_user" +msgstr "დავაკავშიროთ როგორც მომხმარებელი" + +msgid "ldap_btn_add_role_ass" +msgstr "ახალი წესის დამატება" + +msgid "ldap_check_role_assignment" +msgstr "გვიანი შესვლების შემდეგ პასუხისმგებლობეის დანიშვნა" + +#, fuzzy +msgid "ldap_choose_role" +msgstr "Choose Role" + +msgid "ldap_confirm_del_role_ass" +msgstr "პასუხისმგებლობის დანიშვნის წაშლა" + +msgid "ldap_deleted_role_mapping" +msgstr "წაშლილი დანიშვნა/დავალება" + +msgid "ldap_deleted_rule" +msgstr "მონიშნული დანიშნული პასუხისმგებლობა წაშლილია" + +msgid "ldap_dn_info" +msgstr "შეიყვანეთ განსხვავებული სახელი LDAP ჯგუფისთვის" + +msgid "ldap_edit_role_ass_rule" +msgstr "პასუხისმგებლობის დანიშვნის წესის რედაქტირება" + +#, fuzzy +msgid "ldap_edit_role_assignment" +msgstr "Edit Role -> Group Assignment" + +msgid "ldap_err_missing_plugin_id" +msgstr "გთხოვთ შეიყვანოთ სწორი შენაერთის აი დი" + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +msgid "ldap_filter_info" +msgstr "ფილტრი რომელიც დამატებული იქნება ძიების ფილტრში ამგვარად: (&(userattr=username)(userfilter))." + +msgid "ldap_global_role" +msgstr "გლობალური პასუხისმგებლობა" + +msgid "ldap_global_role_assignment" +msgstr "ილიასის პასუხისმგებლობის დანიშვნა" + +msgid "ldap_global_role_info" +msgstr "გთხოვთ აირციოთ ილიასის პასუხისმგებლობა რომელზეც ახალი მომხმარებლები იქნებიან დანიშნული. * პასუხისმგებლობის მონიშვნა არის required იმ შემთხვევაში თუ თქვენ სინქრონიზაციის სახეობა გაქვთ არჩეული" + +msgid "ldap_group_attribute" +msgstr "ჯგუფის განსაზღვრება" + +msgid "ldap_group_attribute_info" +msgstr "ჯგუფის განსაზღვრება რომ მოძებნოთ:" + +msgid "ldap_group_dn" +msgstr "ჯგუფი DN" + +#, fuzzy +msgid "ldap_group_dn_info" +msgstr "Gets prepended to ‘BaseDN’ when searching for groups." + +msgid "ldap_group_dn_short" +msgstr "ჯგუფი DN" + +msgid "ldap_group_filter" +msgstr "LDAP ფილტრი" + +msgid "ldap_group_filter_info" +msgstr "ფილტრი რომელიც დამატებული იქნება ძიების ფილტრშიჯგუფების ძიების დროს: (&(groupattr=group)(memberattr=username)(groupfilter))." + +msgid "ldap_group_member" +msgstr "ჯგუფის წევრის თვისება" + +msgid "ldap_group_member_info" +msgstr "LDAP" + +msgid "ldap_group_member_optional" +msgstr "ჯგუფში წევრობა არჩევითია" + +msgid "ldap_group_member_short" +msgstr "განსაზღვრება" + +msgid "ldap_group_membership" +msgstr "ჯგუფის წევრობა" + +msgid "ldap_group_name" +msgstr "ჯგუფის სახელი" + +msgid "ldap_group_name_info" +msgstr "ჯგუფის მომხმარებელთა სახელი უნდა იყოს წევრი წარმატებული ავტორიზებისთვის" + +msgid "ldap_group_optional_info" +msgstr "თუ გააქტიურებულია, ჯგუფის წევრობა არ არის მოთხოვნილი წარმატებული ავტორიზებისთვის. გთხოვთ შეიყვანოთ მომხმარებლის ფილტრი ამ ჯგუფის წევრებისთვის:
(&(userattr=username)(userfilter))" + +msgid "ldap_group_restrictions" +msgstr "ჯგუფის წევრობის შეზღუდვები" + +msgid "ldap_group_scope" +msgstr "ძიების ჰორიზონტი" + +msgid "ldap_group_scope_info" +msgstr "ჯგუფის ძიების ჰორიზონტი. თუ არ ხართ დარწმუნებული აირჩიეთ '\"ქვე\"" + +msgid "ldap_group_search_base" +msgstr "ჯგუფის ძიების ბაზა" + +msgid "ldap_group_user_filter" +msgstr "მომხმარებლის ფილტრი" + +msgid "ldap_ilias_role" +msgstr "ილიასის პასუხისმგებლობის სახელი" + +msgid "ldap_info_text" +msgstr "ინფორმაციის ტექსტი" + +msgid "ldap_info_text_info" +msgstr "თუ შეტანილია, ეს ტექსტი გამოჩნდება ინფორმაციის ფანჯარაში იმ ობიექტისთვის რომელზეც ეს პასუხისმგებლობაა დანიშნულია. არჩევითად ეს ტექსტი ხელმისაწვდომია საცავში და პირად მაგიდაზე" + +msgid "ldap_local_role" +msgstr "ადგილობრივი პასუხისმგებლობა" + +msgid "ldap_mapping_info_type" +msgstr "ინფორმაციის ცვენება საცავში/პირად მაგიდაზე" + +msgid "ldap_mapping_table" +msgstr "LDAP -ის მახასიათებლების ილიასის მომხმარებლის პროფილში დანიშვნა" + +msgid "ldap_mapping_template" +msgstr "ნიმუში ობიექტების კლასისთვის" + +msgid "ldap_member_info" +msgstr "ჯგუფის ობიექტის მახასიათებელი სადაც მომხმარებლის დნ ის მოძებნა შეიძლება" + +msgid "ldap_memberisdn" +msgstr "მახასიათებლის ღირებულის" + +msgid "ldap_missing_bind_user" +msgstr "თქვენ აირჩიეთ \" შევკრათ როგორც მომხმარებელი\" გთხოვთ შეიყვანოთ LDAP მომხმარებლის სახელი და პაროლი" + +msgid "ldap_missing_role_assignment" +msgstr "გთხოვთ აირჩიოთ გლობალური პასუხისმგებლობა რომელზეც ახალი მომხმარებლები დაინიშნებიან" + +msgid "ldap_moment_sync" +msgstr "სინქრონიზაციის სახეობა" + +msgid "ldap_new_role_assignment" +msgstr "ახალი პასუხისმგებლობის დამატება-> ჯგუფის დანიშვნა" + +msgid "ldap_plugin" +msgstr "დანიშვნა ცვალებადი პლატის მეშევეობით" + +msgid "ldap_plugin_id" +msgstr "ცვალებადი პლატების აი დი" + +msgid "ldap_plugin_info" +msgstr "დაამტკიცეთ ეს პასუხისმგებლობა ცვალებადი პლატის მეშვეობით" + +msgid "ldap_referrals" +msgstr "რეფერალები" + +msgid "ldap_referrals_info" +msgstr "თუ დაყენებულია, განსაზრვრავს ავტომატურად თან სდევს თუ არა LDAP ბიბლიოთეკა LDAP სერვერის მიერ დაბრუნებულ რეფერალებს" + +msgid "ldap_remove_deprecated" +msgstr "შემცირებული პასუხისმგებლობების დანიშვნების შეცვლა" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +msgid "ldap_role_active" +msgstr "ჯგუფის სინქრონიზაციის გააქტიურება" + +msgid "ldap_role_assignments" +msgstr "პასუხისმგებლობის დანიშვნა" + +msgid "ldap_role_at_info" +msgstr "დანიშვნა დაფუძვნებულია გარკვეულ თვისებაზე LDAP მომხმარებლის პროფილში" + +msgid "ldap_role_at_name" +msgstr "განსაზღვრების სახელი" + +msgid "ldap_role_at_value" +msgstr "განსაზღვრების ღირებულება" + +msgid "ldap_role_bind_pass" +msgstr "პაროლი" + +msgid "ldap_role_bind_pass_info" +msgstr "პაროლი" + +msgid "ldap_role_bind_user" +msgstr "მომხმარებლის DN" + +msgid "ldap_role_bind_user_info" +msgstr "გთხოვთ შეიყვანოთ განსხვავებული სახელი LDAP მომხამრებლის ანგარიშისთვის. Aამ მომხმარებელს სჭირდება წერილობითიი დაშვება LDAP ის ჯგუფებისთვის." + +msgid "ldap_role_by_attribute" +msgstr "LDAP განსაზღვრება" + +msgid "ldap_role_by_group" +msgstr "ჯგუფში წევრობა" + +msgid "ldap_role_by_plugin" +msgstr "პროგრამული გაფართოვების მეშვეობით" + +msgid "ldap_role_group_assignments" +msgstr "არსებული პასუხისმგებლობა->ჯგუფის დავალებები" + +msgid "ldap_role_grp_at" +msgstr "განსაზღვრება" + +msgid "ldap_role_grp_dn_info" +msgstr "გთხოვთ შეიყვანოთ LDAP ჯგუფის \"განსხვავებული სახელი\"" + +msgid "ldap_role_grp_info" +msgstr "LDAP ჯგუფის წევრები დანიშნულები იქნებიან არსებული ილიასის პასუხისმგებლობაზე" + +msgid "ldap_role_grp_isdn" +msgstr "განსაზღვრბის სახელი არის DN" + +msgid "ldap_role_info" +msgstr "შეიყვანეთ ილიასის პასუსიხმგებლობის სახელი რომელიც გააკონტროლებს LDAP ჯგუფში წევრობა" + +msgid "ldap_role_mapping" +msgstr "ილიასის პასუხისმგებლობა-> LDAP ჯგუფის რუკაზე გადატანა" + +msgid "ldap_role_name_info" +msgstr "გთხოვთ აირჩიოთ გლობალური პასუხისმგებლობა ან შეიყვანოთ ადგილობრივი პასუხისმგებლობის სახელი" + +msgid "ldap_role_not_exists" +msgstr "ამ სახელიტ პასუხისმგებლობა არ არსებობს" + +msgid "ldap_role_selection" +msgstr "პასუხისმგებლობის მონიშვნა" + +msgid "ldap_role_selection_info" +msgstr "თქვენი მონიშვნა გაურკვეველია. გთხოვთ აირჩიოთ ერთ ერთი ადგილობრივი პასუხისმგებლობებიდან" + +msgid "ldap_role_settings" +msgstr "LDAP ჯგუფის სინქრონიზაციის პარამეტრები" + +msgid "ldap_rule_condition" +msgstr "პირობა" + +msgid "ldap_rule_type" +msgstr "დანიშვნის სახეობა" + +msgid "ldap_scope_one" +msgstr "ერთი" + +msgid "ldap_scope_sub" +msgstr "ქვე" + +#, fuzzy +msgid "ldap_search_base_info" +msgstr "Gets prepended to basedn when searching for users." + +msgid "ldap_search_filter" +msgstr "LDAP ფილტრი" + +msgid "ldap_server_bind_dn" +msgstr "მომხმარებლის DN" + +msgid "ldap_server_bind_pass" +msgstr "პაროლი" + +msgid "ldap_server_binding" +msgstr "დაკავშირება" + +msgid "ldap_server_name" +msgstr "LDAP კონფიგურაციის სახელი" + +msgid "ldap_server_name_info" +msgstr "გთხოვთ აირჩიოთ LDAP სერვერის კონფიგურაციისთვის სახელი" + +msgid "ldap_server_security_settings" +msgstr "უსაფრთხოების პარამეტრები" + +msgid "ldap_server_short" +msgstr "სერვერილს URL:" + +msgid "ldap_server_url_info" +msgstr "389\". You may add multiple servers with commas separated." + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "LDAP გამოსაყენებელი ვერსია, ხშირად 3" + +#, fuzzy +msgid "ldap_servers" +msgstr "LDAP Server" + +msgid "ldap_settings" +msgstr "სერვერის პარამეტრები" + +msgid "ldap_sync_cron" +msgstr "თითო კრონ ჯობზე" + +msgid "ldap_sync_login" +msgstr "შესვლაზე" + +msgid "ldap_tbl_role_ass" +msgstr "აქტიური წესები" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS არ შეიძლება გამოიყენებოდეს LDAP ვერსია 2 თან ერთად. გთხოვთ აირჩიოთ LDAP ვერსია \"3\" ან გააუქმოთ TLS მხარდაჭერა" + +msgid "ldap_update_field_info" +msgstr "ავტომატურად განახლება" + +msgid "ldap_update_roles" +msgstr "პასუხისმგებლობების დანიშვნა" + +msgid "ldap_user_attribute" +msgstr "შესვლის სახელის განსაზღვრება" + +msgid "ldap_user_dn" +msgstr "მომხმარებლის ძიების ბაზა" + +msgid "ldap_user_mapping" +msgstr "მომხმარებლის პროფილის რუკაზე გადატანა" + +msgid "ldap_user_scope" +msgstr "ძიების თვალთახედვა" + +msgid "ldap_user_scope_info" +msgstr "თვალთახედვა მომხმარებლის ძიებისთვის. თუ არ ხართ დარწმუნებული აირშიეთ \"ქვე\"" + +msgid "ldap_user_sync" +msgstr "მომხმარებლის სინქრონიზაციის პარამეტრები" + +#, fuzzy +msgid "ldap_user_sync_cron" +msgstr "LDAP User Synchronization " + +#, fuzzy +msgid "ldap_user_sync_cron_info" +msgstr "If activated, user accounts will be imported from the LDAP directory and synchronised continuously as an option." + +msgid "ldap_user_sync_info" +msgstr "განსაზღვრავს თუ სად იქმნებიან ახალი მომხმარებლები შესვლის გვერდზე თუ რეგულარულად თითო კრონ ჯობზე" + +#, fuzzy +msgid "ldap_username_filter" +msgstr "Username Filter" + +#, fuzzy +msgid "ldap_username_filter_info" +msgstr "Use * as wildcard." diff --git a/components/ILIAS/LDAP/lang/ldap_lt.po b/components/ILIAS/LDAP/lang/ldap_lt.po new file mode 100644 index 000000000000..5c8242551952 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_lt.po @@ -0,0 +1,460 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: ldap\n" + +#, fuzzy +msgid "add_ldap_server" +msgstr "Add Server" + +#, fuzzy +msgid "ldap_add_missing" +msgstr "Assign Missing Roles" + +#, fuzzy +msgid "ldap_add_role_ass_rule" +msgstr "New Rule for Role Assignments" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +#, fuzzy +msgid "ldap_as_ds" +msgstr "Use as Data Source" + +#, fuzzy +msgid "ldap_as_ds_info" +msgstr "If activated, this LDAP configuration is used only for the synchronization of user accounts in combination with other authentication methods." + +#, fuzzy +msgid "ldap_assignment_type" +msgstr "Assignment Type" + +msgid "ldap_authentication_settings" +msgstr "Autorizacijos Nuostatos" + +#, fuzzy +msgid "ldap_bind_anonymous" +msgstr "Bind Anonymously" + +#, fuzzy +msgid "ldap_bind_user" +msgstr "Bind as User:" + +msgid "ldap_btn_add_role_ass" +msgstr "Sukurti Naują Taisyklę" + +#, fuzzy +msgid "ldap_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +#, fuzzy +msgid "ldap_choose_role" +msgstr "Choose Role" + +msgid "ldap_confirm_del_role_ass" +msgstr "Šalinti Rolės Priskyrimą" + +msgid "ldap_deleted_role_mapping" +msgstr "Ištrintas priskyrimas." + +#, fuzzy +msgid "ldap_deleted_rule" +msgstr "Deleted selected role assignments." + +msgid "ldap_dn_info" +msgstr "Nurodykite LDAP grupės skiriamąjį pavadinimą." + +msgid "ldap_edit_role_ass_rule" +msgstr "Redaguoti Rolės Priskyrimo Tasiyklę" + +#, fuzzy +msgid "ldap_edit_role_assignment" +msgstr "Edit Role -> Group Assignment" + +#, fuzzy +msgid "ldap_err_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +#, fuzzy +msgid "ldap_filter_info" +msgstr "Filter that will be added to the search filter this way: (&(userattr=username)(userfilter))." + +#, fuzzy +msgid "ldap_global_role" +msgstr "Global Role" + +msgid "ldap_global_role_assignment" +msgstr "ILIAS Rolės Priskyrimas" + +msgid "ldap_global_role_info" +msgstr "Pasirinkite, kuriai Rolei priskirsite naujus ILIAS vartotojus." + +msgid "ldap_group_attribute" +msgstr "Grupės Atributas" + +msgid "ldap_group_attribute_info" +msgstr "Ieškomas grupės atributas." + +#, fuzzy +msgid "ldap_group_dn" +msgstr "Group DN" + +#, fuzzy +msgid "ldap_group_dn_info" +msgstr "Gets prepended to basedn when searching for groups." + +#, fuzzy +msgid "ldap_group_dn_short" +msgstr "Group DN:" + +msgid "ldap_group_filter" +msgstr "LDAP Filras" + +#, fuzzy +msgid "ldap_group_filter_info" +msgstr "Filter that will be added to the search filter when searching for a group: (&(groupattr=group)(memberattr=username)(groupfilter))." + +msgid "ldap_group_member" +msgstr "Grupės Nario Atributas" + +#, fuzzy +msgid "ldap_group_member_info" +msgstr "The attribute of the group object where the user dn may be found. Choose \"Attribute Value is DN\" if the member attribute is the distinguished name of the users." + +#, fuzzy +msgid "ldap_group_member_optional" +msgstr "Group Membership is Optional" + +#, fuzzy +msgid "ldap_group_member_short" +msgstr "Attribute:" + +#, fuzzy +msgid "ldap_group_membership" +msgstr "Group Membership" + +msgid "ldap_group_name" +msgstr "Grupės Pavadinimas" + +#, fuzzy +msgid "ldap_group_name_info" +msgstr "The name of the group users have to be a member of to authenticate successfully." + +#, fuzzy +msgid "ldap_group_optional_info" +msgstr "If enabled, the group membership is not required for a successful authentication. Please enter a user filter for the members of these groups:
(&(userattr=username)(userfilter))" + +msgid "ldap_group_restrictions" +msgstr "Grupės Apribojimai" + +msgid "ldap_group_scope" +msgstr "Paieškos Sritis" + +msgid "ldap_group_scope_info" +msgstr "Grupės paieškos sritis. Jei nesate tikri, rinkitės \"Sub\"" + +#, fuzzy +msgid "ldap_group_search_base" +msgstr "Group Search Base" + +#, fuzzy +msgid "ldap_group_user_filter" +msgstr "User Filter" + +msgid "ldap_ilias_role" +msgstr "ILIAS Rolė" + +#, fuzzy +msgid "ldap_info_text" +msgstr "Information Text" + +#, fuzzy +msgid "ldap_info_text_info" +msgstr "If entered, this text will be shown in the repository and on the info screen for the object this role is assigned to." + +#, fuzzy +msgid "ldap_local_role" +msgstr "Local Role" + +#, fuzzy +msgid "ldap_mapping_info_type" +msgstr "Show Information also in the Repository/Personal Desktop" + +msgid "ldap_mapping_table" +msgstr "LDAP Atributų Priskyrimas ILIAS VArtotojo Profiliui" + +msgid "ldap_mapping_template" +msgstr "ObjectClass šablonas:" + +#, fuzzy +msgid "ldap_member_info" +msgstr "The attribute of the group object where the user dn may be found." + +#, fuzzy +msgid "ldap_memberisdn" +msgstr "Attribute Value is DN" + +#, fuzzy +msgid "ldap_missing_bind_user" +msgstr "You have chosen \"Bind as User\": Please enter a valid LDAP username and password." + +msgid "ldap_missing_role_assignment" +msgstr "Pasirinkite globalią rolę, kuriai priskirsite naujus vartotojus." + +msgid "ldap_moment_sync" +msgstr "Sinchronizacjos Tipas" + +msgid "ldap_new_role_assignment" +msgstr "Sukurti Naują Rolę -> Grupės Priskyrimas" + +#, fuzzy +msgid "ldap_plugin" +msgstr "Assignment by Plugin" + +#, fuzzy +msgid "ldap_plugin_id" +msgstr "Plugin Id" + +#, fuzzy +msgid "ldap_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +#, fuzzy +msgid "ldap_referrals" +msgstr "Referrals" + +msgid "ldap_referrals_info" +msgstr "Jei nurodyta, nustatoma ar LDAP biblioteka automatiškai seka nuorodas, pateiktas LDAP serverių, ar ne." + +#, fuzzy +msgid "ldap_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +msgid "ldap_role_active" +msgstr "Aktyvuoti Grupės Sinchronizavimą" + +#, fuzzy +msgid "ldap_role_assignments" +msgstr "Role Assignment" + +msgid "ldap_role_at_info" +msgstr "Priskyrimas vykdomas pagal specifinį LDAP vartotojo profilyje esantį požymį." + +msgid "ldap_role_at_name" +msgstr "Atributo Pavadinimas" + +msgid "ldap_role_at_value" +msgstr "Požymio Reikšmė" + +msgid "ldap_role_bind_pass" +msgstr "Slaptažodis" + +msgid "ldap_role_bind_pass_info" +msgstr "Slaptažodis" + +#, fuzzy +msgid "ldap_role_bind_user" +msgstr "Usern DN" + +msgid "ldap_role_bind_user_info" +msgstr "Nurodykite LDAP vartotojo paskyros skiriamąjį pavadinimą. Šis vartotojas turi turėti rašymo teisę LDAP grupėse." + +msgid "ldap_role_by_attribute" +msgstr "LDAP Požymis" + +#, fuzzy +msgid "ldap_role_by_group" +msgstr "Groupmembership" + +#, fuzzy +msgid "ldap_role_by_plugin" +msgstr "By Plugin" + +msgid "ldap_role_group_assignments" +msgstr "Egzistuojanti Rolė -> Grupės Priskyrimas" + +#, fuzzy +msgid "ldap_role_grp_at" +msgstr "Attribute" + +#, fuzzy +msgid "ldap_role_grp_dn_info" +msgstr "Please enter the \"Distinguished Name\" of the LDAP Group." + +#, fuzzy +msgid "ldap_role_grp_info" +msgstr "Members of a specific LDAP Group will be assigned to the given ILIAS role." + +msgid "ldap_role_grp_isdn" +msgstr "Požymo reikšmė yra DN" + +msgid "ldap_role_info" +msgstr "Nurodykite ILIAS Rolės pavadinimą, kuri kontroliuos narystę LDAP grupėje." + +msgid "ldap_role_mapping" +msgstr "LDAP-Grupė -> Rolės Atvaizdis" + +#, fuzzy +msgid "ldap_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +msgid "ldap_role_not_exists" +msgstr "Rolė šiuo pavadinimu neegzistuoja" + +#, fuzzy +msgid "ldap_role_selection" +msgstr "Role Selection" + +#, fuzzy +msgid "ldap_role_selection_info" +msgstr "Your selection is ambiguous. Please choose one of the following roles." + +msgid "ldap_role_settings" +msgstr "LDAP Grupės Sinchronizavimo Nuostatos" + +msgid "ldap_rule_condition" +msgstr "sąlyga" + +msgid "ldap_rule_type" +msgstr "Priskyrimo Tipas" + +msgid "ldap_scope_one" +msgstr "Vienas" + +#, fuzzy +msgid "ldap_scope_sub" +msgstr "Sub" + +#, fuzzy +msgid "ldap_search_base_info" +msgstr "Gets prepended to basedn when searching for users." + +msgid "ldap_search_filter" +msgstr "LDAP Filras" + +#, fuzzy +msgid "ldap_server_bind_dn" +msgstr "User DN" + +msgid "ldap_server_bind_pass" +msgstr "Slaptažodis" + +msgid "ldap_server_binding" +msgstr "Sietis" + +msgid "ldap_server_name" +msgstr "LDAP Konfigūracijos pavadinimas" + +msgid "ldap_server_name_info" +msgstr "Parinkite šios LDAP konfigūracijos pavadinimą" + +msgid "ldap_server_security_settings" +msgstr "Saugumo Nuostatos" + +#, fuzzy +msgid "ldap_server_short" +msgstr "Server URL:" + +msgid "ldap_server_url_info" +msgstr "Pilnas adresas specifiniam protokolui, jungties url ir prievadas, pvz., \"ldap://ldap.ilias.de:389\"" + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "Naudotina LDAP versija, paprastai 3." + +#, fuzzy +msgid "ldap_servers" +msgstr "LDAP Server" + +msgid "ldap_settings" +msgstr "Serverio Nuostatos" + +#, fuzzy +msgid "ldap_sync_cron" +msgstr "Per Cron-Job" + +msgid "ldap_sync_login" +msgstr "Prisijungiant" + +msgid "ldap_tbl_role_ass" +msgstr "Aktyvios Taisyklės" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS negali būti naudojama su LDAPv2. Pasirinkite LDAP versiją \"3\" arba išjunkite TLS palaikymą." + +msgid "ldap_update_field_info" +msgstr "Atnaujinti automatiškai" + +#, fuzzy +msgid "ldap_update_roles" +msgstr "Role Assignments" + +msgid "ldap_user_attribute" +msgstr "Registracijos Vardo Atributas" + +#, fuzzy +msgid "ldap_user_dn" +msgstr "User DN" + +msgid "ldap_user_mapping" +msgstr "Vartotojo Profilio Atvaizdis (mapping)" + +msgid "ldap_user_scope" +msgstr "Paieškos Sritis" + +#, fuzzy +msgid "ldap_user_scope_info" +msgstr "Scope for user searching. If unsure choose \"Sub\"." + +msgid "ldap_user_sync" +msgstr "Vartotojų Sinchronizavimo Nuostatos" + +#, fuzzy +msgid "ldap_user_sync_cron" +msgstr "LDAP User Synchronization " + +#, fuzzy +msgid "ldap_user_sync_cron_info" +msgstr "If activated, user accounts will be imported from the LDAP directory and synchronised continuously as an option." + +#, fuzzy +msgid "ldap_user_sync_info" +msgstr "Defines whether new users are automatically created on login or regularly per Cron-Job." + +#, fuzzy +msgid "ldap_username_filter" +msgstr "Username Filter" + +#, fuzzy +msgid "ldap_username_filter_info" +msgstr "Use * as wildcard." diff --git a/components/ILIAS/LDAP/lang/ldap_nl.po b/components/ILIAS/LDAP/lang/ldap_nl.po new file mode 100644 index 000000000000..2adefc672d9a --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_nl.po @@ -0,0 +1,401 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ldap\n" + +#, fuzzy +msgid "add_ldap_server" +msgstr "Add Server" + +msgid "ldap_add_missing" +msgstr "Assign Missing Roles" + +msgid "ldap_add_role_ass_rule" +msgstr "New Rule for Role Assignments" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +msgid "ldap_as_ds" +msgstr "Use as Data Source" + +msgid "ldap_as_ds_info" +msgstr "If activated, this LDAP configuration is used only for the synchronization of user accounts in combination with other authentication methods." + +msgid "ldap_assignment_type" +msgstr "Assignment Type" + +msgid "ldap_authentication_settings" +msgstr "Authenticatie instellingen" + +msgid "ldap_bind_anonymous" +msgstr "Anonieme band" + +msgid "ldap_bind_user" +msgstr "Bind alas gebruiker:" + +msgid "ldap_btn_add_role_ass" +msgstr "Add New Rule" + +msgid "ldap_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +msgid "ldap_choose_role" +msgstr "Choose Role" + +msgid "ldap_confirm_del_role_ass" +msgstr "Delete Role Assignmen" + +msgid "ldap_deleted_role_mapping" +msgstr "Taak verwijderd" + +msgid "ldap_deleted_rule" +msgstr "Deleted selected role assignments." + +msgid "ldap_dn_info" +msgstr "Geef de naam in van de LDAP-groep." + +msgid "ldap_edit_role_ass_rule" +msgstr "Edit Role Assignment Rule" + +msgid "ldap_edit_role_assignment" +msgstr "Wijzigen rol -> Groepstoekenning" + +msgid "ldap_err_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +msgid "ldap_filter_info" +msgstr "Filter die aan de zoekfilter zal worden toegevoegd op deze manier : (& (userattr=username) (userfilter) )." + +msgid "ldap_global_role" +msgstr "Globale Rol" + +msgid "ldap_global_role_assignment" +msgstr "ILIAS-Rol taak" + +msgid "ldap_global_role_info" +msgstr "Gelieve een globale rol te kiezen die aan de nieuwe gebruikers zal worden toegewezen." + +msgid "ldap_group_attribute" +msgstr "Attributen voor groepen" + +msgid "ldap_group_attribute_info" +msgstr "De groepsattributen om te zoeken naar." + +msgid "ldap_group_dn" +msgstr "Groep zoeken Base" + +msgid "ldap_group_dn_info" +msgstr "Gets prepended to \"BaseDN\" when searching for groups." + +msgid "ldap_group_dn_short" +msgstr "Groep DN:" + +msgid "ldap_group_filter" +msgstr "LDAP Filter" + +msgid "ldap_group_filter_info" +msgstr "Filter die aan de zoeksfilter zal worden toegevoegd wanneer je op een groep gaan zoeken: (&(groupattr=group)(memberattr=username)(groupfilter))." + +msgid "ldap_group_member" +msgstr "Groepsdeelnemer attribuut" + +msgid "ldap_group_member_info" +msgstr "De attributen van de groep hebben bezwaar waar de gebruiker dn kan worden gevonden. Kies de „Waarde van Attributen DN“ als het lidattribuut de naam van de gebruiker is." + +msgid "ldap_group_member_optional" +msgstr "Groepsdeelname is optioneel" + +msgid "ldap_group_member_short" +msgstr "Attribuut:" + +msgid "ldap_group_membership" +msgstr "Groepsdeelname" + +msgid "ldap_group_name" +msgstr "Groepsnaam" + +msgid "ldap_group_name_info" +msgstr "De naam van de groepsgebruikers moet een authentieke deelnemer zijn om toegevoegd te worden." + +msgid "ldap_group_optional_info" +msgstr "Indien ingeschakeld, is de groepsdeelname niet nodig voor een geslaagde authenticatie. Gelieve een gebruikersfilter in te geven voor de deelnemers van deze groep:
(&(userattr=username)(userfilter))" + +msgid "ldap_group_restrictions" +msgstr "Groepbeperkingen" + +msgid "ldap_group_scope" +msgstr "Werkingsgebied zoeken" + +msgid "ldap_group_scope_info" +msgstr "Bereik voor zoeken naar groep. Als onzeker kies „Sub“" + +msgid "ldap_group_search_base" +msgstr "Groep zoekopdracht" + +msgid "ldap_group_user_filter" +msgstr "Filter gebruiker" + +msgid "ldap_ilias_role" +msgstr "ILIAS Rol" + +msgid "ldap_info_text" +msgstr "Informatie tekst" + +msgid "ldap_info_text_info" +msgstr "Indien ingegeven, zal deze tekst getoond worden in het Persoonlijk scherm en op het info venster van het object" + +msgid "ldap_local_role" +msgstr "Local Role" + +msgid "ldap_mapping_info_type" +msgstr "Toon informatie ook in het Persoonlijk Scherm" + +msgid "ldap_mapping_table" +msgstr "Taak van LDAP attributen aan het profiel van de gebruiker" + +msgid "ldap_mapping_template" +msgstr "Sjabloon voor objectClass:" + +msgid "ldap_member_info" +msgstr "De attributen van de groep hebben bezwaar waar de gebruiker dn kan worden gevonden." + +msgid "ldap_memberisdn" +msgstr "Attribuut waarde is DN" + +msgid "ldap_missing_bind_user" +msgstr "Je hebt gekozen „ bind als Gebruiker“: gelieve een geldig LDAP-gebruikersnaam en een wachtwoord in te geven." + +msgid "ldap_missing_role_assignment" +msgstr "Gelieve een globale rol te kiezen die aan nieuwe gebruikers zal worden toegewezen." + +msgid "ldap_moment_sync" +msgstr "Type synchronisatie" + +msgid "ldap_new_role_assignment" +msgstr "Nieuwe rol toevoegen -> Groepstaak" + +msgid "ldap_plugin" +msgstr "Assignment by Plugin" + +msgid "ldap_plugin_id" +msgstr "Plugin Id" + +msgid "ldap_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +msgid "ldap_referrals" +msgstr "Verwijzingen" + +msgid "ldap_referrals_info" +msgstr "Indien ingesteld, dan volgt de LDAP library automatisch verwijzingen die het terugkrijgt van LDAP servers. Dit zou uitgeschakeld moeten worden gemaakt als je een actieve folderserver gebruikt." + +msgid "ldap_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +msgid "ldap_role_active" +msgstr "Groep synchronisatie uitschakelen" + +msgid "ldap_role_assignments" +msgstr "Role Assignment" + +msgid "ldap_role_at_info" +msgstr "The assignment is based on a specific attribute in the LDAP user profile." + +msgid "ldap_role_at_name" +msgstr "Attribute Name" + +msgid "ldap_role_at_value" +msgstr "Attribute Value" + +msgid "ldap_role_bind_pass" +msgstr "Wachtwoord" + +msgid "ldap_role_bind_pass_info" +msgstr "Wachtwoord" + +msgid "ldap_role_bind_user" +msgstr "Usern DN" + +msgid "ldap_role_bind_user_info" +msgstr "Gelieve een naam van een Ldap- gebruikersrekening in te geven. Deze gebruikers hebben schrijftoegang nodig voor de LDAP groepen." + +msgid "ldap_role_by_attribute" +msgstr "LDAP Attribute" + +msgid "ldap_role_by_group" +msgstr "Groepslidmaatschap" + +msgid "ldap_role_by_plugin" +msgstr "By Plugin" + +msgid "ldap_role_group_assignments" +msgstr "Bestaande rollen -> Groep taken" + +msgid "ldap_role_grp_at" +msgstr "Attribute" + +msgid "ldap_role_grp_dn_info" +msgstr "Please enter the \"Distinguished Name\" of the LDAP Group." + +msgid "ldap_role_grp_info" +msgstr "Members of a specific LDAP Group will be assigned to the given ILIAS role." + +msgid "ldap_role_grp_isdn" +msgstr "Attribute value is DN" + +msgid "ldap_role_info" +msgstr "Ingeven naam van een ILIAS-rol die het lidmaatschap aan de LDAP-groep zal controleren." + +msgid "ldap_role_mapping" +msgstr "LDAP-Group -> Role Mapping" + +msgid "ldap_role_name_info" +msgstr "Kies of een globale rol of type de naam van een lokale rol" + +msgid "ldap_role_not_exists" +msgstr "Een rol met deze naam bestaat nog niet." + +msgid "ldap_role_selection" +msgstr "Role Selection" + +msgid "ldap_role_selection_info" +msgstr "Je selectie is niet eenduidig. Kies één van de volgende rollen." + +msgid "ldap_role_settings" +msgstr "LDAP groep synchronisatie instellingen" + +msgid "ldap_rule_condition" +msgstr "condition" + +msgid "ldap_rule_type" +msgstr "Type of Assignment" + +msgid "ldap_scope_one" +msgstr "Eén" + +msgid "ldap_scope_sub" +msgstr "Sub" + +msgid "ldap_search_base_info" +msgstr "Gets prepended to based when searching for users." + +msgid "ldap_search_filter" +msgstr "LDAP Filter" + +msgid "ldap_server_bind_dn" +msgstr "Gebruikerszoeken base" + +msgid "ldap_server_bind_pass" +msgstr "Wachtwoord" + +msgid "ldap_server_binding" +msgstr "Band" + +msgid "ldap_server_name" +msgstr "Naam van LDAP Configuratie" + +msgid "ldap_server_name_info" +msgstr "Gelieve een naam te kiezen voor deze LDAP serverconfiguratie." + +msgid "ldap_server_security_settings" +msgstr "Veiligheidsinstellingen" + +msgid "ldap_server_short" +msgstr "Server URL:" + +msgid "ldap_server_url_info" +msgstr "Een volledig gekwalificeerde URL voor het specificeren van het protocol, url en de poort om te verbinden met bv. \"ldap://ldap.ilias.de:389\"" + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "LDAP versie gebruiken, meestal 3." + +#, fuzzy +msgid "ldap_servers" +msgstr "LDAP Server" + +msgid "ldap_settings" +msgstr "Server instellingen" + +msgid "ldap_sync_cron" +msgstr "Per Cron-Job" + +msgid "ldap_sync_login" +msgstr "Bij aanmelden" + +msgid "ldap_tbl_role_ass" +msgstr "Avtive Rules" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS kan niet gebruikt worden in combinatie met LDAPv2. Gelieve een ander LDAP versie te kiezen \"3\" of zet TLS hulp uit." + +msgid "ldap_update_field_info" +msgstr "Automatische update" + +msgid "ldap_update_roles" +msgstr "Role Assignments" + +msgid "ldap_user_attribute" +msgstr "Attributen voor aanmeldingsnaam" + +msgid "ldap_user_dn" +msgstr "Gebruikerszoeken Base" + +msgid "ldap_user_mapping" +msgstr "User Profile Mapping" + +msgid "ldap_user_scope" +msgstr "Werkingsgebied zoeken" + +msgid "ldap_user_scope_info" +msgstr "Bereik voor het zoeken gebruiker. Als onzeker kies „Sub“." + +msgid "ldap_user_sync" +msgstr "Gebruikers synchronisatie instelling" + +msgid "ldap_user_sync_cron" +msgstr "LDAP User Synchronization" + +msgid "ldap_user_sync_cron_info" +msgstr "If activated, user accounts will be imported from the LDAP directory and synchronised continuously as an option." + +msgid "ldap_user_sync_info" +msgstr "Bepaalt of de nieuwe gebruikers automatisch bij login of regelmatig per cron-job worden gecreërd." + +#, fuzzy +msgid "ldap_username_filter" +msgstr "Username Filter" + +#, fuzzy +msgid "ldap_username_filter_info" +msgstr "Use * as wildcard." diff --git a/components/ILIAS/LDAP/lang/ldap_pl.po b/components/ILIAS/LDAP/lang/ldap_pl.po new file mode 100644 index 000000000000..281ed40a27d5 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_pl.po @@ -0,0 +1,397 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: ldap\n" + +msgid "add_ldap_server" +msgstr "Dodaj serwer" + +msgid "ldap_add_missing" +msgstr "Przydziel brakujące role" + +msgid "ldap_add_role_ass_rule" +msgstr "Nowe zasady przydzielania ról ILIAS" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +msgid "ldap_as_ds" +msgstr "Użyj jako źródła danych" + +msgid "ldap_as_ds_info" +msgstr "Jeśli ta opcja jest aktywna, konfigurację LDAP stosuje się do synchronizacji danych użytkownika w połączeniu z innymi rodzajami identyfikacji (itd.). Nie ma możliwości przeprowadzenia bezpośredniej identyfikacji za pomocą LDAP." + +msgid "ldap_assignment_type" +msgstr "Rodzaj przydziału" + +msgid "ldap_authentication_settings" +msgstr "Ustawienia autoryzacji" + +msgid "ldap_bind_anonymous" +msgstr "Połączenie anonimowe" + +msgid "ldap_bind_user" +msgstr "Połącz jako użytkownik:" + +msgid "ldap_btn_add_role_ass" +msgstr "Dodaj nową regułę" + +msgid "ldap_check_role_assignment" +msgstr "Przydział ról wg późniejszych loginów" + +msgid "ldap_choose_role" +msgstr "Wybierz rolę" + +msgid "ldap_confirm_del_role_ass" +msgstr "Usuń przydziały ról" + +msgid "ldap_deleted_role_mapping" +msgstr "Przydział usunięty." + +msgid "ldap_deleted_rule" +msgstr "Usunięto wybrany przydział roli" + +msgid "ldap_dn_info" +msgstr "Wprowadź pełną nazwę grupy LDAP." + +msgid "ldap_edit_role_ass_rule" +msgstr "Edytuj zasady przydziału ról" + +msgid "ldap_edit_role_assignment" +msgstr "Edytuj przydziały" + +msgid "ldap_err_missing_plugin_id" +msgstr "Wpisz aktualny numer ID wtyczki." + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +msgid "ldap_filter_info" +msgstr "Filtr który zostanie dodany do filtru wyszukania w następujący sposób: (&(userattr=username)(userfilter))." + +msgid "ldap_global_role" +msgstr "Globalna rola" + +msgid "ldap_global_role_assignment" +msgstr "Ustawienia roli ILIAS-a" + +msgid "ldap_global_role_info" +msgstr "Wybierz rolę ILIAS, do której będą przydzieleni nowi użytkownicy." + +msgid "ldap_group_attribute" +msgstr "Atrybut dla grupy" + +msgid "ldap_group_attribute_info" +msgstr "Atrybut grupy do wyszukania." + +msgid "ldap_group_dn" +msgstr "Grupa DN" + +msgid "ldap_group_dn_info" +msgstr "Kieruje na początku do 'BaseDN', kiedy szuka grup." + +msgid "ldap_group_dn_short" +msgstr "Grupa DN" + +msgid "ldap_group_filter" +msgstr "Filtr LDAP" + +msgid "ldap_group_filter_info" +msgstr "Filtr, który zostanie dodany do filtru wyszukania, kiedy poszukuje grup: (&(groupattr=group)(memberattr=username)(groupfilter))." + +msgid "ldap_group_member" +msgstr "Atrybut członka grupy" + +msgid "ldap_group_member_info" +msgstr "Atrybut obiektu grupy, kiedy użytkownik dn będzie znaleziony. Wybierz \"Wartość atrybutu to DN”, jeśli atrybut członka jest pełną nazwą użytkowników." + +msgid "ldap_group_member_optional" +msgstr "Członkostwo w grupie jest opcjonalne" + +msgid "ldap_group_member_short" +msgstr "Atrybut:" + +msgid "ldap_group_membership" +msgstr "Członkostwo grup" + +msgid "ldap_group_name" +msgstr "Nazwa grupy" + +msgid "ldap_group_name_info" +msgstr "Nazwa grupy, której użytkownicy muszą być członkiem dla udanej identyfikacji." + +msgid "ldap_group_optional_info" +msgstr "Członkostwo do grupy nie jest wymagane dla prawidłowej autoryzacji. Wprowadź filtr użytkowników dla członków tych grup:
(&(userattr=username)(userfilter))" + +msgid "ldap_group_restrictions" +msgstr "Restrykcje grupowe" + +msgid "ldap_group_scope" +msgstr "Zakres wyszukania" + +msgid "ldap_group_scope_info" +msgstr "Zakres wyszukania grup. Jeśli niepewny, wybierz \"Pod\"." + +msgid "ldap_group_search_base" +msgstr "Baza wyszukiwania grup" + +msgid "ldap_group_user_filter" +msgstr "Filtr użytkownika" + +msgid "ldap_ilias_role" +msgstr "Rola ILIAS" + +msgid "ldap_info_text" +msgstr "Tekst informacyjny" + +msgid "ldap_info_text_info" +msgstr "Jeśli wprowadzony, to ten tekst będzie pokazany w zasobach i na ekranie informacyjnym dla obiektów przydzielonych do tej roli." + +msgid "ldap_local_role" +msgstr "Lokalna rola" + +msgid "ldap_mapping_info_type" +msgstr "Pokaż informacje też w dostępnych zasobach/pulpicie osobistym." + +msgid "ldap_mapping_table" +msgstr "Przydział atrybutów LDAP do profilu użytkownika ILIAS." + +msgid "ldap_mapping_template" +msgstr "Szablon dla klasy obiektu:" + +msgid "ldap_member_info" +msgstr "Atrybut obiektu grupy, kiedy zostanie odnaleziony użytkownik DN." + +msgid "ldap_memberisdn" +msgstr "Wartość atrybutu to DN" + +msgid "ldap_missing_bind_user" +msgstr "Wybrałeś \"Połącz jako użytkownik\": Podaj nazwę użytkownika LDAP i hasło." + +msgid "ldap_missing_role_assignment" +msgstr "Wybierz globalną rolę przydzielaną nowym użytkownikom." + +msgid "ldap_moment_sync" +msgstr "Typ synchronizacji" + +msgid "ldap_new_role_assignment" +msgstr "Dodaj nową rolę -> Przydział grup" + +msgid "ldap_plugin" +msgstr "Przydział poprzez wtyczkę" + +msgid "ldap_plugin_id" +msgstr "Numer ID wtyczki" + +msgid "ldap_plugin_info" +msgstr "Kontrola przydziału ról przez wtyczkę. Wpisz aktualny numer ID wtyczki." + +msgid "ldap_referrals" +msgstr "Skierowania" + +msgid "ldap_referrals_info" +msgstr "Jeśli ustawione, powoduje że biblioteka LDAP automatycznie obsługuje skierowania zwrócone przez serwer LDAP lub nie." + +msgid "ldap_remove_deprecated" +msgstr "Usuń nieuprawnione role" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +msgid "ldap_role_active" +msgstr "Włącz synchronizację grup" + +msgid "ldap_role_assignments" +msgstr "Przydział ról" + +msgid "ldap_role_at_info" +msgstr "Przydział następuje na podstawie określonego atrybutu w profilu użytkownika LDAP." + +msgid "ldap_role_at_name" +msgstr "Nazwa atrybutowa" + +msgid "ldap_role_at_value" +msgstr "Wartość atrybutowa" + +msgid "ldap_role_bind_pass" +msgstr "Hasło" + +msgid "ldap_role_bind_pass_info" +msgstr "Hasło" + +msgid "ldap_role_bind_user" +msgstr "Użytkownik DN" + +msgid "ldap_role_bind_user_info" +msgstr "Wprowadź pełną nazwę konta użytkownika LDAP. Ten użytkownik powinien mieć prawo do zapisu do grup LDAP." + +msgid "ldap_role_by_attribute" +msgstr "Atrybut użytkownika" + +msgid "ldap_role_by_group" +msgstr "Przynależność grupowa" + +msgid "ldap_role_by_plugin" +msgstr "Za pomocą wtyczki" + +msgid "ldap_role_group_assignments" +msgstr "Istniejąca Rola -> Przydział Grup" + +msgid "ldap_role_grp_at" +msgstr "Atrybut" + +msgid "ldap_role_grp_dn_info" +msgstr "Wpisz kompletną nazwę grupy \"Distinguished name\"." + +msgid "ldap_role_grp_info" +msgstr "Członkowie określonej grupy LDAP zostaną przydzieleni do podanej roli ILIAS." + +msgid "ldap_role_grp_isdn" +msgstr "Wartość atrybutu to DN" + +msgid "ldap_role_info" +msgstr "Wprowadź nazwę roli ILIAS, która będzie kontrolować członkostwo grup LDAP." + +msgid "ldap_role_mapping" +msgstr "Grupa LDAP -> Mapowanie ról" + +msgid "ldap_role_name_info" +msgstr "Wybierz globalną rolę lub podaj nazwę lokalnej roli." + +msgid "ldap_role_not_exists" +msgstr "Rola o tej nazwie nie istnieje" + +msgid "ldap_role_selection" +msgstr "Wybór ról" + +msgid "ldap_role_selection_info" +msgstr "Twój wybór nie jest jednoznaczny. Wybierz jedną z poniższych ról." + +msgid "ldap_role_settings" +msgstr "Ustawienia dotyczące aktualizacji grup LDAP" + +msgid "ldap_rule_condition" +msgstr "Warunek" + +msgid "ldap_rule_type" +msgstr "Rodzaj przydziału" + +msgid "ldap_scope_one" +msgstr "Jeden" + +msgid "ldap_scope_sub" +msgstr "Pod" + +msgid "ldap_search_base_info" +msgstr "Kieruje na początku do 'BaseDN', kiedy szuka użytkowników." + +msgid "ldap_search_filter" +msgstr "Filtr LDAP" + +msgid "ldap_server_bind_dn" +msgstr "Użytkownik DN" + +msgid "ldap_server_bind_pass" +msgstr "Hasło" + +msgid "ldap_server_binding" +msgstr "Połączenia" + +msgid "ldap_server_name" +msgstr "Nazwa konfiguracji LDAP" + +msgid "ldap_server_name_info" +msgstr "Wybierz nazwę dla konfiguracji serwera LDAP." + +msgid "ldap_server_security_settings" +msgstr "Ustawienia zabezpieczeń" + +msgid "ldap_server_short" +msgstr "URL serwera:" + +msgid "ldap_server_url_info" +msgstr "Pełen adres URL dla wyróżnienia protokołu, url i port dla połączenia. Np. \"ldap://ldap.ilias.pl:389" + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "Wersja użytej LDAP, zwykle 3." + +msgid "ldap_servers" +msgstr "Serwery LDAP" + +msgid "ldap_settings" +msgstr "Ustawienia serwera" + +msgid "ldap_sync_cron" +msgstr "Przy zadaniu Cron" + +msgid "ldap_sync_login" +msgstr "Przy logowaniu" + +msgid "ldap_tbl_role_ass" +msgstr "Aktywne zasady dotyczące przydzielania ról" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS nie może być użyty z LDAPv2. Wybierz LDAP w wersji \"3\" lub wyłącz wsparcie dla TLS." + +msgid "ldap_update_field_info" +msgstr "Uaktualnij automatycznie" + +msgid "ldap_update_roles" +msgstr "Przydziały ról" + +msgid "ldap_user_attribute" +msgstr "Atrybut dla nazwy logowania" + +msgid "ldap_user_dn" +msgstr "Użytkownik DN" + +msgid "ldap_user_mapping" +msgstr "Mapowanie profilu użytkownika" + +msgid "ldap_user_scope" +msgstr "Zakres wyszukania" + +msgid "ldap_user_scope_info" +msgstr "Zakres wyszukania użytkowników. Jeśli niepewny, wybierz \"Pod\"." + +msgid "ldap_user_sync" +msgstr "Ustawienia synchronizacji użytkownika" + +msgid "ldap_user_sync_cron" +msgstr "Synchronizacja użytkownika LDAP" + +msgid "ldap_user_sync_cron_info" +msgstr "Jeśli opcja jest aktywna, z indeksu LDAP importowane są konta użytkowników i opcjonalnie na bieżąco synchronizowane." + +msgid "ldap_user_sync_info" +msgstr "Definiuje, kiedy nowi użytkownicy są automatycznie tworzeni, przy logowaniu lub poprzez cykliczne zadanie Cron." + +msgid "ldap_username_filter" +msgstr "Filtr nazwy użytkownika" + +msgid "ldap_username_filter_info" +msgstr "Użyj * jako certyfikatu Wildcard." diff --git a/components/ILIAS/LDAP/lang/ldap_pt.po b/components/ILIAS/LDAP/lang/ldap_pt.po new file mode 100644 index 000000000000..d163bbb66543 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_pt.po @@ -0,0 +1,397 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: ldap\n" + +msgid "add_ldap_server" +msgstr "Adicionar servidor" + +msgid "ldap_add_missing" +msgstr "Atribuir funções em falta" + +msgid "ldap_add_role_ass_rule" +msgstr "Nova regra para atribuições de funções" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +msgid "ldap_as_ds" +msgstr "Usar como fonte de dados" + +msgid "ldap_as_ds_info" +msgstr "Se estiver ativado, esta configuração LDAP é usada apenas para a sincronização das contas de utilizador juntamente com outros métodos de autenticação (p. ex. CAS ou Radius)." + +msgid "ldap_assignment_type" +msgstr "Tipo de atribuição" + +msgid "ldap_authentication_settings" +msgstr "Definições de autenticação" + +msgid "ldap_bind_anonymous" +msgstr "Vincular anonimamente" + +msgid "ldap_bind_user" +msgstr "Vincular como utilizador:" + +msgid "ldap_btn_add_role_ass" +msgstr "Adicionar novo regra" + +msgid "ldap_check_role_assignment" +msgstr "Atribuição de funções após logins posteriores" + +msgid "ldap_choose_role" +msgstr "Escolher função" + +msgid "ldap_confirm_del_role_ass" +msgstr "Educação Superior" + +msgid "ldap_deleted_role_mapping" +msgstr "Atribuição apagada." + +msgid "ldap_deleted_rule" +msgstr "Atribuição de funções selecionadas apagadas." + +msgid "ldap_dn_info" +msgstr "Insira o nome distinto do grupo LDAP." + +msgid "ldap_edit_role_ass_rule" +msgstr "Editar regra de atribuição de funções" + +msgid "ldap_edit_role_assignment" +msgstr "Editar função -> Atribuição de grupo" + +msgid "ldap_err_missing_plugin_id" +msgstr "Introduza um id de plugin válido." + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +msgid "ldap_filter_info" +msgstr "Filtro que será adicionado ao filtro de pesquisa desta maneira: (&(userattr=username)(userfilter))." + +msgid "ldap_global_role" +msgstr "Função global" + +msgid "ldap_global_role_assignment" +msgstr "Atribuição de funções ILIAS" + +msgid "ldap_global_role_info" +msgstr "Ideia" + +msgid "ldap_group_attribute" +msgstr "Atributo para grupo" + +msgid "ldap_group_attribute_info" +msgstr "O atributo de grupo a pesquisar." + +msgid "ldap_group_dn" +msgstr "Identificador" + +msgid "ldap_group_dn_info" +msgstr "Índice" + +msgid "ldap_group_dn_short" +msgstr "DN de grupo:" + +msgid "ldap_group_filter" +msgstr "Filtro LDAP" + +msgid "ldap_group_filter_info" +msgstr "Filtro que será adicionado ao filtro de pesquisa quando pesquisar um grupo: (&(groupattr=group)(memberattr=username)(groupfilter))." + +msgid "ldap_group_member" +msgstr "Atributo de membro do grupo" + +msgid "ldap_group_member_info" +msgstr "Observações da instalação" + +msgid "ldap_group_member_optional" +msgstr "A adesão ao grupo é opcional" + +msgid "ldap_group_member_short" +msgstr "Atributo:" + +msgid "ldap_group_membership" +msgstr "Adesão ao grupo" + +msgid "ldap_group_name" +msgstr "Nome do grupo" + +msgid "ldap_group_name_info" +msgstr "O nome do grupo, do qual os utilizadores têm de fazer parte, para poderem autenticar com sucesso." + +msgid "ldap_group_optional_info" +msgstr "Se estiver ativado, a adesão ao grupo não é necessária para uma autenticação bem-sucedida. Insira um filtro de utilizador para os membros destes grupos:
(&(userattr=username)(userfilter))" + +msgid "ldap_group_restrictions" +msgstr "Função do utilizador final previsto" + +msgid "ldap_group_scope" +msgstr "Âmbito de pesquisa" + +msgid "ldap_group_scope_info" +msgstr "Nível de interatividade" + +msgid "ldap_group_search_base" +msgstr "Base de pesquisa de grupo" + +msgid "ldap_group_user_filter" +msgstr "Usar filtro" + +msgid "ldap_ilias_role" +msgstr "Tipo de interatividade" + +msgid "ldap_info_text" +msgstr "Texto de informação" + +msgid "ldap_info_text_info" +msgstr "É baseado em" + +msgid "ldap_local_role" +msgstr "Função local" + +msgid "ldap_mapping_info_type" +msgstr "Mostrar informação também no repositório/computador pessoal" + +msgid "ldap_mapping_table" +msgstr "Atribuição de atributos LDAP para perfil de utilizador ILIAS" + +msgid "ldap_mapping_template" +msgstr "Modelo para objectClass:" + +msgid "ldap_member_info" +msgstr "O atributo do objeto de grupo onde o utilizador dn pode ser encontrado." + +msgid "ldap_memberisdn" +msgstr "Valor do atributo é DN" + +msgid "ldap_missing_bind_user" +msgstr "É base para" + +msgid "ldap_missing_role_assignment" +msgstr "Escolha uma função global, à qual os utilizadores novos serão atribuídos." + +msgid "ldap_moment_sync" +msgstr "É formato de" + +msgid "ldap_new_role_assignment" +msgstr "Adicionar nova função -> Atribuição de grupo" + +msgid "ldap_plugin" +msgstr "Atribuição por plugin" + +msgid "ldap_plugin_id" +msgstr "ID de plugin" + +msgid "ldap_plugin_info" +msgstr "Validar a atribuição de funções com um plugin. Introduza um id de plugin válido." + +msgid "ldap_referrals" +msgstr "Recomendações" + +msgid "ldap_referrals_info" +msgstr "Se estiver definido, determina se a biblioteca LDAP segue automaticamente recomendações dadas pelos servidores LDAP ou não. Isso deve ser desativado se estiver a usar um servidor de diretório ativo." + +msgid "ldap_remove_deprecated" +msgstr "Retirar a atribuição das funções obsoletas" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +msgid "ldap_role_active" +msgstr "Ativar sincronização do grupo" + +msgid "ldap_role_assignments" +msgstr "Atribuição de funções" + +msgid "ldap_role_at_info" +msgstr "A atribuição baseia-se num atributo específico no perfil de utilizador LDAP." + +msgid "ldap_role_at_name" +msgstr "Nome do atributo" + +msgid "ldap_role_at_value" +msgstr "Valor do atributo" + +msgid "ldap_role_bind_pass" +msgstr "Palavra-passe" + +msgid "ldap_role_bind_pass_info" +msgstr "Palavra-passe" + +msgid "ldap_role_bind_user" +msgstr "Faz parte de" + +msgid "ldap_role_bind_user_info" +msgstr "Insira um nome distinto de uma contas de utilizador LDAP. Este utilizador precisa de acesso de escrita para os grupos LDAP." + +msgid "ldap_role_by_attribute" +msgstr "Atributo LDAP" + +msgid "ldap_role_by_group" +msgstr "Adesão ao grupo" + +msgid "ldap_role_by_plugin" +msgstr "Por plugin" + +msgid "ldap_role_group_assignments" +msgstr "Função existente -> Atribuições de grupo" + +msgid "ldap_role_grp_at" +msgstr "Atributo" + +msgid "ldap_role_grp_dn_info" +msgstr "É referenciado por" + +msgid "ldap_role_grp_info" +msgstr "Os membros de um grupo LDAP específico serão atribuídos à função ILIAS fornecida." + +msgid "ldap_role_grp_isdn" +msgstr "Valor do atributo é DN" + +msgid "ldap_role_info" +msgstr "Insira o nome de uma função ILIAS que controlará a adesão ao grupo LDAP." + +msgid "ldap_role_mapping" +msgstr "É requerido por" + +msgid "ldap_role_name_info" +msgstr "Escolha uma função global ou insira o nome de uma função global." + +msgid "ldap_role_not_exists" +msgstr "Não existe uma função com esse nome" + +msgid "ldap_role_selection" +msgstr "Seleção de função" + +msgid "ldap_role_selection_info" +msgstr "A sua seleção é ambígua. Escolha uma das seguintes funções." + +msgid "ldap_role_settings" +msgstr "Definições de sincronização de grupo LDAP" + +msgid "ldap_rule_condition" +msgstr "condição" + +msgid "ldap_rule_type" +msgstr "Tipo de atribuição" + +msgid "ldap_scope_one" +msgstr "Um" + +msgid "ldap_scope_sub" +msgstr "Sub" + +msgid "ldap_search_base_info" +msgstr "Fica pré-anexado a basedn quando pesquisa utilizadores." + +msgid "ldap_search_filter" +msgstr "Filtro LDAP" + +msgid "ldap_server_bind_dn" +msgstr "É versão de" + +msgid "ldap_server_bind_pass" +msgstr "Palavra-passe" + +msgid "ldap_server_binding" +msgstr "Vinculativo" + +msgid "ldap_server_name" +msgstr "Nome da configuração LDAP" + +msgid "ldap_server_name_info" +msgstr "Escolha um nome para esta configuração de servidor LDAP." + +msgid "ldap_server_security_settings" +msgstr "Definições de segurança" + +msgid "ldap_server_short" +msgstr "URL do servidor:" + +msgid "ldap_server_url_info" +msgstr "Palavra-chave" + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "Tipo" + +msgid "ldap_servers" +msgstr "Servidor LDAP" + +msgid "ldap_settings" +msgstr "Definições do servidor" + +msgid "ldap_sync_cron" +msgstr "Por Cron-Job" + +msgid "ldap_sync_login" +msgstr "Aquando login" + +msgid "ldap_tbl_role_ass" +msgstr "Idioma" + +msgid "ldap_tls_conflict" +msgstr "Aprendiz" + +msgid "ldap_update_field_info" +msgstr "Atualizar automaticamente" + +msgid "ldap_update_roles" +msgstr "Atribuição de funções" + +msgid "ldap_user_attribute" +msgstr "Atributo para nome login" + +msgid "ldap_user_dn" +msgstr "Base de pesquisa de utilizador" + +msgid "ldap_user_mapping" +msgstr "Mapeamento do perfil do utilizador" + +msgid "ldap_user_scope" +msgstr "Âmbito de pesquisa" + +msgid "ldap_user_scope_info" +msgstr "Tipo de recurso de aprendizagem" + +msgid "ldap_user_sync" +msgstr "Definições da sincronização de utilizador" + +msgid "ldap_user_sync_cron" +msgstr "Sincronização de utilizador LDAP" + +msgid "ldap_user_sync_cron_info" +msgstr "Se estiver ativado, as contas de utilizador serão importadas do diretório LDAP e sincronizadas continuamente como uma opção." + +msgid "ldap_user_sync_info" +msgstr "Define se são criados automaticamente novos utilizadores aquando login ou regularmente por cron job." + +msgid "ldap_username_filter" +msgstr "Filtro nome de utilizador" + +msgid "ldap_username_filter_info" +msgstr "Usar * como asterisco." diff --git a/components/ILIAS/LDAP/lang/ldap_ro.po b/components/ILIAS/LDAP/lang/ldap_ro.po new file mode 100644 index 000000000000..9d3528e8d068 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_ro.po @@ -0,0 +1,517 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: ldap\n" + +#, fuzzy +msgid "add_ldap_server" +msgstr "Add Server" + +#, fuzzy +msgid "ldap_add_missing" +msgstr "Assign Missing Roles" + +#, fuzzy +msgid "ldap_add_role_ass_rule" +msgstr "New Rule for Role Assignments" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +#, fuzzy +msgid "ldap_as_ds" +msgstr "Use as Data Source" + +#, fuzzy +msgid "ldap_as_ds_info" +msgstr "If activated, this LDAP configuration is used only for the synchronization of user accounts in combination with other authentication methods." + +#, fuzzy +msgid "ldap_assignment_type" +msgstr "Assignment Type" + +#, fuzzy +msgid "ldap_authentication_settings" +msgstr "Authentication Settings" + +#, fuzzy +msgid "ldap_bind_anonymous" +msgstr "Bind Anonymously" + +#, fuzzy +msgid "ldap_bind_user" +msgstr "Bind as User:" + +#, fuzzy +msgid "ldap_btn_add_role_ass" +msgstr "Add New Rule" + +#, fuzzy +msgid "ldap_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +#, fuzzy +msgid "ldap_choose_role" +msgstr "Choose Role" + +#, fuzzy +msgid "ldap_confirm_del_role_ass" +msgstr "Delete Role Assignmen" + +#, fuzzy +msgid "ldap_deleted_role_mapping" +msgstr "Deleted assignment." + +#, fuzzy +msgid "ldap_deleted_rule" +msgstr "Deleted selected role assignments." + +#, fuzzy +msgid "ldap_dn_info" +msgstr "Enter the distinguished name of the LDAP group." + +#, fuzzy +msgid "ldap_edit_role_ass_rule" +msgstr "Edit Role Assignment Rule" + +#, fuzzy +msgid "ldap_edit_role_assignment" +msgstr "Edit Role -> Group Assignment" + +#, fuzzy +msgid "ldap_err_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +#, fuzzy +msgid "ldap_filter_info" +msgstr "Filter that will be added to the search filter this way: (&(userattr=username)(userfilter))." + +#, fuzzy +msgid "ldap_global_role" +msgstr "Global Role" + +#, fuzzy +msgid "ldap_global_role_assignment" +msgstr "ILIAS-Role Assignment" + +#, fuzzy +msgid "ldap_global_role_info" +msgstr "Please choose an ILIAS Role new users will be assigned to." + +#, fuzzy +msgid "ldap_group_attribute" +msgstr "Attribute for Group" + +#, fuzzy +msgid "ldap_group_attribute_info" +msgstr "The group attribute to search for." + +#, fuzzy +msgid "ldap_group_dn" +msgstr "Group DN" + +#, fuzzy +msgid "ldap_group_dn_info" +msgstr "Gets prepended to basedn when searching for groups." + +#, fuzzy +msgid "ldap_group_dn_short" +msgstr "Group DN:" + +#, fuzzy +msgid "ldap_group_filter" +msgstr "LDAP Filter" + +#, fuzzy +msgid "ldap_group_filter_info" +msgstr "Filter that will be added to the search filter when searching for a group: (&(groupattr=group)(memberattr=username)(groupfilter))." + +#, fuzzy +msgid "ldap_group_member" +msgstr "Group Member Attribute" + +#, fuzzy +msgid "ldap_group_member_info" +msgstr "The attribute of the group object where the user dn may be found. Choose \"Attribute Value is DN\" if the member attribute is the distinguished name of the users." + +#, fuzzy +msgid "ldap_group_member_optional" +msgstr "Group Membership is Optional" + +#, fuzzy +msgid "ldap_group_member_short" +msgstr "Attribute:" + +#, fuzzy +msgid "ldap_group_membership" +msgstr "Group Membership" + +#, fuzzy +msgid "ldap_group_name" +msgstr "Group Name" + +#, fuzzy +msgid "ldap_group_name_info" +msgstr "The name of the group users have to be a member of to authenticate successfully." + +#, fuzzy +msgid "ldap_group_optional_info" +msgstr "If enabled, the group membership is not required for a successful authentication. Please enter a user filter for the members of these groups:
(&(userattr=username)(userfilter))" + +#, fuzzy +msgid "ldap_group_restrictions" +msgstr "Group Restrictions" + +#, fuzzy +msgid "ldap_group_scope" +msgstr "Search Scope" + +#, fuzzy +msgid "ldap_group_scope_info" +msgstr "Scope for group searching. If unsure choose \"Sub\"" + +#, fuzzy +msgid "ldap_group_search_base" +msgstr "Group Search Base" + +#, fuzzy +msgid "ldap_group_user_filter" +msgstr "User Filter" + +#, fuzzy +msgid "ldap_ilias_role" +msgstr "ILIAS Role" + +#, fuzzy +msgid "ldap_info_text" +msgstr "Information Text" + +#, fuzzy +msgid "ldap_info_text_info" +msgstr "If entered, this text will be shown in the repository and on the info screen for the object this role is assigned to." + +#, fuzzy +msgid "ldap_local_role" +msgstr "Local Role" + +#, fuzzy +msgid "ldap_mapping_info_type" +msgstr "Show Information also in the Repository/Personal Desktop" + +#, fuzzy +msgid "ldap_mapping_table" +msgstr "Assignment of LDAP Attributes to ILIAS User Profile" + +#, fuzzy +msgid "ldap_mapping_template" +msgstr "Template for objectClass:" + +#, fuzzy +msgid "ldap_member_info" +msgstr "The attribute of the group object where the user dn may be found." + +#, fuzzy +msgid "ldap_memberisdn" +msgstr "Attribute Value is DN" + +#, fuzzy +msgid "ldap_missing_bind_user" +msgstr "You have chosen \"Bind as User\": Please enter a valid LDAP username and password." + +#, fuzzy +msgid "ldap_missing_role_assignment" +msgstr "Please choose a global role new users will be assigned to." + +#, fuzzy +msgid "ldap_moment_sync" +msgstr "Type of Sychronization" + +#, fuzzy +msgid "ldap_new_role_assignment" +msgstr "Add New Role -> Group Assignment" + +#, fuzzy +msgid "ldap_plugin" +msgstr "Assignment by Plugin" + +#, fuzzy +msgid "ldap_plugin_id" +msgstr "Plugin Id" + +#, fuzzy +msgid "ldap_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +#, fuzzy +msgid "ldap_referrals" +msgstr "Referrals" + +#, fuzzy +msgid "ldap_referrals_info" +msgstr "If set, determines whether the LDAP library automatically follows referrals returned by LDAP servers or not." + +#, fuzzy +msgid "ldap_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +#, fuzzy +msgid "ldap_role_active" +msgstr "Enable Group Synchronization" + +#, fuzzy +msgid "ldap_role_assignments" +msgstr "Role Assignment" + +#, fuzzy +msgid "ldap_role_at_info" +msgstr "The assignment is based on a specific attribute in the LDAP user profile." + +#, fuzzy +msgid "ldap_role_at_name" +msgstr "Attribute Name" + +#, fuzzy +msgid "ldap_role_at_value" +msgstr "Attribute Value" + +#, fuzzy +msgid "ldap_role_bind_pass" +msgstr "Password" + +#, fuzzy +msgid "ldap_role_bind_pass_info" +msgstr "Password" + +#, fuzzy +msgid "ldap_role_bind_user" +msgstr "Usern DN" + +#, fuzzy +msgid "ldap_role_bind_user_info" +msgstr "Please enter a distinguished name of a LDAP user account. This user needs write access for the LDAP groups." + +#, fuzzy +msgid "ldap_role_by_attribute" +msgstr "LDAP Attribute" + +#, fuzzy +msgid "ldap_role_by_group" +msgstr "Groupmembership" + +#, fuzzy +msgid "ldap_role_by_plugin" +msgstr "By Plugin" + +#, fuzzy +msgid "ldap_role_group_assignments" +msgstr "Existing Role -> Group Assignments" + +#, fuzzy +msgid "ldap_role_grp_at" +msgstr "Attribute" + +#, fuzzy +msgid "ldap_role_grp_dn_info" +msgstr "Please enter the \"Distinguished Name\" of the LDAP Group." + +#, fuzzy +msgid "ldap_role_grp_info" +msgstr "Members of a specific LDAP Group will be assigned to the given ILIAS role." + +#, fuzzy +msgid "ldap_role_grp_isdn" +msgstr "Attribute value is DN" + +#, fuzzy +msgid "ldap_role_info" +msgstr "Enter the name of an ILIAS Role that will control the membership to the LDAP group." + +#, fuzzy +msgid "ldap_role_mapping" +msgstr "LDAP-Group -> Role Mapping" + +#, fuzzy +msgid "ldap_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +#, fuzzy +msgid "ldap_role_not_exists" +msgstr "A role with that name does not exist" + +#, fuzzy +msgid "ldap_role_selection" +msgstr "Role Selection" + +#, fuzzy +msgid "ldap_role_selection_info" +msgstr "Your selection is ambiguous. Please choose one of the following roles." + +#, fuzzy +msgid "ldap_role_settings" +msgstr "LDAP Group Synchronization Settings" + +#, fuzzy +msgid "ldap_rule_condition" +msgstr "condition" + +#, fuzzy +msgid "ldap_rule_type" +msgstr "Type of Assignment" + +#, fuzzy +msgid "ldap_scope_one" +msgstr "One" + +#, fuzzy +msgid "ldap_scope_sub" +msgstr "Sub" + +#, fuzzy +msgid "ldap_search_base_info" +msgstr "Gets prepended to basedn when searching for users." + +#, fuzzy +msgid "ldap_search_filter" +msgstr "LDAP Filter" + +#, fuzzy +msgid "ldap_server_bind_dn" +msgstr "User DN" + +#, fuzzy +msgid "ldap_server_bind_pass" +msgstr "Password" + +#, fuzzy +msgid "ldap_server_binding" +msgstr "Binding" + +#, fuzzy +msgid "ldap_server_name" +msgstr "Name of LDAP Configuration" + +#, fuzzy +msgid "ldap_server_name_info" +msgstr "Please choose a name for this LDAP server configuration." + +#, fuzzy +msgid "ldap_server_security_settings" +msgstr "Security Settings" + +#, fuzzy +msgid "ldap_server_short" +msgstr "Server URL:" + +#, fuzzy +msgid "ldap_server_url_info" +msgstr "A fully qualified URL for specifying the protocol, url and port to connect to. E.g \"ldap://ldap.ilias.de:389\"" + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +#, fuzzy +msgid "ldap_server_version_info" +msgstr "LDAP version to use, ususally 3." + +#, fuzzy +msgid "ldap_servers" +msgstr "LDAP Server" + +#, fuzzy +msgid "ldap_settings" +msgstr "Server Settings" + +#, fuzzy +msgid "ldap_sync_cron" +msgstr "Per Cron-Job" + +#, fuzzy +msgid "ldap_sync_login" +msgstr "On Login" + +#, fuzzy +msgid "ldap_tbl_role_ass" +msgstr "Avtive Rules" + +#, fuzzy +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS can not be used in combination with LDAPv2. Please choose LDAP version \"3\" or disable TLS support." + +#, fuzzy +msgid "ldap_update_field_info" +msgstr "Update automatically" + +#, fuzzy +msgid "ldap_update_roles" +msgstr "Role Assignments" + +#, fuzzy +msgid "ldap_user_attribute" +msgstr "Attribute for Login Name" + +#, fuzzy +msgid "ldap_user_dn" +msgstr "User DN" + +#, fuzzy +msgid "ldap_user_mapping" +msgstr "User Profile Mapping" + +#, fuzzy +msgid "ldap_user_scope" +msgstr "Search Scope" + +#, fuzzy +msgid "ldap_user_scope_info" +msgstr "Scope for user searching. If unsure choose \"Sub\"." + +#, fuzzy +msgid "ldap_user_sync" +msgstr "User Synchronization Settings" + +#, fuzzy +msgid "ldap_user_sync_cron" +msgstr "LDAP User Synchronization " + +#, fuzzy +msgid "ldap_user_sync_cron_info" +msgstr "If activated, user accounts will be imported from the LDAP directory and synchronised continuously as an option." + +#, fuzzy +msgid "ldap_user_sync_info" +msgstr "Defines whether new users are automatically created on login or regularly per Cron-Job." + +#, fuzzy +msgid "ldap_username_filter" +msgstr "Username Filter" + +#, fuzzy +msgid "ldap_username_filter_info" +msgstr "Use * as wildcard." diff --git a/components/ILIAS/LDAP/lang/ldap_ru.po b/components/ILIAS/LDAP/lang/ldap_ru.po new file mode 100644 index 000000000000..92bf6202fe19 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_ru.po @@ -0,0 +1,401 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: ldap\n" + +#, fuzzy +msgid "add_ldap_server" +msgstr "Add Server" + +msgid "ldap_add_missing" +msgstr "Assign Missing Roles" + +msgid "ldap_add_role_ass_rule" +msgstr "New Rule for Role Assignments" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +msgid "ldap_as_ds" +msgstr "Use as Data Source" + +msgid "ldap_as_ds_info" +msgstr "If activated, this LDAP configuration is used only for the synchronization of user accounts in combination with other authentication methods." + +msgid "ldap_assignment_type" +msgstr "Assignment Type" + +msgid "ldap_authentication_settings" +msgstr "Authentication Settings" + +msgid "ldap_bind_anonymous" +msgstr "Bind Anonymously" + +msgid "ldap_bind_user" +msgstr "Bind as User:" + +msgid "ldap_btn_add_role_ass" +msgstr "Add New Rule" + +msgid "ldap_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +msgid "ldap_choose_role" +msgstr "Choose Role" + +msgid "ldap_confirm_del_role_ass" +msgstr "Delete Role Assignmen" + +msgid "ldap_deleted_role_mapping" +msgstr "Deleted assignment." + +msgid "ldap_deleted_rule" +msgstr "Deleted selected role assignments." + +msgid "ldap_dn_info" +msgstr "Enter the distinguished name of the LDAP group." + +msgid "ldap_edit_role_ass_rule" +msgstr "Edit Role Assignment Rule" + +msgid "ldap_edit_role_assignment" +msgstr "Edit Role -> Group Assignment" + +msgid "ldap_err_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +msgid "ldap_filter_info" +msgstr "Filter that will be added to the search filter this way: (&(userattr=username)(userfilter))." + +msgid "ldap_global_role" +msgstr "Global Role" + +msgid "ldap_global_role_assignment" +msgstr "ILIAS-Role Assignment" + +msgid "ldap_global_role_info" +msgstr "Please choose an ILIAS Role new users will be assigned to." + +msgid "ldap_group_attribute" +msgstr "Attribute for Group" + +msgid "ldap_group_attribute_info" +msgstr "The group attribute to search for." + +msgid "ldap_group_dn" +msgstr "Group Search Base" + +msgid "ldap_group_dn_info" +msgstr "Gets prepended to \"BaseDN\" when searching for groups." + +msgid "ldap_group_dn_short" +msgstr "Group DN:" + +msgid "ldap_group_filter" +msgstr "LDAP Filter" + +msgid "ldap_group_filter_info" +msgstr "Filter that will be added to the search filter when searching for a group: (&(groupattr=group)(memberattr=username)(groupfilter))." + +msgid "ldap_group_member" +msgstr "Group Member Attribute" + +msgid "ldap_group_member_info" +msgstr "The attribute of the group object where the user dn may be found. Choose \"Attribute Value is DN\" if the member attribute is the distinguished name of the users." + +msgid "ldap_group_member_optional" +msgstr "Group Membership is Optional" + +msgid "ldap_group_member_short" +msgstr "Attribute:" + +msgid "ldap_group_membership" +msgstr "Group Membership" + +msgid "ldap_group_name" +msgstr "Group Name" + +msgid "ldap_group_name_info" +msgstr "The name of the group users have to be a member of to authenticate successfully." + +msgid "ldap_group_optional_info" +msgstr "If enabled, the group membership is not required for a successful authentication. Please enter a user filter for the members of these groups:
(&(userattr=username)(userfilter))" + +msgid "ldap_group_restrictions" +msgstr "Group Restrictions" + +msgid "ldap_group_scope" +msgstr "Search Scope" + +msgid "ldap_group_scope_info" +msgstr "Scope for group searching. If unsure choose \"Sub\"" + +msgid "ldap_group_search_base" +msgstr "Group Search Base" + +msgid "ldap_group_user_filter" +msgstr "User Filter" + +msgid "ldap_ilias_role" +msgstr "ILIAS Role" + +msgid "ldap_info_text" +msgstr "Information Text" + +msgid "ldap_info_text_info" +msgstr "If entered, this text will be shown in the repository and on the info screen for the object this role is assigned to." + +msgid "ldap_local_role" +msgstr "Local Role" + +msgid "ldap_mapping_info_type" +msgstr "Show Information also in the Repository/Personal Desktop" + +msgid "ldap_mapping_table" +msgstr "Assignment of LDAP Attributes to ILIAS User Profile" + +msgid "ldap_mapping_template" +msgstr "Template for objectClass:" + +msgid "ldap_member_info" +msgstr "The attribute of the group object where the user dn may be found." + +msgid "ldap_memberisdn" +msgstr "Attribute Value is DN" + +msgid "ldap_missing_bind_user" +msgstr "You have chosen \"Bind as User\": Please enter a valid LDAP username and password." + +msgid "ldap_missing_role_assignment" +msgstr "Please choose a global role new users will be assigned to." + +msgid "ldap_moment_sync" +msgstr "Type of Sychronization" + +msgid "ldap_new_role_assignment" +msgstr "Add New Role -> Group Assignment" + +msgid "ldap_plugin" +msgstr "Assignment by Plugin" + +msgid "ldap_plugin_id" +msgstr "Plugin Id" + +msgid "ldap_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +msgid "ldap_referrals" +msgstr "Referrals" + +msgid "ldap_referrals_info" +msgstr "If set, determines whether the LDAP library automatically follows referrals returned by LDAP servers or not. This should be disabled if you are using an active directory server." + +msgid "ldap_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +msgid "ldap_role_active" +msgstr "Enable Group Synchronization" + +msgid "ldap_role_assignments" +msgstr "Role Assignment" + +msgid "ldap_role_at_info" +msgstr "The assignment is based on a specific attribute in the LDAP user profile." + +msgid "ldap_role_at_name" +msgstr "Attribute Name" + +msgid "ldap_role_at_value" +msgstr "Attribute Value" + +msgid "ldap_role_bind_pass" +msgstr "Password" + +msgid "ldap_role_bind_pass_info" +msgstr "Password" + +msgid "ldap_role_bind_user" +msgstr "Usern DN" + +msgid "ldap_role_bind_user_info" +msgstr "Please enter a distinguished name of a LDAP user account. This user needs write access for the LDAP groups." + +msgid "ldap_role_by_attribute" +msgstr "LDAP Attribute" + +msgid "ldap_role_by_group" +msgstr "Groupmembership" + +msgid "ldap_role_by_plugin" +msgstr "By Plugin" + +msgid "ldap_role_group_assignments" +msgstr "Existing Role -> Group Assignments" + +msgid "ldap_role_grp_at" +msgstr "Attribute" + +msgid "ldap_role_grp_dn_info" +msgstr "Please enter the \"Distinguished Name\" of the LDAP Group." + +msgid "ldap_role_grp_info" +msgstr "Members of a specific LDAP Group will be assigned to the given ILIAS role." + +msgid "ldap_role_grp_isdn" +msgstr "Attribute value is DN" + +msgid "ldap_role_info" +msgstr "Enter the name of an ILIAS Role that will control the membership to the LDAP group." + +msgid "ldap_role_mapping" +msgstr "LDAP-Group -> Role Mapping" + +msgid "ldap_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +msgid "ldap_role_not_exists" +msgstr "A role with that name does not exist" + +msgid "ldap_role_selection" +msgstr "Role Selection" + +msgid "ldap_role_selection_info" +msgstr "Your selection is ambiguous. Please choose one of the following roles." + +msgid "ldap_role_settings" +msgstr "LDAP Group Synchronization Settings" + +msgid "ldap_rule_condition" +msgstr "condition" + +msgid "ldap_rule_type" +msgstr "Type of Assignment" + +msgid "ldap_scope_one" +msgstr "One" + +msgid "ldap_scope_sub" +msgstr "Sub" + +msgid "ldap_search_base_info" +msgstr "Gets prepended to basedn when searching for users." + +msgid "ldap_search_filter" +msgstr "LDAP Filter" + +msgid "ldap_server_bind_dn" +msgstr "User Search Base" + +msgid "ldap_server_bind_pass" +msgstr "Password" + +msgid "ldap_server_binding" +msgstr "Binding" + +msgid "ldap_server_name" +msgstr "Name of LDAP Configuration" + +msgid "ldap_server_name_info" +msgstr "Please choose a name for this LDAP server configuration." + +msgid "ldap_server_security_settings" +msgstr "Security Settings" + +msgid "ldap_server_short" +msgstr "Server URL:" + +msgid "ldap_server_url_info" +msgstr "A fully qualified URL for specifying the protocol, url and port to connect to. E.g \"ldap://ldap.ilias.de:389\"" + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "LDAP version to use, ususally 3." + +#, fuzzy +msgid "ldap_servers" +msgstr "LDAP Server" + +msgid "ldap_settings" +msgstr "Настройки сервера" + +msgid "ldap_sync_cron" +msgstr "Per Cron-Job" + +msgid "ldap_sync_login" +msgstr "On Login" + +msgid "ldap_tbl_role_ass" +msgstr "Avtive Rules" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS can not be used in combination with LDAPv2. Please choose LDAP version \"3\" or disable TLS support." + +msgid "ldap_update_field_info" +msgstr "Update automatically" + +msgid "ldap_update_roles" +msgstr "Role Assignments" + +msgid "ldap_user_attribute" +msgstr "Attribute for Login Name" + +msgid "ldap_user_dn" +msgstr "User Search Base" + +msgid "ldap_user_mapping" +msgstr "User Profile Mapping" + +msgid "ldap_user_scope" +msgstr "Search Scope" + +msgid "ldap_user_scope_info" +msgstr "Scope for user searching. If unsure choose \"Sub\"." + +msgid "ldap_user_sync" +msgstr "User Synchronization Settings" + +msgid "ldap_user_sync_cron" +msgstr "LDAP User Synchronization" + +msgid "ldap_user_sync_cron_info" +msgstr "If activated, user accounts will be imported from the LDAP directory and synchronised continuously as an option." + +msgid "ldap_user_sync_info" +msgstr "Defines whether new users are automatically created on login or regularly per Cron-Job." + +#, fuzzy +msgid "ldap_username_filter" +msgstr "Username Filter" + +#, fuzzy +msgid "ldap_username_filter_info" +msgstr "Use * as wildcard." diff --git a/components/ILIAS/LDAP/lang/ldap_sk.po b/components/ILIAS/LDAP/lang/ldap_sk.po new file mode 100644 index 000000000000..b5395e03de8b --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_sk.po @@ -0,0 +1,407 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: ldap\n" + +#, fuzzy +msgid "add_ldap_server" +msgstr "Add Server" + +msgid "ldap_add_missing" +msgstr "Přiřadit chybějící role" + +msgid "ldap_add_role_ass_rule" +msgstr "Nové pravidlo pro přiřazení role" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +#, fuzzy +msgid "ldap_as_ds" +msgstr "Use as Data Source" + +#, fuzzy +msgid "ldap_as_ds_info" +msgstr "If activated, this LDAP configuration is used only for the synchronization of user accounts in combination with other authentication methods." + +msgid "ldap_assignment_type" +msgstr "Typ přiřazení" + +msgid "ldap_authentication_settings" +msgstr "Nastavení autentizace" + +msgid "ldap_bind_anonymous" +msgstr "Anonymní přihlášení" + +msgid "ldap_bind_user" +msgstr "Připojen jako uživatel:" + +msgid "ldap_btn_add_role_ass" +msgstr "Přidat nové pravidlo" + +msgid "ldap_check_role_assignment" +msgstr "Přiřazení role po dalším přihlášení" + +#, fuzzy +msgid "ldap_choose_role" +msgstr "Choose Role" + +msgid "ldap_confirm_del_role_ass" +msgstr "Smazat přiřazení role" + +msgid "ldap_deleted_role_mapping" +msgstr "Přiřazení smazáno" + +msgid "ldap_deleted_rule" +msgstr "Přiřazení vybraných rolí smazáno." + +msgid "ldap_dn_info" +msgstr "Vložte vyhrazené jméno skupiny LDAP." + +msgid "ldap_edit_role_ass_rule" +msgstr "Upravit pravidlo přiřazení role" + +#, fuzzy +msgid "ldap_edit_role_assignment" +msgstr "Edit Role -> Group Assignment" + +msgid "ldap_err_missing_plugin_id" +msgstr "Vložte prosím platné id pluginu." + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +msgid "ldap_filter_info" +msgstr "Filtr, který bude přidán k filtru vyhledávání tímto způsobem: (&(userattr=username)(userfilter))." + +msgid "ldap_global_role" +msgstr "Globální role" + +msgid "ldap_global_role_assignment" +msgstr "Přiřazení role ILIAS" + +msgid "ldap_global_role_info" +msgstr "Vyberte prosím přiřazení role ILIAS novým uživatelům." + +msgid "ldap_group_attribute" +msgstr "Atributy pro skupinu" + +msgid "ldap_group_attribute_info" +msgstr "Atributy skupinu pro vyhledávání." + +msgid "ldap_group_dn" +msgstr "Skupinové DN" + +msgid "ldap_group_dn_info" +msgstr "Určit předponu pro \"BaseDN\" pro vyhledávání skupin." + +msgid "ldap_group_dn_short" +msgstr "Skupinové DN:" + +msgid "ldap_group_filter" +msgstr "LDAP Filtr" + +msgid "ldap_group_filter_info" +msgstr "Filtr který bude přidán k filtru vyhledávání, pro vyhledávání skupin: (&(groupattr=group)(memberattr=username)(groupfilter))." + +msgid "ldap_group_member" +msgstr "Atributy skupin členů" + +msgid "ldap_group_member_info" +msgstr "Tyto atributy skupin objektů, kde DN uživatele mohou být nalezeni. Zvolte \"Hodnota atributu je DN\" když atributy členů je rozlišované jméno uživatelů." + +msgid "ldap_group_member_optional" +msgstr "Skupinové členství je volitelné" + +msgid "ldap_group_member_short" +msgstr "Atributy:" + +msgid "ldap_group_membership" +msgstr "Skupinové členství" + +msgid "ldap_group_name" +msgstr "Jméno skupiny" + +msgid "ldap_group_name_info" +msgstr "Název skupiny uživatelů je pro členy s úspěšnou autentizací." + +msgid "ldap_group_optional_info" +msgstr "Je-li zapnuto, členství skupiny není vyžadováno pro úspěšnou autentizaci. Vložte prosím filtr uživatelů pro členy této skupiny:
(&(userattr=username)(userfilter))" + +msgid "ldap_group_restrictions" +msgstr "Omezení skupiny" + +msgid "ldap_group_scope" +msgstr "Rozsah vyhledávání" + +msgid "ldap_group_scope_info" +msgstr "Rozsah skupinové vyhledávání. Není-li zajištěno zvolte \"Sub\"" + +msgid "ldap_group_search_base" +msgstr "Báze skupinového vyhledávání" + +msgid "ldap_group_user_filter" +msgstr "Uživatelský filtr" + +msgid "ldap_ilias_role" +msgstr "ILIAS Role" + +msgid "ldap_info_text" +msgstr "Informační text" + +msgid "ldap_info_text_info" +msgstr "Je-li vloženo, tento text bude zobrazen v úložišti a na informační obrazovce pro které je objekt této role přiřazen. Tento texte je volitelně dostupný v úložišti a na osobní pracovní ploše." + +msgid "ldap_local_role" +msgstr "Lokální role" + +msgid "ldap_mapping_info_type" +msgstr "Zobrazit informace také v Úložiště/Osobní pracovní plocha" + +msgid "ldap_mapping_table" +msgstr "Přiřazení atributů LDAP k uživatelskému profilu ILIAS" + +msgid "ldap_mapping_template" +msgstr "Šablona pro objectClass:" + +msgid "ldap_member_info" +msgstr "Atribut skupiny objektů, kde DN uživatele lze najít." + +msgid "ldap_memberisdn" +msgstr "Hodnota atributu je DN" + +msgid "ldap_missing_bind_user" +msgstr "Zvolil jste \"Připojen jako uživatel\": Vložte prosím platné jméno a heslo LDAP." + +msgid "ldap_missing_role_assignment" +msgstr "Vyberte prosím globální roli k přiřazení novému uživateli." + +msgid "ldap_moment_sync" +msgstr "Typ sychronizace" + +msgid "ldap_new_role_assignment" +msgstr "Přidat novou roli -> Skupinové přiřazení" + +msgid "ldap_plugin" +msgstr "Přiřazení Pluginem" + +msgid "ldap_plugin_id" +msgstr "Id Pluginu" + +msgid "ldap_plugin_info" +msgstr "Ověřte prosím přiřazení role pluginu. Vložte prosím platné id pluginu." + +msgid "ldap_referrals" +msgstr "Přesměrování" + +msgid "ldap_referrals_info" +msgstr "Je-li nastaveno, určuje zda knihovna LDAP automaticky následuje odkazovaná přesměrování vrácené LDAP servery nebo ne." + +msgid "ldap_remove_deprecated" +msgstr "Zrušit přiřazení neschválených rolí" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +msgid "ldap_role_active" +msgstr "Zapnout synchronizaci skupin" + +msgid "ldap_role_assignments" +msgstr "Přiřazení role" + +msgid "ldap_role_at_info" +msgstr "Toto přiřazení je založeno na specifickém atributu v uživatelském profilu LDAP." + +msgid "ldap_role_at_name" +msgstr "Název atributu" + +msgid "ldap_role_at_value" +msgstr "Hodnota atributu" + +msgid "ldap_role_bind_pass" +msgstr "Heslo" + +msgid "ldap_role_bind_pass_info" +msgstr "Heslo" + +msgid "ldap_role_bind_user" +msgstr "Uživatelské DN" + +msgid "ldap_role_bind_user_info" +msgstr "Vložte prosím vyhrazené jméno uživatelského účtu LDAP. Tento uživatel musí zapsaný přístup pro skupinu LDAP." + +msgid "ldap_role_by_attribute" +msgstr "Atribut LDAP" + +msgid "ldap_role_by_group" +msgstr "Skupinové členství" + +msgid "ldap_role_by_plugin" +msgstr "Podle Pluginů" + +msgid "ldap_role_group_assignments" +msgstr "Existující role -> Přiřazení skupiny" + +msgid "ldap_role_grp_at" +msgstr "Atribut" + +msgid "ldap_role_grp_dn_info" +msgstr "Vložte prosím \"Vyhrazené jméno\" skupiny LDAP." + +msgid "ldap_role_grp_info" +msgstr "Člen specifikované skupiny LDAP Group bude přiřazen k dané roli ILIAS." + +msgid "ldap_role_grp_isdn" +msgstr "Hodnota atributu je DN" + +msgid "ldap_role_info" +msgstr "Vložte název role ILIAS, která bude řídit členství ve skupině LDAP." + +msgid "ldap_role_mapping" +msgstr "Role ILIAS -> Mapování skupiny LDAP" + +msgid "ldap_role_name_info" +msgstr "Vyberte prosím globální roli, nebo vložte prosím jméno lokální role." + +msgid "ldap_role_not_exists" +msgstr "Role které jméno neexistuje" + +msgid "ldap_role_selection" +msgstr "Výběr role" + +msgid "ldap_role_selection_info" +msgstr "Váš výběr je nejednoznačný. Vyberte prosím jednu z následujících rolí." + +msgid "ldap_role_settings" +msgstr "Nastavení synchrozice skupin LDAP" + +msgid "ldap_rule_condition" +msgstr "Podmínka" + +msgid "ldap_rule_type" +msgstr "Typ přiřazení" + +msgid "ldap_scope_one" +msgstr "Jeden" + +msgid "ldap_scope_sub" +msgstr "Sub" + +msgid "ldap_search_base_info" +msgstr "Získat cestu do basedn pro hledání uživatelů." + +msgid "ldap_search_filter" +msgstr "LDAP Filtr" + +msgid "ldap_server_bind_dn" +msgstr "Uživatelské DN" + +msgid "ldap_server_bind_pass" +msgstr "Heslo" + +msgid "ldap_server_binding" +msgstr "Vazba" + +msgid "ldap_server_name" +msgstr "Název konfigurace LDAP" + +msgid "ldap_server_name_info" +msgstr "Zvolte prosím název pro tuto konfiguraci serveru LDAP." + +msgid "ldap_server_security_settings" +msgstr "Nastavení bezpečnosti" + +msgid "ldap_server_short" +msgstr "URL serveru:" + +msgid "ldap_server_url_info" +msgstr "Plně specifikovaná URL pro určení protokolu, URL a portu k připojení se. Např. \"ldap://ldap.ilias.de:389\". Můžete přidat více serverů oddělených čárkou. Servery jsou při dotazu cyklicky rotovány." + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "Verze LDAP k použití, obvykle 3." + +#, fuzzy +msgid "ldap_servers" +msgstr "LDAP Server" + +msgid "ldap_settings" +msgstr "Nastavení serveru" + +msgid "ldap_sync_cron" +msgstr "Přes Cron-Job" + +msgid "ldap_sync_login" +msgstr "Při přihlášení" + +msgid "ldap_tbl_role_ass" +msgstr "Aktivovat pravidla" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS nelze použít v kombinaci s LDAPv2. Zvolte prosím LDAP verzi \"3\" nebo vypněte podporu TLS." + +msgid "ldap_update_field_info" +msgstr "Aktializovat automaticky" + +msgid "ldap_update_roles" +msgstr "Přiřazení Role" + +msgid "ldap_user_attribute" +msgstr "Atributy pro login" + +msgid "ldap_user_dn" +msgstr "Uživatelská vyhledávací databáze" + +msgid "ldap_user_mapping" +msgstr "Mapování uživatelských profilů" + +msgid "ldap_user_scope" +msgstr "Oblast vyhledávání" + +msgid "ldap_user_scope_info" +msgstr "Oblast pro uživatelské vyhledávání. Není-li zajištěno, volte \"Sub\"." + +msgid "ldap_user_sync" +msgstr "Nastavení uživatelské synchronizace" + +#, fuzzy +msgid "ldap_user_sync_cron" +msgstr "LDAP User Synchronization " + +#, fuzzy +msgid "ldap_user_sync_cron_info" +msgstr "If activated, user accounts will be imported from the LDAP directory and synchronised continuously as an option." + +msgid "ldap_user_sync_info" +msgstr "Definuje zda nový uživatel je automaticky vytvářen při přihlášení, nebo řádně přes Cron-Job." + +#, fuzzy +msgid "ldap_username_filter" +msgstr "Username Filter" + +#, fuzzy +msgid "ldap_username_filter_info" +msgstr "Use * as wildcard." diff --git a/components/ILIAS/LDAP/lang/ldap_sl.po b/components/ILIAS/LDAP/lang/ldap_sl.po new file mode 100644 index 000000000000..da800c0c62ef --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_sl.po @@ -0,0 +1,395 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: ldap\n" + +msgid "add_ldap_server" +msgstr "Dodaj strežnik" + +msgid "ldap_add_missing" +msgstr "Dodeli manjkajoče vloge" + +msgid "ldap_add_role_ass_rule" +msgstr "Novo pravilo za dodeljevanje vlog ILIAS" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +msgid "ldap_as_ds" +msgstr "Uporabi kot vir podatkov" + +msgid "ldap_as_ds_info" +msgstr "Če je aktivirano, se konfiguracija LDAP za sinhronizacijo uporabniških podatkov uporablja v kombinaciji z drugimi metodami avtentikacije (Radius ...). Neposredna avtentikacija preko LDAP ni mogoča." + +msgid "ldap_assignment_type" +msgstr "Vrsta dodelitve" + +msgid "ldap_authentication_settings" +msgstr "Nastavitve za avtentikacijo" + +msgid "ldap_bind_anonymous" +msgstr "Poveži se anonimno" + +msgid "ldap_bind_user" +msgstr "Poveži se kot uporabnik:" + +msgid "ldap_btn_add_role_ass" +msgstr "Ustvari novo pravilo" + +msgid "ldap_check_role_assignment" +msgstr "Dodelitev vlog po kasnejših prijavah" + +msgid "ldap_choose_role" +msgstr "Izberi vlogo" + +msgid "ldap_confirm_del_role_ass" +msgstr "Izbriši dodelitev vloge" + +msgid "ldap_deleted_role_mapping" +msgstr "Dodelitev je bila izbrisana." + +msgid "ldap_deleted_rule" +msgstr "Izbrana dodelitev vloge je bila izbrisana" + +msgid "ldap_dn_info" +msgstr "Tukaj izberite celotno DN skupine LDAP." + +msgid "ldap_edit_role_ass_rule" +msgstr "Uredi pravilo za dodelitev vlog" + +msgid "ldap_edit_role_assignment" +msgstr "Uredi dodelitev" + +msgid "ldap_err_missing_plugin_id" +msgstr "Vnesite veljaven ID vtičnika." + +msgid "ldap_escapedn" +msgstr "Escape DN" + +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +msgid "ldap_filter_info" +msgstr "Filter, ki bo dodan iskalnemu filtru na naslednji način: (&(userattr=username)(userfilter))" + +msgid "ldap_global_role" +msgstr "Globalna vloga" + +msgid "ldap_global_role_assignment" +msgstr "Dodelitev vlog" + +msgid "ldap_global_role_info" +msgstr "Izberite globalno vlogo za nove uporabnike ILIAS. * Vloga je obvezna, takoj ko ste izbrali vrsto sinhronizacije." + +msgid "ldap_group_attribute" +msgstr "Ime atributa skupine" + +msgid "ldap_group_attribute_info" +msgstr "Tukaj vnesite ime atributa skupine." + +msgid "ldap_group_dn" +msgstr "DN skupin" + +msgid "ldap_group_dn_info" +msgstr "Iskalna osnova za iskanje skupin. Postavljen je pred \"BaseDN\" Npr.: ou=Groups" + +msgid "ldap_group_dn_short" +msgstr "DN skupine:" + +msgid "ldap_group_filter" +msgstr "Filter LDAP" + +msgid "ldap_group_filter_info" +msgstr "Filter, ki bo dodan iskalnemu filtru na naslednji način: (&(groupattr=group)(memberattr=username)(groupfilter))" + +msgid "ldap_group_member" +msgstr "Ime atributa članov skupine" + +msgid "ldap_group_member_info" +msgstr "Tukaj vnesite ime atributa, ki je dodeljen članom skupine. Izberite 'Vrednost atributa je DN', če so imena članov dodana kot DN." + +msgid "ldap_group_member_optional" +msgstr "Neobvezno članstvo v skupini" + +msgid "ldap_group_member_short" +msgstr "Atribut:" + +msgid "ldap_group_membership" +msgstr "Članstvo v skupini" + +msgid "ldap_group_name" +msgstr "Ime skupine" + +msgid "ldap_group_name_info" +msgstr "Ime skupine" + +msgid "ldap_group_optional_info" +msgstr "Če je aktivirano, članstvo v skupini ni obvezno za uspešno avtentikacijo. Vnesite filter uporabnika za te člane skupin:
(&(userattr=username)(userfilter))" + +msgid "ldap_group_restrictions" +msgstr "Omejitve skupine" + +msgid "ldap_group_scope" +msgstr "Področje iskanja" + +msgid "ldap_group_scope_info" +msgstr "Področje za skupinsko iskanje. Če niste prepričani, izberite \"Sub\"." + +msgid "ldap_group_search_base" +msgstr "Iskalna osnova" + +msgid "ldap_group_user_filter" +msgstr "Filter uporabnika" + +msgid "ldap_ilias_role" +msgstr "Ime vloge ILIAS" + +msgid "ldap_info_text" +msgstr "Besedilo informacije" + +msgid "ldap_info_text_info" +msgstr "Tukaj lahko vnesete besedilo informacije, ki bo prikazana na strani z informacijami o objektu, ki pripada vlogi. Po želji se to besedilo lahko prikaže tudi v magazinu ali na nadzorni plošči." + +msgid "ldap_local_role" +msgstr "Lokalna vloga" + +msgid "ldap_mapping_info_type" +msgstr "Prikaži tudi v magazinu." + +msgid "ldap_mapping_table" +msgstr "Uporabniškemu profilu ILIAS dodeli atribute LDAP" + +msgid "ldap_mapping_template" +msgstr "Uporabi predlogo za razred objekta:" + +msgid "ldap_member_info" +msgstr "Tukaj vnesite ime atributa, ki je dodeljen članom skupine. Izberite 'Vrednost atributa je DN', če so imena članov dodana kot DN." + +msgid "ldap_memberisdn" +msgstr "Vrednost atributa je DN" + +msgid "ldap_missing_bind_user" +msgstr "Za vrsto povezave ste izbrali 'Poveži se kot uporabnik': Vnesite uporabniško ime in geslo." + +msgid "ldap_missing_role_assignment" +msgstr "Izberite globalno vlogo, ki ji bodo dodeljeni novi uporabniki." + +msgid "ldap_moment_sync" +msgstr "Vrsta sinhronizacije" + +msgid "ldap_new_role_assignment" +msgstr "Ustvari novo dodelitev" + +msgid "ldap_plugin" +msgstr "Dodelitev preko vtičnika" + +msgid "ldap_plugin_id" +msgstr "Id vtičnika" + +msgid "ldap_plugin_info" +msgstr "Preverjanje dodelitve vloge preko vtičnika. Vnesite veljaven ID vtičnika." + +msgid "ldap_referrals" +msgstr "Posredovanje" + +msgid "ldap_referrals_info" +msgstr "Tu je določeno, ali se posredovanje strežnika LDAP izvede samodejno ali ne." + +msgid "ldap_remove_deprecated" +msgstr "Odstrani nepooblaščene vloge" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +msgid "ldap_role_active" +msgstr "Posodabljanje skupin je vključeno" + +msgid "ldap_role_assignments" +msgstr "Dodelitev vlog" + +msgid "ldap_role_at_info" +msgstr "Dodelitev temelji na določenem atributu v uporabniškem profilu LDAP." + +msgid "ldap_role_at_name" +msgstr "Ime atributa" + +msgid "ldap_role_at_value" +msgstr "Vrednost atributa" + +msgid "ldap_role_bind_pass" +msgstr "Geslo" + +msgid "ldap_role_bind_pass_info" +msgstr "Geslo uporabnika LDAP." + +msgid "ldap_role_bind_user" +msgstr "Uporabniško ime" + +msgid "ldap_role_bind_user_info" +msgstr "Vnesite uporabniško ime LDAP. Ta uporabnik potrebuje dostop za pisanje v skupinah, ki jih je treba posodobiti." + +msgid "ldap_role_by_attribute" +msgstr "Atribut uporabnika" + +msgid "ldap_role_by_group" +msgstr "Pripadnost skupini" + +msgid "ldap_role_by_plugin" +msgstr "Preko vtičnika" + +msgid "ldap_role_group_assignments" +msgstr "Obstoječe dodelitve" + +msgid "ldap_role_grp_at" +msgstr "Atribut" + +msgid "ldap_role_grp_dn_info" +msgstr "Vnesite popolno \"Distinguished Name\" skupine." + +msgid "ldap_role_grp_info" +msgstr "Člani določene skupine LDAP bodo dodeljeni navedeni vlogi ILIAS." + +msgid "ldap_role_grp_isdn" +msgstr "Vrednost atributa je DN" + +msgid "ldap_role_info" +msgstr "Vnesite ime vloge ILIAS, ki bo nadzorovala članstvo v skupini LDAP." + +msgid "ldap_role_mapping" +msgstr "Dodelitev vlog ILIAS » skupine LDAP" + +msgid "ldap_role_name_info" +msgstr "Izberite globalno vlogo ali vnesite ime lokalne vloge." + +msgid "ldap_role_not_exists" +msgstr "Vloga ILIAS z naslednjim imenom ne obstaja:" + +msgid "ldap_role_selection" +msgstr "Izbira vlog" + +msgid "ldap_role_selection_info" +msgstr "Vaša izbira ni edinstvena. Izberite eno od naslednjih vlog." + +msgid "ldap_role_settings" +msgstr "Nastavitve posodabljanja skupine LDAP" + +msgid "ldap_rule_condition" +msgstr "Pogoj" + +msgid "ldap_rule_type" +msgstr "Vrsta dodelitve" + +msgid "ldap_scope_one" +msgstr "Ena" + +msgid "ldap_scope_sub" +msgstr "Sub" + +msgid "ldap_search_base_info" +msgstr "Iskalna osnova za iskanje uporabnikov. Postavljen je pred \"BaseDN\" Npr.: ou=People" + +msgid "ldap_search_filter" +msgstr "Filter LDAP" + +msgid "ldap_server_bind_dn" +msgstr "DN uporabnika" + +msgid "ldap_server_bind_pass" +msgstr "Geslo" + +msgid "ldap_server_binding" +msgstr "Vrsta povezave" + +msgid "ldap_server_name" +msgstr "Ime konfiguracije LDAP" + +msgid "ldap_server_name_info" +msgstr "Izberite ime za to konfiguracijo strežnika" + +msgid "ldap_server_security_settings" +msgstr "Varnostne nastavitve" + +msgid "ldap_server_short" +msgstr "URL strežnika:" + +msgid "ldap_server_url_info" +msgstr "Celoten URL za povezavo s strežnikom LDAP. Npr. \"ldaps://ldap.ilias.de:636\"." + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "Različica protokola strežnika LDAP (v večini primerov \"LDAPv3\")." + +msgid "ldap_servers" +msgstr "Strežnik LDAP" + +msgid "ldap_settings" +msgstr "Nastavitve strežnika" + +msgid "ldap_sync_cron" +msgstr "Preko cron job" + +msgid "ldap_sync_login" +msgstr "Ob prijavi uporabnikov" + +msgid "ldap_tbl_role_ass" +msgstr "Aktivna pravila za dodelitev vlog" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS ni mogoče uporabiti v kombinaciji z različico protokola 2." + +msgid "ldap_update_field_info" +msgstr "Samodejno posodobi" + +msgid "ldap_update_roles" +msgstr "Dodeljevanje vlog" + +msgid "ldap_user_attribute" +msgstr "Ime atributa za dostope uporabnikov" + +msgid "ldap_user_dn" +msgstr "Iskalna osnova" + +msgid "ldap_user_mapping" +msgstr "Dodelitev podatkov o profilu" + +msgid "ldap_user_scope" +msgstr "Področje iskanja" + +msgid "ldap_user_scope_info" +msgstr "Področje za iskanje uporabnika. Če niste prepričani, izberite \"Sub\"." + +msgid "ldap_user_sync" +msgstr "Nastavitve sinhronizacije uporabnikov" + +msgid "ldap_user_sync_cron" +msgstr "Sinhronizacija uporabnikov LDAP" + +msgid "ldap_user_sync_cron_info" +msgstr "Če je aktivirano, bodo uporabniški računi uvoženi iz seznama LDAP in po želji stalno sinhronizirani." + +msgid "ldap_user_sync_info" +msgstr "Določa, ali se novi uporabniki ustvarijo samodejno ob prvi prijavi ali redno preko cron job." + +msgid "ldap_username_filter" +msgstr "Filter uporabniških imen" + +msgid "ldap_username_filter_info" +msgstr "Uporabite * kot nadomestni znak." diff --git a/components/ILIAS/LDAP/lang/ldap_sq.po b/components/ILIAS/LDAP/lang/ldap_sq.po new file mode 100644 index 000000000000..7d7c660882ca --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_sq.po @@ -0,0 +1,517 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ldap\n" + +#, fuzzy +msgid "add_ldap_server" +msgstr "Add Server" + +#, fuzzy +msgid "ldap_add_missing" +msgstr "Assign Missing Roles" + +#, fuzzy +msgid "ldap_add_role_ass_rule" +msgstr "New Rule for Role Assignments" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +#, fuzzy +msgid "ldap_as_ds" +msgstr "Use as Data Source" + +#, fuzzy +msgid "ldap_as_ds_info" +msgstr "If activated, this LDAP configuration is used only for the synchronization of user accounts in combination with other authentication methods." + +#, fuzzy +msgid "ldap_assignment_type" +msgstr "Assignment Type" + +#, fuzzy +msgid "ldap_authentication_settings" +msgstr "Authentication Settings" + +#, fuzzy +msgid "ldap_bind_anonymous" +msgstr "Bind Anonymously" + +#, fuzzy +msgid "ldap_bind_user" +msgstr "Bind as User:" + +#, fuzzy +msgid "ldap_btn_add_role_ass" +msgstr "Add New Rule" + +#, fuzzy +msgid "ldap_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +#, fuzzy +msgid "ldap_choose_role" +msgstr "Choose Role" + +#, fuzzy +msgid "ldap_confirm_del_role_ass" +msgstr "Delete Role Assignmen" + +#, fuzzy +msgid "ldap_deleted_role_mapping" +msgstr "Deleted assignment." + +#, fuzzy +msgid "ldap_deleted_rule" +msgstr "Deleted selected role assignments." + +#, fuzzy +msgid "ldap_dn_info" +msgstr "Enter the distinguished name of the LDAP group." + +#, fuzzy +msgid "ldap_edit_role_ass_rule" +msgstr "Edit Role Assignment Rule" + +#, fuzzy +msgid "ldap_edit_role_assignment" +msgstr "Edit Role -> Group Assignment" + +#, fuzzy +msgid "ldap_err_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +#, fuzzy +msgid "ldap_filter_info" +msgstr "Filter that will be added to the search filter this way: (&(userattr=username)(userfilter))." + +#, fuzzy +msgid "ldap_global_role" +msgstr "Global Role" + +#, fuzzy +msgid "ldap_global_role_assignment" +msgstr "ILIAS-Role Assignment" + +#, fuzzy +msgid "ldap_global_role_info" +msgstr "Please choose an ILIAS Role new users will be assigned to." + +#, fuzzy +msgid "ldap_group_attribute" +msgstr "Attribute for Group" + +#, fuzzy +msgid "ldap_group_attribute_info" +msgstr "The group attribute to search for." + +#, fuzzy +msgid "ldap_group_dn" +msgstr "Group DN" + +#, fuzzy +msgid "ldap_group_dn_info" +msgstr "Gets prepended to basedn when searching for groups." + +#, fuzzy +msgid "ldap_group_dn_short" +msgstr "Group DN:" + +#, fuzzy +msgid "ldap_group_filter" +msgstr "LDAP Filter" + +#, fuzzy +msgid "ldap_group_filter_info" +msgstr "Filter that will be added to the search filter when searching for a group: (&(groupattr=group)(memberattr=username)(groupfilter))." + +#, fuzzy +msgid "ldap_group_member" +msgstr "Group Member Attribute" + +#, fuzzy +msgid "ldap_group_member_info" +msgstr "The attribute of the group object where the user dn may be found. Choose \"Attribute Value is DN\" if the member attribute is the distinguished name of the users." + +#, fuzzy +msgid "ldap_group_member_optional" +msgstr "Group Membership is Optional" + +#, fuzzy +msgid "ldap_group_member_short" +msgstr "Attribute:" + +#, fuzzy +msgid "ldap_group_membership" +msgstr "Group Membership" + +#, fuzzy +msgid "ldap_group_name" +msgstr "Group Name" + +#, fuzzy +msgid "ldap_group_name_info" +msgstr "The name of the group users have to be a member of to authenticate successfully." + +#, fuzzy +msgid "ldap_group_optional_info" +msgstr "If enabled, the group membership is not required for a successful authentication. Please enter a user filter for the members of these groups:
(&(userattr=username)(userfilter))" + +#, fuzzy +msgid "ldap_group_restrictions" +msgstr "Group Restrictions" + +#, fuzzy +msgid "ldap_group_scope" +msgstr "Search Scope" + +#, fuzzy +msgid "ldap_group_scope_info" +msgstr "Scope for group searching. If unsure choose \"Sub\"" + +#, fuzzy +msgid "ldap_group_search_base" +msgstr "Group Search Base" + +#, fuzzy +msgid "ldap_group_user_filter" +msgstr "User Filter" + +#, fuzzy +msgid "ldap_ilias_role" +msgstr "ILIAS Role" + +#, fuzzy +msgid "ldap_info_text" +msgstr "Information Text" + +#, fuzzy +msgid "ldap_info_text_info" +msgstr "If entered, this text will be shown in the repository and on the info screen for the object this role is assigned to." + +#, fuzzy +msgid "ldap_local_role" +msgstr "Local Role" + +#, fuzzy +msgid "ldap_mapping_info_type" +msgstr "Show Information also in the Repository/Personal Desktop" + +#, fuzzy +msgid "ldap_mapping_table" +msgstr "Assignment of LDAP Attributes to ILIAS User Profile" + +#, fuzzy +msgid "ldap_mapping_template" +msgstr "Template for objectClass:" + +#, fuzzy +msgid "ldap_member_info" +msgstr "The attribute of the group object where the user dn may be found." + +#, fuzzy +msgid "ldap_memberisdn" +msgstr "Attribute Value is DN" + +#, fuzzy +msgid "ldap_missing_bind_user" +msgstr "You have chosen \"Bind as User\": Please enter a valid LDAP username and password." + +#, fuzzy +msgid "ldap_missing_role_assignment" +msgstr "Please choose a global role new users will be assigned to." + +#, fuzzy +msgid "ldap_moment_sync" +msgstr "Type of Sychronization" + +#, fuzzy +msgid "ldap_new_role_assignment" +msgstr "Add New Role -> Group Assignment" + +#, fuzzy +msgid "ldap_plugin" +msgstr "Assignment by Plugin" + +#, fuzzy +msgid "ldap_plugin_id" +msgstr "Plugin Id" + +#, fuzzy +msgid "ldap_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +#, fuzzy +msgid "ldap_referrals" +msgstr "Referrals" + +#, fuzzy +msgid "ldap_referrals_info" +msgstr "If set, determines whether the LDAP library automatically follows referrals returned by LDAP servers or not." + +#, fuzzy +msgid "ldap_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +#, fuzzy +msgid "ldap_role_active" +msgstr "Enable Group Synchronization" + +#, fuzzy +msgid "ldap_role_assignments" +msgstr "Role Assignment" + +#, fuzzy +msgid "ldap_role_at_info" +msgstr "The assignment is based on a specific attribute in the LDAP user profile." + +#, fuzzy +msgid "ldap_role_at_name" +msgstr "Attribute Name" + +#, fuzzy +msgid "ldap_role_at_value" +msgstr "Attribute Value" + +#, fuzzy +msgid "ldap_role_bind_pass" +msgstr "Password" + +#, fuzzy +msgid "ldap_role_bind_pass_info" +msgstr "Password" + +#, fuzzy +msgid "ldap_role_bind_user" +msgstr "Usern DN" + +#, fuzzy +msgid "ldap_role_bind_user_info" +msgstr "Please enter a distinguished name of a LDAP user account. This user needs write access for the LDAP groups." + +#, fuzzy +msgid "ldap_role_by_attribute" +msgstr "LDAP Attribute" + +#, fuzzy +msgid "ldap_role_by_group" +msgstr "Groupmembership" + +#, fuzzy +msgid "ldap_role_by_plugin" +msgstr "By Plugin" + +#, fuzzy +msgid "ldap_role_group_assignments" +msgstr "Existing Role -> Group Assignments" + +#, fuzzy +msgid "ldap_role_grp_at" +msgstr "Attribute" + +#, fuzzy +msgid "ldap_role_grp_dn_info" +msgstr "Please enter the \"Distinguished Name\" of the LDAP Group." + +#, fuzzy +msgid "ldap_role_grp_info" +msgstr "Members of a specific LDAP Group will be assigned to the given ILIAS role." + +#, fuzzy +msgid "ldap_role_grp_isdn" +msgstr "Attribute value is DN" + +#, fuzzy +msgid "ldap_role_info" +msgstr "Enter the name of an ILIAS Role that will control the membership to the LDAP group." + +#, fuzzy +msgid "ldap_role_mapping" +msgstr "LDAP-Group -> Role Mapping" + +#, fuzzy +msgid "ldap_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +#, fuzzy +msgid "ldap_role_not_exists" +msgstr "A role with that name does not exist" + +#, fuzzy +msgid "ldap_role_selection" +msgstr "Role Selection" + +#, fuzzy +msgid "ldap_role_selection_info" +msgstr "Your selection is ambiguous. Please choose one of the following roles." + +#, fuzzy +msgid "ldap_role_settings" +msgstr "LDAP Group Synchronization Settings" + +#, fuzzy +msgid "ldap_rule_condition" +msgstr "condition" + +#, fuzzy +msgid "ldap_rule_type" +msgstr "Type of Assignment" + +#, fuzzy +msgid "ldap_scope_one" +msgstr "One" + +#, fuzzy +msgid "ldap_scope_sub" +msgstr "Sub" + +#, fuzzy +msgid "ldap_search_base_info" +msgstr "Gets prepended to basedn when searching for users." + +#, fuzzy +msgid "ldap_search_filter" +msgstr "LDAP Filter" + +#, fuzzy +msgid "ldap_server_bind_dn" +msgstr "User DN" + +#, fuzzy +msgid "ldap_server_bind_pass" +msgstr "Password" + +#, fuzzy +msgid "ldap_server_binding" +msgstr "Binding" + +#, fuzzy +msgid "ldap_server_name" +msgstr "Name of LDAP Configuration" + +#, fuzzy +msgid "ldap_server_name_info" +msgstr "Please choose a name for this LDAP server configuration." + +#, fuzzy +msgid "ldap_server_security_settings" +msgstr "Security Settings" + +#, fuzzy +msgid "ldap_server_short" +msgstr "Server URL:" + +#, fuzzy +msgid "ldap_server_url_info" +msgstr "A fully qualified URL for specifying the protocol, url and port to connect to. E.g \"ldap://ldap.ilias.de:389\"" + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +#, fuzzy +msgid "ldap_server_version_info" +msgstr "LDAP version to use, ususally 3." + +#, fuzzy +msgid "ldap_servers" +msgstr "LDAP Server" + +#, fuzzy +msgid "ldap_settings" +msgstr "Server Settings" + +#, fuzzy +msgid "ldap_sync_cron" +msgstr "Per Cron-Job" + +#, fuzzy +msgid "ldap_sync_login" +msgstr "On Login" + +#, fuzzy +msgid "ldap_tbl_role_ass" +msgstr "Avtive Rules" + +#, fuzzy +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS can not be used in combination with LDAPv2. Please choose LDAP version \"3\" or disable TLS support." + +#, fuzzy +msgid "ldap_update_field_info" +msgstr "Update automatically" + +#, fuzzy +msgid "ldap_update_roles" +msgstr "Role Assignments" + +#, fuzzy +msgid "ldap_user_attribute" +msgstr "Attribute for Login Name" + +#, fuzzy +msgid "ldap_user_dn" +msgstr "User DN" + +#, fuzzy +msgid "ldap_user_mapping" +msgstr "User Profile Mapping" + +#, fuzzy +msgid "ldap_user_scope" +msgstr "Search Scope" + +#, fuzzy +msgid "ldap_user_scope_info" +msgstr "Scope for user searching. If unsure choose \"Sub\"." + +#, fuzzy +msgid "ldap_user_sync" +msgstr "User Synchronization Settings" + +#, fuzzy +msgid "ldap_user_sync_cron" +msgstr "LDAP User Synchronization " + +#, fuzzy +msgid "ldap_user_sync_cron_info" +msgstr "If activated, user accounts will be imported from the LDAP directory and synchronised continuously as an option." + +#, fuzzy +msgid "ldap_user_sync_info" +msgstr "Defines whether new users are automatically created on login or regularly per Cron-Job." + +#, fuzzy +msgid "ldap_username_filter" +msgstr "Username Filter" + +#, fuzzy +msgid "ldap_username_filter_info" +msgstr "Use * as wildcard." diff --git a/components/ILIAS/LDAP/lang/ldap_sr.po b/components/ILIAS/LDAP/lang/ldap_sr.po new file mode 100644 index 000000000000..9d5c74e4f064 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_sr.po @@ -0,0 +1,517 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: ldap\n" + +#, fuzzy +msgid "add_ldap_server" +msgstr "Add Server" + +#, fuzzy +msgid "ldap_add_missing" +msgstr "Assign Missing Roles" + +#, fuzzy +msgid "ldap_add_role_ass_rule" +msgstr "New Rule for Role Assignments" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +#, fuzzy +msgid "ldap_as_ds" +msgstr "Use as Data Source" + +#, fuzzy +msgid "ldap_as_ds_info" +msgstr "If activated, this LDAP configuration is used only for the synchronization of user accounts in combination with other authentication methods." + +#, fuzzy +msgid "ldap_assignment_type" +msgstr "Assignment Type" + +#, fuzzy +msgid "ldap_authentication_settings" +msgstr "Authentication Settings" + +#, fuzzy +msgid "ldap_bind_anonymous" +msgstr "Bind Anonymously" + +#, fuzzy +msgid "ldap_bind_user" +msgstr "Bind as User:" + +#, fuzzy +msgid "ldap_btn_add_role_ass" +msgstr "Add New Rule" + +#, fuzzy +msgid "ldap_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +#, fuzzy +msgid "ldap_choose_role" +msgstr "Choose Role" + +#, fuzzy +msgid "ldap_confirm_del_role_ass" +msgstr "Delete Role Assignmen" + +#, fuzzy +msgid "ldap_deleted_role_mapping" +msgstr "Deleted assignment." + +#, fuzzy +msgid "ldap_deleted_rule" +msgstr "Deleted selected role assignments." + +#, fuzzy +msgid "ldap_dn_info" +msgstr "Enter the distinguished name of the LDAP group." + +#, fuzzy +msgid "ldap_edit_role_ass_rule" +msgstr "Edit Role Assignment Rule" + +#, fuzzy +msgid "ldap_edit_role_assignment" +msgstr "Edit Role -> Group Assignment" + +#, fuzzy +msgid "ldap_err_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +#, fuzzy +msgid "ldap_filter_info" +msgstr "Filter that will be added to the search filter this way: (&(userattr=username)(userfilter))." + +#, fuzzy +msgid "ldap_global_role" +msgstr "Global Role" + +#, fuzzy +msgid "ldap_global_role_assignment" +msgstr "ILIAS-Role Assignment" + +#, fuzzy +msgid "ldap_global_role_info" +msgstr "Please choose an ILIAS Role new users will be assigned to." + +#, fuzzy +msgid "ldap_group_attribute" +msgstr "Attribute for Group" + +#, fuzzy +msgid "ldap_group_attribute_info" +msgstr "The group attribute to search for." + +#, fuzzy +msgid "ldap_group_dn" +msgstr "Group DN" + +#, fuzzy +msgid "ldap_group_dn_info" +msgstr "Gets prepended to basedn when searching for groups." + +#, fuzzy +msgid "ldap_group_dn_short" +msgstr "Group DN:" + +#, fuzzy +msgid "ldap_group_filter" +msgstr "LDAP Filter" + +#, fuzzy +msgid "ldap_group_filter_info" +msgstr "Filter that will be added to the search filter when searching for a group: (&(groupattr=group)(memberattr=username)(groupfilter))." + +#, fuzzy +msgid "ldap_group_member" +msgstr "Group Member Attribute" + +#, fuzzy +msgid "ldap_group_member_info" +msgstr "The attribute of the group object where the user dn may be found. Choose \"Attribute Value is DN\" if the member attribute is the distinguished name of the users." + +#, fuzzy +msgid "ldap_group_member_optional" +msgstr "Group Membership is Optional" + +#, fuzzy +msgid "ldap_group_member_short" +msgstr "Attribute:" + +#, fuzzy +msgid "ldap_group_membership" +msgstr "Group Membership" + +#, fuzzy +msgid "ldap_group_name" +msgstr "Group Name" + +#, fuzzy +msgid "ldap_group_name_info" +msgstr "The name of the group users have to be a member of to authenticate successfully." + +#, fuzzy +msgid "ldap_group_optional_info" +msgstr "If enabled, the group membership is not required for a successful authentication. Please enter a user filter for the members of these groups:
(&(userattr=username)(userfilter))" + +#, fuzzy +msgid "ldap_group_restrictions" +msgstr "Group Restrictions" + +#, fuzzy +msgid "ldap_group_scope" +msgstr "Search Scope" + +#, fuzzy +msgid "ldap_group_scope_info" +msgstr "Scope for group searching. If unsure choose \"Sub\"" + +#, fuzzy +msgid "ldap_group_search_base" +msgstr "Group Search Base" + +#, fuzzy +msgid "ldap_group_user_filter" +msgstr "User Filter" + +#, fuzzy +msgid "ldap_ilias_role" +msgstr "ILIAS Role" + +#, fuzzy +msgid "ldap_info_text" +msgstr "Information Text" + +#, fuzzy +msgid "ldap_info_text_info" +msgstr "If entered, this text will be shown in the repository and on the info screen for the object this role is assigned to." + +#, fuzzy +msgid "ldap_local_role" +msgstr "Local Role" + +#, fuzzy +msgid "ldap_mapping_info_type" +msgstr "Show Information also in the Repository/Personal Desktop" + +#, fuzzy +msgid "ldap_mapping_table" +msgstr "Assignment of LDAP Attributes to ILIAS User Profile" + +#, fuzzy +msgid "ldap_mapping_template" +msgstr "Template for objectClass:" + +#, fuzzy +msgid "ldap_member_info" +msgstr "The attribute of the group object where the user dn may be found." + +#, fuzzy +msgid "ldap_memberisdn" +msgstr "Attribute Value is DN" + +#, fuzzy +msgid "ldap_missing_bind_user" +msgstr "You have chosen \"Bind as User\": Please enter a valid LDAP username and password." + +#, fuzzy +msgid "ldap_missing_role_assignment" +msgstr "Please choose a global role new users will be assigned to." + +#, fuzzy +msgid "ldap_moment_sync" +msgstr "Type of Sychronization" + +#, fuzzy +msgid "ldap_new_role_assignment" +msgstr "Add New Role -> Group Assignment" + +#, fuzzy +msgid "ldap_plugin" +msgstr "Assignment by Plugin" + +#, fuzzy +msgid "ldap_plugin_id" +msgstr "Plugin Id" + +#, fuzzy +msgid "ldap_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +#, fuzzy +msgid "ldap_referrals" +msgstr "Referrals" + +#, fuzzy +msgid "ldap_referrals_info" +msgstr "If set, determines whether the LDAP library automatically follows referrals returned by LDAP servers or not." + +#, fuzzy +msgid "ldap_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +#, fuzzy +msgid "ldap_role_active" +msgstr "Enable Group Synchronization" + +#, fuzzy +msgid "ldap_role_assignments" +msgstr "Role Assignment" + +#, fuzzy +msgid "ldap_role_at_info" +msgstr "The assignment is based on a specific attribute in the LDAP user profile." + +#, fuzzy +msgid "ldap_role_at_name" +msgstr "Attribute Name" + +#, fuzzy +msgid "ldap_role_at_value" +msgstr "Attribute Value" + +#, fuzzy +msgid "ldap_role_bind_pass" +msgstr "Password" + +#, fuzzy +msgid "ldap_role_bind_pass_info" +msgstr "Password" + +#, fuzzy +msgid "ldap_role_bind_user" +msgstr "Usern DN" + +#, fuzzy +msgid "ldap_role_bind_user_info" +msgstr "Please enter a distinguished name of a LDAP user account. This user needs write access for the LDAP groups." + +#, fuzzy +msgid "ldap_role_by_attribute" +msgstr "LDAP Attribute" + +#, fuzzy +msgid "ldap_role_by_group" +msgstr "Groupmembership" + +#, fuzzy +msgid "ldap_role_by_plugin" +msgstr "By Plugin" + +#, fuzzy +msgid "ldap_role_group_assignments" +msgstr "Existing Role -> Group Assignments" + +#, fuzzy +msgid "ldap_role_grp_at" +msgstr "Attribute" + +#, fuzzy +msgid "ldap_role_grp_dn_info" +msgstr "Please enter the \"Distinguished Name\" of the LDAP Group." + +#, fuzzy +msgid "ldap_role_grp_info" +msgstr "Members of a specific LDAP Group will be assigned to the given ILIAS role." + +#, fuzzy +msgid "ldap_role_grp_isdn" +msgstr "Attribute value is DN" + +#, fuzzy +msgid "ldap_role_info" +msgstr "Enter the name of an ILIAS Role that will control the membership to the LDAP group." + +#, fuzzy +msgid "ldap_role_mapping" +msgstr "LDAP-Group -> Role Mapping" + +#, fuzzy +msgid "ldap_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +#, fuzzy +msgid "ldap_role_not_exists" +msgstr "A role with that name does not exist" + +#, fuzzy +msgid "ldap_role_selection" +msgstr "Role Selection" + +#, fuzzy +msgid "ldap_role_selection_info" +msgstr "Your selection is ambiguous. Please choose one of the following roles." + +#, fuzzy +msgid "ldap_role_settings" +msgstr "LDAP Group Synchronization Settings" + +#, fuzzy +msgid "ldap_rule_condition" +msgstr "condition" + +#, fuzzy +msgid "ldap_rule_type" +msgstr "Type of Assignment" + +#, fuzzy +msgid "ldap_scope_one" +msgstr "One" + +#, fuzzy +msgid "ldap_scope_sub" +msgstr "Sub" + +#, fuzzy +msgid "ldap_search_base_info" +msgstr "Gets prepended to basedn when searching for users." + +#, fuzzy +msgid "ldap_search_filter" +msgstr "LDAP Filter" + +#, fuzzy +msgid "ldap_server_bind_dn" +msgstr "User DN" + +#, fuzzy +msgid "ldap_server_bind_pass" +msgstr "Password" + +#, fuzzy +msgid "ldap_server_binding" +msgstr "Binding" + +#, fuzzy +msgid "ldap_server_name" +msgstr "Name of LDAP Configuration" + +#, fuzzy +msgid "ldap_server_name_info" +msgstr "Please choose a name for this LDAP server configuration." + +#, fuzzy +msgid "ldap_server_security_settings" +msgstr "Security Settings" + +#, fuzzy +msgid "ldap_server_short" +msgstr "Server URL:" + +#, fuzzy +msgid "ldap_server_url_info" +msgstr "A fully qualified URL for specifying the protocol, url and port to connect to. E.g \"ldap://ldap.ilias.de:389\"" + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +#, fuzzy +msgid "ldap_server_version_info" +msgstr "LDAP version to use, ususally 3." + +#, fuzzy +msgid "ldap_servers" +msgstr "LDAP Server" + +#, fuzzy +msgid "ldap_settings" +msgstr "Server Settings" + +#, fuzzy +msgid "ldap_sync_cron" +msgstr "Per Cron-Job" + +#, fuzzy +msgid "ldap_sync_login" +msgstr "On Login" + +#, fuzzy +msgid "ldap_tbl_role_ass" +msgstr "Avtive Rules" + +#, fuzzy +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS can not be used in combination with LDAPv2. Please choose LDAP version \"3\" or disable TLS support." + +#, fuzzy +msgid "ldap_update_field_info" +msgstr "Update automatically" + +#, fuzzy +msgid "ldap_update_roles" +msgstr "Role Assignments" + +#, fuzzy +msgid "ldap_user_attribute" +msgstr "Attribute for Login Name" + +#, fuzzy +msgid "ldap_user_dn" +msgstr "User DN" + +#, fuzzy +msgid "ldap_user_mapping" +msgstr "User Profile Mapping" + +#, fuzzy +msgid "ldap_user_scope" +msgstr "Search Scope" + +#, fuzzy +msgid "ldap_user_scope_info" +msgstr "Scope for user searching. If unsure choose \"Sub\"." + +#, fuzzy +msgid "ldap_user_sync" +msgstr "User Synchronization Settings" + +#, fuzzy +msgid "ldap_user_sync_cron" +msgstr "LDAP User Synchronization " + +#, fuzzy +msgid "ldap_user_sync_cron_info" +msgstr "If activated, user accounts will be imported from the LDAP directory and synchronised continuously as an option." + +#, fuzzy +msgid "ldap_user_sync_info" +msgstr "Defines whether new users are automatically created on login or regularly per Cron-Job." + +#, fuzzy +msgid "ldap_username_filter" +msgstr "Username Filter" + +#, fuzzy +msgid "ldap_username_filter_info" +msgstr "Use * as wildcard." diff --git a/components/ILIAS/LDAP/lang/ldap_sv.po b/components/ILIAS/LDAP/lang/ldap_sv.po new file mode 100644 index 000000000000..2a56e664b6d2 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_sv.po @@ -0,0 +1,396 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ldap\n" + +msgid "add_ldap_server" +msgstr "Lägg till server" + +msgid "ldap_add_missing" +msgstr "Tilldela roller som saknas" + +msgid "ldap_add_role_ass_rule" +msgstr "Ny regel för ILIAS rolltilldelning" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +msgid "ldap_as_ds" +msgstr "Använd som datakälla" + +msgid "ldap_as_ds_info" +msgstr "I kombination med andra autentiseringstyper (t.ex. SAML) används LDAP-konfigurationen endast för att synkronisera uppgifterna i ILIAS-kontona. Direkt autentisering via LDAP är inte möjlig." + +msgid "ldap_assignment_type" +msgstr "Typ av uppdrag" + +msgid "ldap_authentication_settings" +msgstr "Inställningar för autentisering" + +msgid "ldap_bind_anonymous" +msgstr "Ankoppla anonymt" + +msgid "ldap_bind_user" +msgstr "Anslut som användare" + +msgid "ldap_btn_add_role_ass" +msgstr "Skapa ny regel" + +msgid "ldap_check_role_assignment" +msgstr "Rolltilldelning efter senare inloggningar" + +msgid "ldap_choose_role" +msgstr "Välj roll" + +msgid "ldap_confirm_del_role_ass" +msgstr "Ta bort rolltilldelning" + +msgid "ldap_deleted_role_mapping" +msgstr "Uppdraget har tagits bort" + +msgid "ldap_deleted_rule" +msgstr "Vald rolltilldelning borttagen" + +msgid "ldap_dn_info" +msgstr "Välj den fullständiga DN för LDAP-gruppen här." + +msgid "ldap_edit_role_ass_rule" +msgstr "Redigera regel för rolltilldelning" + +msgid "ldap_edit_role_assignment" +msgstr "Redigera uppdrag" + +msgid "ldap_err_missing_plugin_id" +msgstr "Var god ange ett giltigt plugin-id." + +msgid "ldap_escapedn" +msgstr "Mask DN" + +msgid "ldap_escapedn_info" +msgstr "Om aktiverat maskeras reserverade tecken i \"Distinguished Name (DN)\" för frågor om gruppmedlemskap." + +msgid "ldap_filter_info" +msgstr "Filter har lagts till i sökfiltret enligt följande" + +msgid "ldap_global_role" +msgstr "Global roll" + +msgid "ldap_global_role_assignment" +msgstr "Rolltilldelning" + +msgid "ldap_global_role_info" +msgstr "Välj en global roll för nya ILIAS-användare som ska skapas. *Rollen krävs när du har valt en synkroniseringstyp." + +msgid "ldap_group_attribute" +msgstr "Attributnamn för gruppen" + +msgid "ldap_group_attribute_info" +msgstr " Ange gruppens attributnamn här." + +msgid "ldap_group_dn" +msgstr "Grupper DN" + +msgid "ldap_group_dn_info" +msgstr "Sökbas för gruppsökningen. Föregår \"BaseDN\". T.EX." + +msgid "ldap_group_dn_short" +msgstr "Grupp DN" + +msgid "ldap_group_filter" +msgstr "LDAP-filter" + +msgid "ldap_group_filter_info" +msgstr "Filter har lagts till i sökfiltret enligt följande" + +msgid "ldap_group_member" +msgstr "Attributnamn för gruppmedlemmarna" + +msgid "ldap_group_member_info" +msgstr "Ange här attributnamnet som gruppmedlemmarna ska tilldelas. Välj 'Attributvärdet är DN' om medlemsnamnen skapas som DN." + +msgid "ldap_group_member_optional" +msgstr "Optionellt gruppmedlemskap" + +msgid "ldap_group_member_short" +msgstr "Attribut" + +msgid "ldap_group_membership" +msgstr "Gruppmedlemskap" + +msgid "ldap_group_name" +msgstr "Gruppens namn" + +msgid "ldap_group_name_info" +msgstr "Namn på gruppen" + +msgid "ldap_group_optional_info" +msgstr "Om det är aktiverat krävs inte gruppmedlemskap för att autentiseringen ska lyckas. Ange ett användarfilter för dessa gruppmedlemmar" + +msgid "ldap_group_restrictions" +msgstr "Grupprestriktioner" + +msgid "ldap_group_scope" +msgstr "Sökningsområde" + +msgid "ldap_group_scope_info" +msgstr "Area för gruppsökning. Om du är osäker, välj \"Sub\"." + +msgid "ldap_group_search_base" +msgstr "Sökbas" + +msgid "ldap_group_user_filter" +msgstr "Användarfilter" + +msgid "ldap_ilias_role" +msgstr "ILIAS rollnamn" + +msgid "ldap_info_text" +msgstr "Informationstext" + +msgid "ldap_info_text_info" +msgstr "Du kan ange en informationstext här som visas på informationssidan för det objekt som är kopplat till rollen. Eventuellt kan denna text också visas i magasinet och på instrumentpanelen." + +msgid "ldap_local_role" +msgstr "Lokal roll" + +msgid "ldap_mapping_info_type" +msgstr "Display i tidningen också." + +msgid "ldap_mapping_table" +msgstr "Tilldelning av datafält för ILIAS-konton till LDAP-attribut" + +msgid "ldap_mapping_template" +msgstr "Använd mall för objektklass" + +msgid "ldap_member_info" +msgstr "Ange här attributnamnet som gruppmedlemmarna ska tilldelas. Välj 'Attributvärdet är DN' om medlemsnamnen skapas som DN." + +msgid "ldap_memberisdn" +msgstr "Attributets värde är DN" + +msgid "ldap_missing_bind_user" +msgstr "Du har valt 'Anslut som användare' som anslutningstyp." + +msgid "ldap_missing_role_assignment" +msgstr "Välj en global roll som nyskapade användare ska tilldelas." + +msgid "ldap_moment_sync" +msgstr "Typ av synkronisering" + +msgid "ldap_new_role_assignment" +msgstr "Skapa nytt uppdrag" + +msgid "ldap_plugin" +msgstr "Uppgift via plugin" + +msgid "ldap_plugin_id" +msgstr "Plugin-Id" + +msgid "ldap_plugin_info" +msgstr "Kontrollera rolltilldelningen via plugin. Ange ett giltigt plugin-ID för detta ändamål." + +msgid "ldap_referrals" +msgstr "Framåt" + +msgid "ldap_referrals_info" +msgstr "Bestämmer om LDAP-serverns vidarebefordringar ska följas automatiskt eller inte." + +msgid "ldap_remove_deprecated" +msgstr "Ta bort obehöriga roller" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +msgid "ldap_role_active" +msgstr "Gruppuppdatering påslagen" + +msgid "ldap_role_assignments" +msgstr "Rolltilldelning" + +# Modifierad som en del av jämställdhetsintegreringen för ILIAS 8 +msgid "ldap_role_at_info" +msgstr "Tilldelningen baseras på ett specifikt attribut för LDAP-kontot." + +msgid "ldap_role_at_name" +msgstr "Attributets namn" + +msgid "ldap_role_at_value" +msgstr "Attributets värde" + +msgid "ldap_role_bind_pass" +msgstr " Lösenord" + +msgid "ldap_role_bind_pass_info" +msgstr "Lösenord för LDAP-användaren." + +msgid "ldap_role_bind_user" +msgstr "Login namn" + +msgid "ldap_role_bind_user_info" +msgstr "Ange ett LDAP-inloggningsnamn. Denna användare måste ha skrivbehörighet till de grupper som ska uppdateras." + +msgid "ldap_role_by_attribute" +msgstr "Användarattribut" + +msgid "ldap_role_by_group" +msgstr "Gruppmedlemskap" + +msgid "ldap_role_by_plugin" +msgstr "Per plugin" + +msgid "ldap_role_group_assignments" +msgstr "Befintliga uppdrag" + +msgid "ldap_role_grp_at" +msgstr "Attribut" + +msgid "ldap_role_grp_dn_info" +msgstr "Ange gruppens fullständiga \"Distinguished Name\"." + +msgid "ldap_role_grp_info" +msgstr "Medlemmar i en specifik LDAP-grupp tilldelas den angivna ILIAS-rollen." + +msgid "ldap_role_grp_isdn" +msgstr "Attributets värde är DN" + +msgid "ldap_role_info" +msgstr "Ange namnet på den ILIAS-roll som ska kontrollera LDAP-gruppmedlemskapet." + +msgid "ldap_role_mapping" +msgstr "Tilldelning av ILIAS-roller ? LDAP-grupper" + +msgid "ldap_role_name_info" +msgstr "Välj antingen en global roll eller ange namnet på en lokal roll." + +msgid "ldap_role_not_exists" +msgstr "En ILIAS-roll med följande namn existerar inte" + +msgid "ldap_role_selection" +msgstr "Urval av roller" + +msgid "ldap_role_selection_info" +msgstr "Ditt val är inte unikt. Vänligen välj en av rollerna nedan." + +msgid "ldap_role_settings" +msgstr "Inställningar för uppdatering av LDAP-grupper" + +msgid "ldap_rule_condition" +msgstr "Kondition" + +msgid "ldap_rule_type" +msgstr "Typ av uppdrag" + +msgid "ldap_scope_one" +msgstr "En" + +msgid "ldap_scope_sub" +msgstr "Sub" + +msgid "ldap_search_base_info" +msgstr "Sökbas för användarens sökning. Föregår \"BaseDN\". T.EX." + +msgid "ldap_search_filter" +msgstr "LDAP-filter" + +msgid "ldap_server_bind_dn" +msgstr "Användarens DN" + +msgid "ldap_server_bind_pass" +msgstr " Lösenord" + +msgid "ldap_server_binding" +msgstr "Typ av anslutning" + +msgid "ldap_server_name" +msgstr "Namn på LDAP-konfigurationen" + +msgid "ldap_server_name_info" +msgstr "Välj ett namn för denna serverkonfiguration!" + +msgid "ldap_server_security_settings" +msgstr "Säkerhetsinställningar" + +msgid "ldap_server_short" +msgstr "URL till server" + +msgid "ldap_server_url_info" +msgstr "Den fullständiga URL-adressen för anslutningen till LDAP-servern. T.ex. \"ldap" + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "Protokollversion för LDAP-servern (i de flesta fall \"LDAPv3\")." + +msgid "ldap_servers" +msgstr "LDAP-server" + +msgid "ldap_settings" +msgstr "Inställningar för server" + +msgid "ldap_sync_cron" +msgstr "Per Cron Jobb" + +msgid "ldap_sync_login" +msgstr "När användaren loggar in" + +msgid "ldap_tbl_role_ass" +msgstr "Regler för tilldelning av aktiv roll" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS kan inte användas i kombination med protokollversion 2." + +msgid "ldap_update_field_info" +msgstr "Automatisk uppdatering" + +msgid "ldap_update_roles" +msgstr "Rolltilldelning" + +msgid "ldap_user_attribute" +msgstr "Attributnamn för inloggningskonton" + +msgid "ldap_user_dn" +msgstr "Sökbas" + +msgid "ldap_user_mapping" +msgstr "Tilldelning av profiluppgifter" + +msgid "ldap_user_scope" +msgstr "Sökningsområde" + +msgid "ldap_user_scope_info" +msgstr "Area för användarens sökning. Om du är osäker, välj \"Sub\"." + +msgid "ldap_user_sync" +msgstr "Inställningar för användarsynkronisering" + +msgid "ldap_user_sync_cron" +msgstr "LDAP synkronisering av användare" + +msgid "ldap_user_sync_cron_info" +msgstr "Om aktiverat importeras inloggningskonton från LDAP-katalogen och synkroniseras kontinuerligt." + +msgid "ldap_user_sync_info" +msgstr "Bestämmer om användare som ännu inte finns i ILIAS skapas automatiskt vid den första inloggningen eller regelbundet via cron-jobb." + +msgid "ldap_username_filter" +msgstr "Filter för inloggningsnamn" + +msgid "ldap_username_filter_info" +msgstr "Använd * som jokertecken." diff --git a/components/ILIAS/LDAP/lang/ldap_tr.po b/components/ILIAS/LDAP/lang/ldap_tr.po new file mode 100644 index 000000000000..954cc088af6a --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_tr.po @@ -0,0 +1,405 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ldap\n" + +#, fuzzy +msgid "add_ldap_server" +msgstr "Add Server" + +msgid "ldap_add_missing" +msgstr "Ata Eksik Rolleri" + +msgid "ldap_add_role_ass_rule" +msgstr "Rol Atamaları için Yeni Kural" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +msgid "ldap_as_ds" +msgstr "Veri kaynağı olarak Kullanım" + +msgid "ldap_as_ds_info" +msgstr "aktif ise, bu LDAP yapılandırmasını diğer kimlik doğrulama yöntemleri ile birlikte kullanıcı hesaplarının senkronizasyonu için kullanılır." + +msgid "ldap_assignment_type" +msgstr "Atama Türü" + +msgid "ldap_authentication_settings" +msgstr "Kimlik Doğrulama Ayarları" + +msgid "ldap_bind_anonymous" +msgstr "Bind Anonim" + +msgid "ldap_bind_user" +msgstr "Kullanıcı olarak Bind:" + +msgid "ldap_btn_add_role_ass" +msgstr "Yeni Kural" + +msgid "ldap_check_role_assignment" +msgstr "Daha sonra oturumları sonra Rollerin Atama" + +#, fuzzy +msgid "ldap_choose_role" +msgstr "Choose Role" + +msgid "ldap_confirm_del_role_ass" +msgstr "Sil Rol Atama" + +msgid "ldap_deleted_role_mapping" +msgstr "atama Silindi." + +msgid "ldap_deleted_rule" +msgstr "Seçilen rol atamalarını Silindi." + +msgid "ldap_dn_info" +msgstr "LDAP grubunun ayırt edici adını girin." + +msgid "ldap_edit_role_ass_rule" +msgstr "Edit Rol Atama Kuralı" + +#, fuzzy +msgid "ldap_edit_role_assignment" +msgstr "Edit Role -> Group Assignment" + +msgid "ldap_err_missing_plugin_id" +msgstr "geçerli bir eklenti kimliği girin." + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +msgid "ldap_filter_info" +msgstr "Arama eklenecektir Filtre bu şekilde filtre: (& (userattr = kullanıcıadı) (UserFilter) )." + +msgid "ldap_global_role" +msgstr "Global Rol" + +msgid "ldap_global_role_assignment" +msgstr "ILIAS-Rol Atama" + +msgid "ldap_global_role_info" +msgstr "yeni kullanıcılara atanacak bir ILIAS Rolü seçiniz. * rolü seçimi gerekli durumda senkronizasyon türünü seçtik." + +msgid "ldap_group_attribute" +msgstr "Grup Özellik" + +msgid "ldap_group_attribute_info" +msgstr "grubunu aramak için bağlıyor." + +msgid "ldap_group_dn" +msgstr "Grup DN" + +msgid "ldap_group_dn_info" +msgstr "Gruplar ararken \"TemelDN\" önceleyerek izle." + +msgid "ldap_group_dn_short" +msgstr "Grup DN:" + +msgid "ldap_group_filter" +msgstr "LDAP Filtre" + +msgid "ldap_group_filter_info" +msgstr "Bir grup ararken Arama filtresini eklenecektir Filtre: (& (groupattr = grup) (memberattr = kullanıcıadı) (groupfilter) )." + +msgid "ldap_group_member" +msgstr "Grubu Üyesi Özellik" + +msgid "ldap_group_member_info" +msgstr "Kullanıcı dn bulunabilir grubu nesnesinin özniteliği. Üye özniteliği kullanıcıların ayırt edici adı ise \"Özellik Değeri DN'sidir\" seçin." + +msgid "ldap_group_member_optional" +msgstr "Grup Üyeliği İsteğe bağlı olduğunu" + +msgid "ldap_group_member_short" +msgstr "Özellik:" + +msgid "ldap_group_membership" +msgstr "Grup Üyeliği" + +msgid "ldap_group_name" +msgstr "Grup Adı" + +msgid "ldap_group_name_info" +msgstr "Grup kullanıcılarının adını başarıyla kimlik doğrulaması için bir üyesi olmak zorunda." + +msgid "ldap_group_optional_info" +msgstr "Etkinse , grup üyeliği başarılı bir doğrulama için gerekli değildir. Bu grupların üyeleri için bir kullanıcı filtre giriniz:
(& (userattr = kullanıcıadı) (UserFilter) )" + +msgid "ldap_group_restrictions" +msgstr "Grup Üyeliği Kısıtlamalar" + +msgid "ldap_group_scope" +msgstr "Arama Kapsamı" + +msgid "ldap_group_scope_info" +msgstr "Grup arama için Kapsam. Emin \"Alt\" seçerseniz" + +msgid "ldap_group_search_base" +msgstr "Grup Arama Tabanı" + +msgid "ldap_group_user_filter" +msgstr "Kullanıcı Filtresi" + +msgid "ldap_ilias_role" +msgstr "ILIAS Rol Adı" + +msgid "ldap_info_text" +msgstr "Bilgi Metni" + +msgid "ldap_info_text_info" +msgstr "Girdiyseniz , bu metin bu role atanan nesne için bilgi ekranı üzerinde gösterilecek. İsteğe bağlı olarak bu metin Havuzu'ndaki ve Kişisel Masaüstü mevcuttur." + +msgid "ldap_local_role" +msgstr "Yerel Rolü" + +msgid "ldap_mapping_info_type" +msgstr "Depo / Kişisel Masaüstü de Bilgi Göster" + +msgid "ldap_mapping_table" +msgstr "ILIAS Kullanıcı Profili LDAP öznitelikleri Atama" + +msgid "ldap_mapping_template" +msgstr "ObjectClass için Şablon:" + +msgid "ldap_member_info" +msgstr "Kullanıcı dn bulunabilir grubu nesnesinin özniteliği." + +msgid "ldap_memberisdn" +msgstr "Özellik Değeri DN'sidir" + +msgid "ldap_missing_bind_user" +msgstr "Siz \"Kullanıcı olarak Bind\" seçmiş : Geçerli bir LDAP kullanıcı adınızı ve şifrenizi giriniz." + +msgid "ldap_missing_role_assignment" +msgstr "yeni kullanıcılara atanacak küresel bir rol seçin." + +msgid "ldap_moment_sync" +msgstr "Senkronizasyon ve tipi" + +msgid "ldap_new_role_assignment" +msgstr "Add New Role -> Grubu Atama" + +msgid "ldap_plugin" +msgstr "Plugin Atama" + +msgid "ldap_plugin_id" +msgstr "Plugin Kimliği" + +msgid "ldap_plugin_info" +msgstr "bir eklenti ile rol atama doğrulayın. Geçerli bir eklenti kimliği girin." + +msgid "ldap_referrals" +msgstr "Tavsiye" + +msgid "ldap_referrals_info" +msgstr "seti, LDAP kitaplığı otomatik LDAP sunucuları ya da değil tarafından döndürülen tavsiyeleri şöyle belirler. Etkin bir dizin sunucusu kullanıyorsanız, bu devre dışı bırakılmalıdır." + +msgid "ldap_remove_deprecated" +msgstr "Önerilmeyen Roller Deassign" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +msgid "ldap_role_active" +msgstr "etkinleştir Grup Senkronizasyon" + +msgid "ldap_role_assignments" +msgstr "Rol Atama" + +msgid "ldap_role_at_info" +msgstr "atama LDAP kullanıcı profiline belli bir özellik esas alınmaktadır." + +msgid "ldap_role_at_name" +msgstr "Özellik Adı" + +msgid "ldap_role_at_value" +msgstr "Özellik Değeri" + +msgid "ldap_role_bind_pass" +msgstr "Parola" + +msgid "ldap_role_bind_pass_info" +msgstr "Parola" + +msgid "ldap_role_bind_user" +msgstr "Usern DN" + +msgid "ldap_role_bind_user_info" +msgstr "Bir LDAP kullanıcı hesabının ayırt edici bir ad girin. Bu kullanıcı LDAP grupları için yazma erişimi gerektirir." + +msgid "ldap_role_by_attribute" +msgstr "LDAP Özniteliği" + +msgid "ldap_role_by_group" +msgstr "Groupmembership" + +msgid "ldap_role_by_plugin" +msgstr "Plugin tarafından" + +msgid "ldap_role_group_assignments" +msgstr "Mevcut Rolü -> Grubu Atamaları" + +msgid "ldap_role_grp_at" +msgstr "Özellik" + +msgid "ldap_role_grp_dn_info" +msgstr "LDAP Grubu \"Ayırt Edici Ad\" girin." + +msgid "ldap_role_grp_info" +msgstr "Belirli bir LDAP Grubu Üyeleri verilen ILIAS rolü atanır." + +msgid "ldap_role_grp_isdn" +msgstr "Özellik değeri DN'sidir" + +msgid "ldap_role_info" +msgstr "LDAP grup üyeliği kontrol edecek bir ILIAS Rolü adını girin." + +msgid "ldap_role_mapping" +msgstr "ILIAS Rolü -> LDAP Grup Haritalama" + +msgid "ldap_role_name_info" +msgstr "ya da küresel bir rol seçebilir veya yerel rol adını giriniz." + +msgid "ldap_role_not_exists" +msgstr "Bu isimde bir rol yok" + +msgid "ldap_role_selection" +msgstr "Rol Seçimi" + +msgid "ldap_role_selection_info" +msgstr "Seçiminiz belirsiz. Aşağıdaki rollerden birini seçiniz." + +msgid "ldap_role_settings" +msgstr "LDAP Grup Senkronizasyon Ayarları" + +msgid "ldap_rule_condition" +msgstr "Durumu" + +msgid "ldap_rule_type" +msgstr "Temlik Türü" + +msgid "ldap_scope_one" +msgstr "adet" + +msgid "ldap_scope_sub" +msgstr "Sub" + +msgid "ldap_search_base_info" +msgstr "Kullanıcıları ararken temelDN önceleyerek izle." + +msgid "ldap_search_filter" +msgstr "LDAP Filtre" + +msgid "ldap_server_bind_dn" +msgstr "Kullanıcı DN" + +msgid "ldap_server_bind_pass" +msgstr "Parola" + +msgid "ldap_server_binding" +msgstr "Ciltleme" + +msgid "ldap_server_name" +msgstr "LDAP Yapılandırma Adı" + +msgid "ldap_server_name_info" +msgstr "Bu LDAP sunucu yapılandırması için bir ad seçiniz." + +msgid "ldap_server_security_settings" +msgstr "Güvenlik Ayarları" + +msgid "ldap_server_short" +msgstr "Sunucu URL'si:" + +msgid "ldap_server_url_info" +msgstr "protokolü, url ve bağlamak için bağlantı noktası belirlemek için bir tam URL. Örneğin \"ldap :/ / ldap.ilias.de: 389\". Sen virgüllerle ayrılmış birden fazla sunucu ekleyebilirsiniz." + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "LDAP sürüm ususally 3, kullanmak için." + +#, fuzzy +msgid "ldap_servers" +msgstr "LDAP Server" + +msgid "ldap_settings" +msgstr "Sunucu Ayarları" + +msgid "ldap_sync_cron" +msgstr "Cron-İş Başına" + +msgid "ldap_sync_login" +msgstr "Giriş üzerinde" + +msgid "ldap_tbl_role_ass" +msgstr "Aktif Kurallar" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS LDAPv2 ile kombinasyon halinde kullanılabilir değildir. LDAP sürüm \"3\" seçin veya TLS desteği devre dışı bırakın." + +msgid "ldap_update_field_info" +msgstr "Otomatik Güncelleştirmesi" + +msgid "ldap_update_roles" +msgstr "Rol Atamaları" + +msgid "ldap_user_attribute" +msgstr "Giriş Adı Özellik" + +msgid "ldap_user_dn" +msgstr "Kullanıcı Arama Tabanı" + +msgid "ldap_user_mapping" +msgstr "Kullanıcı Profili Eşleme" + +msgid "ldap_user_scope" +msgstr "Arama Kapsamı" + +msgid "ldap_user_scope_info" +msgstr "Kullanıcı arama için Kapsam. Eğer emin değilseniz \"Alt\" seçin." + +msgid "ldap_user_sync" +msgstr "Kullanıcı Senkronizasyon Ayarları" + +#, fuzzy +msgid "ldap_user_sync_cron" +msgstr "LDAP User Synchronization " + +#, fuzzy +msgid "ldap_user_sync_cron_info" +msgstr "If activated, user accounts will be imported from the LDAP directory and synchronised continuously as an option." + +msgid "ldap_user_sync_info" +msgstr "yeni kullanıcılar otomatik oturum açma veya düzenli Cron-İş başına yaratılan olup olmadığını tanımlar." + +#, fuzzy +msgid "ldap_username_filter" +msgstr "Username Filter" + +#, fuzzy +msgid "ldap_username_filter_info" +msgstr "Use * as wildcard." diff --git a/components/ILIAS/LDAP/lang/ldap_uk.po b/components/ILIAS/LDAP/lang/ldap_uk.po new file mode 100644 index 000000000000..e7061c07cfb8 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_uk.po @@ -0,0 +1,517 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: ldap\n" + +#, fuzzy +msgid "add_ldap_server" +msgstr "Add Server" + +#, fuzzy +msgid "ldap_add_missing" +msgstr "Assign Missing Roles" + +#, fuzzy +msgid "ldap_add_role_ass_rule" +msgstr "New Rule for Role Assignments" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +#, fuzzy +msgid "ldap_as_ds" +msgstr "Use as Data Source" + +#, fuzzy +msgid "ldap_as_ds_info" +msgstr "If activated, this LDAP configuration is used only for the synchronization of user accounts in combination with other authentication methods." + +#, fuzzy +msgid "ldap_assignment_type" +msgstr "Assignment Type" + +#, fuzzy +msgid "ldap_authentication_settings" +msgstr "Authentication Settings" + +#, fuzzy +msgid "ldap_bind_anonymous" +msgstr "Bind Anonymously" + +#, fuzzy +msgid "ldap_bind_user" +msgstr "Bind as User:" + +#, fuzzy +msgid "ldap_btn_add_role_ass" +msgstr "Add New Rule" + +#, fuzzy +msgid "ldap_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +#, fuzzy +msgid "ldap_choose_role" +msgstr "Choose Role" + +#, fuzzy +msgid "ldap_confirm_del_role_ass" +msgstr "Delete Role Assignmen" + +#, fuzzy +msgid "ldap_deleted_role_mapping" +msgstr "Deleted assignment." + +#, fuzzy +msgid "ldap_deleted_rule" +msgstr "Deleted selected role assignments." + +#, fuzzy +msgid "ldap_dn_info" +msgstr "Enter the distinguished name of the LDAP group." + +#, fuzzy +msgid "ldap_edit_role_ass_rule" +msgstr "Edit Role Assignment Rule" + +#, fuzzy +msgid "ldap_edit_role_assignment" +msgstr "Edit Role -> Group Assignment" + +#, fuzzy +msgid "ldap_err_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +#, fuzzy +msgid "ldap_filter_info" +msgstr "Filter that will be added to the search filter this way: (&(userattr=username)(userfilter))." + +#, fuzzy +msgid "ldap_global_role" +msgstr "Global Role" + +#, fuzzy +msgid "ldap_global_role_assignment" +msgstr "ILIAS-Role Assignment" + +#, fuzzy +msgid "ldap_global_role_info" +msgstr "Please choose an ILIAS Role new users will be assigned to." + +#, fuzzy +msgid "ldap_group_attribute" +msgstr "Attribute for Group" + +#, fuzzy +msgid "ldap_group_attribute_info" +msgstr "The group attribute to search for." + +#, fuzzy +msgid "ldap_group_dn" +msgstr "Group Search Base" + +#, fuzzy +msgid "ldap_group_dn_info" +msgstr "Gets prepended to \"BaseDN\" when searching for groups." + +#, fuzzy +msgid "ldap_group_dn_short" +msgstr "Group DN:" + +#, fuzzy +msgid "ldap_group_filter" +msgstr "LDAP Filter" + +#, fuzzy +msgid "ldap_group_filter_info" +msgstr "Filter that will be added to the search filter when searching for a group: (&(groupattr=group)(memberattr=username)(groupfilter))." + +#, fuzzy +msgid "ldap_group_member" +msgstr "Group Member Attribute" + +#, fuzzy +msgid "ldap_group_member_info" +msgstr "The attribute of the group object where the user dn may be found. Choose \"Attribute Value is DN\" if the member attribute is the distinguished name of the users." + +#, fuzzy +msgid "ldap_group_member_optional" +msgstr "Group Membership is Optional" + +#, fuzzy +msgid "ldap_group_member_short" +msgstr "Attribute:" + +#, fuzzy +msgid "ldap_group_membership" +msgstr "Group Membership" + +#, fuzzy +msgid "ldap_group_name" +msgstr "Group Name" + +#, fuzzy +msgid "ldap_group_name_info" +msgstr "The name of the group users have to be a member of to authenticate successfully." + +#, fuzzy +msgid "ldap_group_optional_info" +msgstr "If enabled, the group membership is not required for a successful authentication. Please enter a user filter for the members of these groups:
(&(userattr=username)(userfilter))" + +#, fuzzy +msgid "ldap_group_restrictions" +msgstr "Group Restrictions" + +#, fuzzy +msgid "ldap_group_scope" +msgstr "Search Scope" + +#, fuzzy +msgid "ldap_group_scope_info" +msgstr "Scope for group searching. If unsure choose \"Sub\"" + +#, fuzzy +msgid "ldap_group_search_base" +msgstr "Group Search Base" + +#, fuzzy +msgid "ldap_group_user_filter" +msgstr "User Filter" + +#, fuzzy +msgid "ldap_ilias_role" +msgstr "ILIAS Role" + +#, fuzzy +msgid "ldap_info_text" +msgstr "Information Text" + +#, fuzzy +msgid "ldap_info_text_info" +msgstr "If entered, this text will be shown in the repository and on the info screen for the object this role is assigned to." + +#, fuzzy +msgid "ldap_local_role" +msgstr "Local Role" + +#, fuzzy +msgid "ldap_mapping_info_type" +msgstr "Show Information also in the Repository/Personal Desktop" + +#, fuzzy +msgid "ldap_mapping_table" +msgstr "Assignment of LDAP Attributes to ILIAS User Profile" + +#, fuzzy +msgid "ldap_mapping_template" +msgstr "Template for objectClass:" + +#, fuzzy +msgid "ldap_member_info" +msgstr "The attribute of the group object where the user dn may be found." + +#, fuzzy +msgid "ldap_memberisdn" +msgstr "Attribute Value is DN" + +#, fuzzy +msgid "ldap_missing_bind_user" +msgstr "You have chosen \"Bind as User\": Please enter a valid LDAP username and password." + +#, fuzzy +msgid "ldap_missing_role_assignment" +msgstr "Please choose a global role new users will be assigned to." + +#, fuzzy +msgid "ldap_moment_sync" +msgstr "Type of Sychronization" + +#, fuzzy +msgid "ldap_new_role_assignment" +msgstr "Add New Role -> Group Assignment" + +#, fuzzy +msgid "ldap_plugin" +msgstr "Assignment by Plugin" + +#, fuzzy +msgid "ldap_plugin_id" +msgstr "Plugin Id" + +#, fuzzy +msgid "ldap_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +#, fuzzy +msgid "ldap_referrals" +msgstr "Referrals" + +#, fuzzy +msgid "ldap_referrals_info" +msgstr "If set, determines whether the LDAP library automatically follows referrals returned by LDAP servers or not. This should be disabled if you are using an active directory server." + +#, fuzzy +msgid "ldap_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +#, fuzzy +msgid "ldap_role_active" +msgstr "Enable Group Synchronization" + +#, fuzzy +msgid "ldap_role_assignments" +msgstr "Role Assignment" + +#, fuzzy +msgid "ldap_role_at_info" +msgstr "The assignment is based on a specific attribute in the LDAP user profile." + +#, fuzzy +msgid "ldap_role_at_name" +msgstr "Attribute Name" + +#, fuzzy +msgid "ldap_role_at_value" +msgstr "Attribute Value" + +#, fuzzy +msgid "ldap_role_bind_pass" +msgstr "Password" + +#, fuzzy +msgid "ldap_role_bind_pass_info" +msgstr "Password" + +#, fuzzy +msgid "ldap_role_bind_user" +msgstr "Usern DN" + +#, fuzzy +msgid "ldap_role_bind_user_info" +msgstr "Please enter a distinguished name of a LDAP user account. This user needs write access for the LDAP groups." + +#, fuzzy +msgid "ldap_role_by_attribute" +msgstr "LDAP Attribute" + +#, fuzzy +msgid "ldap_role_by_group" +msgstr "Groupmembership" + +#, fuzzy +msgid "ldap_role_by_plugin" +msgstr "By Plugin" + +#, fuzzy +msgid "ldap_role_group_assignments" +msgstr "Existing Role -> Group Assignments" + +#, fuzzy +msgid "ldap_role_grp_at" +msgstr "Attribute" + +#, fuzzy +msgid "ldap_role_grp_dn_info" +msgstr "Please enter the \"Distinguished Name\" of the LDAP Group." + +#, fuzzy +msgid "ldap_role_grp_info" +msgstr "Members of a specific LDAP Group will be assigned to the given ILIAS role." + +#, fuzzy +msgid "ldap_role_grp_isdn" +msgstr "Attribute value is DN" + +#, fuzzy +msgid "ldap_role_info" +msgstr "Enter the name of an ILIAS Role that will control the membership to the LDAP group." + +#, fuzzy +msgid "ldap_role_mapping" +msgstr "LDAP-Group -> Role Mapping" + +#, fuzzy +msgid "ldap_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +#, fuzzy +msgid "ldap_role_not_exists" +msgstr "A role with that name does not exist" + +#, fuzzy +msgid "ldap_role_selection" +msgstr "Role Selection" + +#, fuzzy +msgid "ldap_role_selection_info" +msgstr "Your selection is ambiguous. Please choose one of the following roles." + +#, fuzzy +msgid "ldap_role_settings" +msgstr "LDAP Group Synchronization Settings" + +#, fuzzy +msgid "ldap_rule_condition" +msgstr "condition" + +#, fuzzy +msgid "ldap_rule_type" +msgstr "Type of Assignment" + +#, fuzzy +msgid "ldap_scope_one" +msgstr "One" + +#, fuzzy +msgid "ldap_scope_sub" +msgstr "Sub" + +#, fuzzy +msgid "ldap_search_base_info" +msgstr "Gets prepended to basedn when searching for users." + +#, fuzzy +msgid "ldap_search_filter" +msgstr "LDAP Filter" + +#, fuzzy +msgid "ldap_server_bind_dn" +msgstr "User Search Base" + +#, fuzzy +msgid "ldap_server_bind_pass" +msgstr "Password" + +#, fuzzy +msgid "ldap_server_binding" +msgstr "Binding" + +#, fuzzy +msgid "ldap_server_name" +msgstr "Name of LDAP Configuration" + +#, fuzzy +msgid "ldap_server_name_info" +msgstr "Please choose a name for this LDAP server configuration." + +#, fuzzy +msgid "ldap_server_security_settings" +msgstr "Security Settings" + +#, fuzzy +msgid "ldap_server_short" +msgstr "Server URL:" + +#, fuzzy +msgid "ldap_server_url_info" +msgstr "A fully qualified URL for specifying the protocol, url and port to connect to. E.g \"ldap://ldap.ilias.de:389\"" + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +#, fuzzy +msgid "ldap_server_version_info" +msgstr "LDAP version to use, ususally 3." + +#, fuzzy +msgid "ldap_servers" +msgstr "LDAP Server" + +#, fuzzy +msgid "ldap_settings" +msgstr "Server Settings" + +#, fuzzy +msgid "ldap_sync_cron" +msgstr "Per Cron-Job" + +#, fuzzy +msgid "ldap_sync_login" +msgstr "On Login" + +#, fuzzy +msgid "ldap_tbl_role_ass" +msgstr "Avtive Rules" + +#, fuzzy +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS can not be used in combination with LDAPv2. Please choose LDAP version \"3\" or disable TLS support." + +#, fuzzy +msgid "ldap_update_field_info" +msgstr "Update automatically" + +#, fuzzy +msgid "ldap_update_roles" +msgstr "Role Assignments" + +#, fuzzy +msgid "ldap_user_attribute" +msgstr "Attribute for Login Name" + +#, fuzzy +msgid "ldap_user_dn" +msgstr "User Search Base" + +#, fuzzy +msgid "ldap_user_mapping" +msgstr "User Profile Mapping" + +#, fuzzy +msgid "ldap_user_scope" +msgstr "Search Scope" + +#, fuzzy +msgid "ldap_user_scope_info" +msgstr "Scope for user searching. If unsure choose \"Sub\"." + +#, fuzzy +msgid "ldap_user_sync" +msgstr "User Synchronization Settings" + +#, fuzzy +msgid "ldap_user_sync_cron" +msgstr "LDAP User Synchronization " + +#, fuzzy +msgid "ldap_user_sync_cron_info" +msgstr "If activated, user accounts will be imported from the LDAP directory and synchronised continuously as an option." + +#, fuzzy +msgid "ldap_user_sync_info" +msgstr "Defines whether new users are automatically created on login or regularly per Cron-Job." + +#, fuzzy +msgid "ldap_username_filter" +msgstr "Username Filter" + +#, fuzzy +msgid "ldap_username_filter_info" +msgstr "Use * as wildcard." diff --git a/components/ILIAS/LDAP/lang/ldap_vi.po b/components/ILIAS/LDAP/lang/ldap_vi.po new file mode 100644 index 000000000000..2cd7a514685a --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_vi.po @@ -0,0 +1,517 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: ldap\n" + +#, fuzzy +msgid "add_ldap_server" +msgstr "Add Server" + +#, fuzzy +msgid "ldap_add_missing" +msgstr "Assign Missing Roles" + +#, fuzzy +msgid "ldap_add_role_ass_rule" +msgstr "New Rule for Role Assignments" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +#, fuzzy +msgid "ldap_as_ds" +msgstr "Use as Data Source" + +#, fuzzy +msgid "ldap_as_ds_info" +msgstr "If activated, this LDAP configuration is used only for the synchronization of user accounts in combination with other authentication methods." + +#, fuzzy +msgid "ldap_assignment_type" +msgstr "Assignment Type" + +#, fuzzy +msgid "ldap_authentication_settings" +msgstr "Authentication Settings" + +#, fuzzy +msgid "ldap_bind_anonymous" +msgstr "Bind Anonymously" + +#, fuzzy +msgid "ldap_bind_user" +msgstr "Bind as User:" + +#, fuzzy +msgid "ldap_btn_add_role_ass" +msgstr "Add New Rule" + +#, fuzzy +msgid "ldap_check_role_assignment" +msgstr "Assignment of Roles After Later Logins" + +#, fuzzy +msgid "ldap_choose_role" +msgstr "Choose Role" + +#, fuzzy +msgid "ldap_confirm_del_role_ass" +msgstr "Delete Role Assignmen" + +#, fuzzy +msgid "ldap_deleted_role_mapping" +msgstr "Deleted assignment." + +#, fuzzy +msgid "ldap_deleted_rule" +msgstr "Deleted selected role assignments." + +#, fuzzy +msgid "ldap_dn_info" +msgstr "Enter the distinguished name of the LDAP group." + +#, fuzzy +msgid "ldap_edit_role_ass_rule" +msgstr "Edit Role Assignment Rule" + +#, fuzzy +msgid "ldap_edit_role_assignment" +msgstr "Edit Role -> Group Assignment" + +#, fuzzy +msgid "ldap_err_missing_plugin_id" +msgstr "Please enter a valid plugin id." + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +#, fuzzy +msgid "ldap_filter_info" +msgstr "Filter that will be added to the search filter this way: (&(userattr=username)(userfilter))." + +#, fuzzy +msgid "ldap_global_role" +msgstr "Global Role" + +#, fuzzy +msgid "ldap_global_role_assignment" +msgstr "ILIAS-Role Assignment" + +#, fuzzy +msgid "ldap_global_role_info" +msgstr "Please choose an ILIAS Role new users will be assigned to." + +#, fuzzy +msgid "ldap_group_attribute" +msgstr "Attribute for Group" + +#, fuzzy +msgid "ldap_group_attribute_info" +msgstr "The group attribute to search for." + +#, fuzzy +msgid "ldap_group_dn" +msgstr "Group Search Base" + +#, fuzzy +msgid "ldap_group_dn_info" +msgstr "Gets prepended to \"BaseDN\" when searching for groups." + +#, fuzzy +msgid "ldap_group_dn_short" +msgstr "Group DN:" + +#, fuzzy +msgid "ldap_group_filter" +msgstr "LDAP Filter" + +#, fuzzy +msgid "ldap_group_filter_info" +msgstr "Filter that will be added to the search filter when searching for a group: (&(groupattr=group)(memberattr=username)(groupfilter))." + +#, fuzzy +msgid "ldap_group_member" +msgstr "Group Member Attribute" + +#, fuzzy +msgid "ldap_group_member_info" +msgstr "The attribute of the group object where the user dn may be found. Choose \"Attribute Value is DN\" if the member attribute is the distinguished name of the users." + +#, fuzzy +msgid "ldap_group_member_optional" +msgstr "Group Membership is Optional" + +#, fuzzy +msgid "ldap_group_member_short" +msgstr "Attribute:" + +#, fuzzy +msgid "ldap_group_membership" +msgstr "Group Membership" + +#, fuzzy +msgid "ldap_group_name" +msgstr "Group Name" + +#, fuzzy +msgid "ldap_group_name_info" +msgstr "The name of the group users have to be a member of to authenticate successfully." + +#, fuzzy +msgid "ldap_group_optional_info" +msgstr "If enabled, the group membership is not required for a successful authentication. Please enter a user filter for the members of these groups:
(&(userattr=username)(userfilter))" + +#, fuzzy +msgid "ldap_group_restrictions" +msgstr "Group Restrictions" + +#, fuzzy +msgid "ldap_group_scope" +msgstr "Search Scope" + +#, fuzzy +msgid "ldap_group_scope_info" +msgstr "Scope for group searching. If unsure choose \"Sub\"" + +#, fuzzy +msgid "ldap_group_search_base" +msgstr "Group Search Base" + +#, fuzzy +msgid "ldap_group_user_filter" +msgstr "User Filter" + +#, fuzzy +msgid "ldap_ilias_role" +msgstr "ILIAS Role" + +#, fuzzy +msgid "ldap_info_text" +msgstr "Information Text" + +#, fuzzy +msgid "ldap_info_text_info" +msgstr "If entered, this text will be shown in the repository and on the info screen for the object this role is assigned to." + +#, fuzzy +msgid "ldap_local_role" +msgstr "Local Role" + +#, fuzzy +msgid "ldap_mapping_info_type" +msgstr "Show Information also in the Repository/Personal Desktop" + +#, fuzzy +msgid "ldap_mapping_table" +msgstr "Assignment of LDAP Attributes to ILIAS User Profile" + +#, fuzzy +msgid "ldap_mapping_template" +msgstr "Template for objectClass:" + +#, fuzzy +msgid "ldap_member_info" +msgstr "The attribute of the group object where the user dn may be found." + +#, fuzzy +msgid "ldap_memberisdn" +msgstr "Attribute Value is DN" + +#, fuzzy +msgid "ldap_missing_bind_user" +msgstr "You have chosen \"Bind as User\": Please enter a valid LDAP username and password." + +#, fuzzy +msgid "ldap_missing_role_assignment" +msgstr "Please choose a global role new users will be assigned to." + +#, fuzzy +msgid "ldap_moment_sync" +msgstr "Type of Sychronization" + +#, fuzzy +msgid "ldap_new_role_assignment" +msgstr "Add New Role -> Group Assignment" + +#, fuzzy +msgid "ldap_plugin" +msgstr "Assignment by Plugin" + +#, fuzzy +msgid "ldap_plugin_id" +msgstr "Plugin Id" + +#, fuzzy +msgid "ldap_plugin_info" +msgstr "Validate the role assignment with a plugin. Please enter a valid plugin id." + +#, fuzzy +msgid "ldap_referrals" +msgstr "Referrals" + +#, fuzzy +msgid "ldap_referrals_info" +msgstr "If set, determines whether the LDAP library automatically follows referrals returned by LDAP servers or not. This should be disabled if you are using an active directory server." + +#, fuzzy +msgid "ldap_remove_deprecated" +msgstr "Deassign Deprecated Roles" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +#, fuzzy +msgid "ldap_role_active" +msgstr "Enable Group Synchronization" + +#, fuzzy +msgid "ldap_role_assignments" +msgstr "Role Assignment" + +#, fuzzy +msgid "ldap_role_at_info" +msgstr "The assignment is based on a specific attribute in the LDAP user profile." + +#, fuzzy +msgid "ldap_role_at_name" +msgstr "Attribute Name" + +#, fuzzy +msgid "ldap_role_at_value" +msgstr "Attribute Value" + +#, fuzzy +msgid "ldap_role_bind_pass" +msgstr "Password" + +#, fuzzy +msgid "ldap_role_bind_pass_info" +msgstr "Password" + +#, fuzzy +msgid "ldap_role_bind_user" +msgstr "Usern DN" + +#, fuzzy +msgid "ldap_role_bind_user_info" +msgstr "Please enter a distinguished name of a LDAP user account. This user needs write access for the LDAP groups." + +#, fuzzy +msgid "ldap_role_by_attribute" +msgstr "LDAP Attribute" + +#, fuzzy +msgid "ldap_role_by_group" +msgstr "Groupmembership" + +#, fuzzy +msgid "ldap_role_by_plugin" +msgstr "By Plugin" + +#, fuzzy +msgid "ldap_role_group_assignments" +msgstr "Existing Role -> Group Assignments" + +#, fuzzy +msgid "ldap_role_grp_at" +msgstr "Attribute" + +#, fuzzy +msgid "ldap_role_grp_dn_info" +msgstr "Please enter the \"Distinguished Name\" of the LDAP Group." + +#, fuzzy +msgid "ldap_role_grp_info" +msgstr "Members of a specific LDAP Group will be assigned to the given ILIAS role." + +#, fuzzy +msgid "ldap_role_grp_isdn" +msgstr "Attribute value is DN" + +#, fuzzy +msgid "ldap_role_info" +msgstr "Enter the name of an ILIAS Role that will control the membership to the LDAP group." + +#, fuzzy +msgid "ldap_role_mapping" +msgstr "LDAP-Group -> Role Mapping" + +#, fuzzy +msgid "ldap_role_name_info" +msgstr "Please choose either a global role or enter the name of a local role." + +#, fuzzy +msgid "ldap_role_not_exists" +msgstr "A role with that name does not exist" + +#, fuzzy +msgid "ldap_role_selection" +msgstr "Role Selection" + +#, fuzzy +msgid "ldap_role_selection_info" +msgstr "Your selection is ambiguous. Please choose one of the following roles." + +#, fuzzy +msgid "ldap_role_settings" +msgstr "LDAP Group Synchronization Settings" + +#, fuzzy +msgid "ldap_rule_condition" +msgstr "condition" + +#, fuzzy +msgid "ldap_rule_type" +msgstr "Type of Assignment" + +#, fuzzy +msgid "ldap_scope_one" +msgstr "One" + +#, fuzzy +msgid "ldap_scope_sub" +msgstr "Sub" + +#, fuzzy +msgid "ldap_search_base_info" +msgstr "Gets prepended to basedn when searching for users." + +#, fuzzy +msgid "ldap_search_filter" +msgstr "LDAP Filter" + +#, fuzzy +msgid "ldap_server_bind_dn" +msgstr "User Search Base" + +#, fuzzy +msgid "ldap_server_bind_pass" +msgstr "Password" + +#, fuzzy +msgid "ldap_server_binding" +msgstr "Binding" + +#, fuzzy +msgid "ldap_server_name" +msgstr "Name of LDAP Configuration" + +#, fuzzy +msgid "ldap_server_name_info" +msgstr "Please choose a name for this LDAP server configuration." + +#, fuzzy +msgid "ldap_server_security_settings" +msgstr "Security Settings" + +#, fuzzy +msgid "ldap_server_short" +msgstr "Server URL:" + +#, fuzzy +msgid "ldap_server_url_info" +msgstr "A fully qualified URL for specifying the protocol, url and port to connect to. E.g \"ldap://ldap.ilias.de:389\"" + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +#, fuzzy +msgid "ldap_server_version_info" +msgstr "LDAP version to use, ususally 3." + +#, fuzzy +msgid "ldap_servers" +msgstr "LDAP Server" + +#, fuzzy +msgid "ldap_settings" +msgstr "Server Settings" + +#, fuzzy +msgid "ldap_sync_cron" +msgstr "Per Cron-Job" + +#, fuzzy +msgid "ldap_sync_login" +msgstr "On Login" + +#, fuzzy +msgid "ldap_tbl_role_ass" +msgstr "Avtive Rules" + +#, fuzzy +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS can not be used in combination with LDAPv2. Please choose LDAP version \"3\" or disable TLS support." + +#, fuzzy +msgid "ldap_update_field_info" +msgstr "Update automatically" + +#, fuzzy +msgid "ldap_update_roles" +msgstr "Role Assignments" + +#, fuzzy +msgid "ldap_user_attribute" +msgstr "Attribute for Login Name" + +#, fuzzy +msgid "ldap_user_dn" +msgstr "User Search Base" + +#, fuzzy +msgid "ldap_user_mapping" +msgstr "User Profile Mapping" + +#, fuzzy +msgid "ldap_user_scope" +msgstr "Search Scope" + +#, fuzzy +msgid "ldap_user_scope_info" +msgstr "Scope for user searching. If unsure choose \"Sub\"." + +#, fuzzy +msgid "ldap_user_sync" +msgstr "User Synchronization Settings" + +#, fuzzy +msgid "ldap_user_sync_cron" +msgstr "LDAP User Synchronization " + +#, fuzzy +msgid "ldap_user_sync_cron_info" +msgstr "If activated, user accounts will be imported from the LDAP directory and synchronised continuously as an option." + +#, fuzzy +msgid "ldap_user_sync_info" +msgstr "Defines whether new users are automatically created on login or regularly per Cron-Job." + +#, fuzzy +msgid "ldap_username_filter" +msgstr "Username Filter" + +#, fuzzy +msgid "ldap_username_filter_info" +msgstr "Use * as wildcard." diff --git a/components/ILIAS/LDAP/lang/ldap_zh.po b/components/ILIAS/LDAP/lang/ldap_zh.po new file mode 100644 index 000000000000..702f92329dd7 --- /dev/null +++ b/components/ILIAS/LDAP/lang/ldap_zh.po @@ -0,0 +1,406 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: ldap\n" + +#, fuzzy +msgid "add_ldap_server" +msgstr "Add Server" + +msgid "ldap_add_missing" +msgstr "分配缺失角色" + +msgid "ldap_add_role_ass_rule" +msgstr "角色分配的新规则" + +#, fuzzy +msgid "ldap_add_roles" +msgstr "Add Roles" + +msgid "ldap_as_ds" +msgstr "作为数据库源来使用" + +msgid "ldap_as_ds_info" +msgstr "如果已激活,这个LDAP配置仅用于组合其他身份验证方法的用户账号的同步上。(例如)。" + +msgid "ldap_assignment_type" +msgstr "分配类型" + +msgid "ldap_authentication_settings" +msgstr "身份验证设置" + +msgid "ldap_bind_anonymous" +msgstr "匿名绑定" + +msgid "ldap_bind_user" +msgstr "作为用户绑定" + +msgid "ldap_btn_add_role_ass" +msgstr "添加新规则" + +msgid "ldap_check_role_assignment" +msgstr "登录之后的角色分配" + +#, fuzzy +msgid "ldap_choose_role" +msgstr "Choose Role" + +msgid "ldap_confirm_del_role_ass" +msgstr "删除角色分配" + +msgid "ldap_deleted_role_mapping" +msgstr "已删除的分配" + +msgid "ldap_deleted_rule" +msgstr "选定的角色分配已删除" + +msgid "ldap_dn_info" +msgstr "输入专有的LDAP组名。" + +msgid "ldap_edit_role_ass_rule" +msgstr "编辑角色分配规则" + +#, fuzzy +msgid "ldap_edit_role_assignment" +msgstr "Edit Role -> Group Assignment" + +msgid "ldap_err_missing_plugin_id" +msgstr "请输入一个有效的插件ID。" + +#, fuzzy +msgid "ldap_escapedn" +msgstr "Escape DN" + +#, fuzzy +msgid "ldap_escapedn_info" +msgstr "If enabled, special characters in the \"Distinguished Name (DN)\" of user accounts are escaped in queries for group membership." + +msgid "ldap_filter_info" +msgstr "过滤器将以这种方式添加到搜索过滤器:(&(userattr=username)(userfilter))。" + +msgid "ldap_global_role" +msgstr "全局角色" + +msgid "ldap_global_role_assignment" +msgstr "ILIAS角色分配" + +msgid "ldap_global_role_info" +msgstr "请选择一个ILIAS角色,新用户将被分配给它。" + +msgid "ldap_group_attribute" +msgstr "组属性" + +msgid "ldap_group_attribute_info" +msgstr "The group attribute to search for." + +msgid "ldap_group_dn" +msgstr "Group Search Base" + +msgid "ldap_group_dn_info" +msgstr "当搜索组时,获得前面的“BaseDN”。" + +msgid "ldap_group_dn_short" +msgstr "组DN:" + +msgid "ldap_group_filter" +msgstr "LDAP 过滤器" + +msgid "ldap_group_filter_info" +msgstr "当搜索一个组时,过滤器将被添加到搜索过滤器:(&(groupattr=group)(memberattr=username)(groupfilter))。" + +msgid "ldap_group_member" +msgstr "组成员属性" + +msgid "ldap_group_member_info" +msgstr "在组对象属性中,有可能发现用户dn。如果成员属性是用户的专有名称,选择“属性值是DN”。" + +msgid "ldap_group_member_optional" +msgstr "组成员是可选的。" + +msgid "ldap_group_member_short" +msgstr "属性:" + +msgid "ldap_group_membership" +msgstr "组成员" + +msgid "ldap_group_name" +msgstr "组名" + +msgid "ldap_group_name_info" +msgstr "组用户的名字必须是一个身份验证成功的成员。" + +msgid "ldap_group_optional_info" +msgstr "如果启用,该且成员不需要一个成功的身份验证。请输入这些组成员的用户过滤器:
(&(userattr=username)(userfilter))" + +msgid "ldap_group_restrictions" +msgstr "组限制" + +msgid "ldap_group_scope" +msgstr "搜索范围" + +msgid "ldap_group_scope_info" +msgstr "组搜索的范围。如果不确定,请选择 \"Sub\"" + +msgid "ldap_group_search_base" +msgstr "Group Search Base" + +msgid "ldap_group_user_filter" +msgstr "户过滤器" + +msgid "ldap_ilias_role" +msgstr "ILIAS角色" + +msgid "ldap_info_text" +msgstr "信息文字" + +msgid "ldap_info_text_info" +msgstr "如果已输入,此对象被分配的这个角色将显示在这个信息屏上。可选的这个文本在知识库和个人桌面上是可用的。" + +msgid "ldap_local_role" +msgstr "本地角色" + +msgid "ldap_mapping_info_type" +msgstr "在知识库/个人桌面上也显示信息" + +msgid "ldap_mapping_table" +msgstr "LDAP属性到ILIAS用户资料(profile)的分配" + +msgid "ldap_mapping_template" +msgstr "对象类的模板:" + +msgid "ldap_member_info" +msgstr "组对象的属性中可能发现用户dn。" + +msgid "ldap_memberisdn" +msgstr "属性值是DN" + +msgid "ldap_missing_bind_user" +msgstr "您已经选择“绑定用户”:请输入一个有效的LDAP用户名和密码。" + +msgid "ldap_missing_role_assignment" +msgstr "请选择一个全局角色,新用户将被分配给它。" + +msgid "ldap_moment_sync" +msgstr "同步类型" + +msgid "ldap_new_role_assignment" +msgstr "添加新角色 -> 组分配" + +msgid "ldap_plugin" +msgstr "由插件分配" + +msgid "ldap_plugin_id" +msgstr "插件Id" + +msgid "ldap_plugin_info" +msgstr "为一个插件验证角色分配。(Validate the role assignment with a plugin.)请输入一个有效的插件ID。" + +msgid "ldap_referrals" +msgstr "参照" + +msgid "ldap_referrals_info" +msgstr "如果设置,则决定是否由LDAP服务器自动遵循参照返回LDAP库。如果您正在使用一个活动目录服务器,这将被禁用。" + +msgid "ldap_remove_deprecated" +msgstr "放弃分配已弃用角色" + +#, fuzzy +msgid "ldap_remove_roles" +msgstr "Remove Roles" + +msgid "ldap_role_active" +msgstr "启用组同步" + +msgid "ldap_role_assignments" +msgstr "角色分配" + +msgid "ldap_role_at_info" +msgstr "此分配基于LDAP用户资料(profile)中的一个特定属性。" + +msgid "ldap_role_at_name" +msgstr "属性名称" + +msgid "ldap_role_at_value" +msgstr "属性值" + +msgid "ldap_role_bind_pass" +msgstr "密码" + +msgid "ldap_role_bind_pass_info" +msgstr "密码" + +msgid "ldap_role_bind_user" +msgstr "用户 DN" + +msgid "ldap_role_bind_user_info" +msgstr "请输入一个特定的LDAP用户账号名称。这个用户需要这个LDAP组的写访问权限。" + +msgid "ldap_role_by_attribute" +msgstr "LDAP属性" + +msgid "ldap_role_by_group" +msgstr "组成员" + +msgid "ldap_role_by_plugin" +msgstr "通过插件" + +msgid "ldap_role_group_assignments" +msgstr "已存在角色 -> 组分配" + +msgid "ldap_role_grp_at" +msgstr "属性" + +msgid "ldap_role_grp_dn_info" +msgstr "请输入LDAP组的“特定名称”。" + +msgid "ldap_role_grp_info" +msgstr "一个指定的LDAP组的成员将被分配到给定的ILIAS角色。" + +msgid "ldap_role_grp_isdn" +msgstr "属性值是DN" + +msgid "ldap_role_info" +msgstr "输入一个ILIAS角色的名字,将控制到LDAP组的成员。" + +msgid "ldap_role_mapping" +msgstr "LDAP组 -> 角色映射" + +msgid "ldap_role_name_info" +msgstr "请选择一个全局角色或输入一个本地角色的名字。" + +msgid "ldap_role_not_exists" +msgstr "这个角色名不存在" + +msgid "ldap_role_selection" +msgstr "角色选择" + +msgid "ldap_role_selection_info" +msgstr "您的选择很含糊。请选择以下角色之一。" + +msgid "ldap_role_settings" +msgstr "LDAP组同步设置" + +msgid "ldap_rule_condition" +msgstr "条件" + +msgid "ldap_rule_type" +msgstr "分配的类型" + +msgid "ldap_scope_one" +msgstr "One" + +msgid "ldap_scope_sub" +msgstr "Sub" + +msgid "ldap_search_base_info" +msgstr "搜索用户时获取前缀加到baseDN上。(Gets prepended to basedn when searching for users.)" + +msgid "ldap_search_filter" +msgstr "LDAP过滤器" + +msgid "ldap_server_bind_dn" +msgstr "User Search Base" + +msgid "ldap_server_bind_pass" +msgstr "密码" + +msgid "ldap_server_binding" +msgstr "绑定" + +msgid "ldap_server_name" +msgstr "LDAP配置的名称" + +#, fuzzy +msgid "ldap_server_name_info" +msgstr "Please choose a name for this LDAP server configuration." + +msgid "ldap_server_security_settings" +msgstr "安全设置" + +msgid "ldap_server_short" +msgstr "服务器URL:" + +msgid "ldap_server_url_info" +msgstr "一个指定协议、url和端口的完整的合乎规范的URL连接。例如,“ldap://ldap.ilias.de:389”" + +#, fuzzy +msgid "ldap_server_url_invalid_parts" +msgstr "The following server URL(s) could not be parsed as valid URIs and may not work until corrected:" + +#, fuzzy +msgid "ldap_server_url_invalid_uris" +msgstr "Every comma-separated entry must be a valid URI (e.g. ldap://host:389). Invalid:" + +#, fuzzy +msgid "ldap_server_url_required" +msgstr "Server URL is required." + +msgid "ldap_server_version_info" +msgstr "LDAP使用的版本通常是3." + +#, fuzzy +msgid "ldap_servers" +msgstr "LDAP Server" + +msgid "ldap_settings" +msgstr "服务器设置" + +msgid "ldap_sync_cron" +msgstr "每个Cron定时任务" + +msgid "ldap_sync_login" +msgstr "在登录" + +msgid "ldap_tbl_role_ass" +msgstr "激活规则" + +msgid "ldap_tls_conflict" +msgstr "LDAP-TLS不能和LDAPv2组合使用。请选择LDAP版本“3“或禁用TLS支持。" + +msgid "ldap_update_field_info" +msgstr "自动更新" + +msgid "ldap_update_roles" +msgstr "角色分配" + +msgid "ldap_user_attribute" +msgstr "登录名属性" + +msgid "ldap_user_dn" +msgstr "User Search Base" + +msgid "ldap_user_mapping" +msgstr "用户资料(profile)映射" + +msgid "ldap_user_scope" +msgstr "搜索范围" + +msgid "ldap_user_scope_info" +msgstr "用户搜索范围。如果不确定请选择“Sub”。" + +msgid "ldap_user_sync" +msgstr "用户同步设置" + +#, fuzzy +msgid "ldap_user_sync_cron" +msgstr "LDAP User Synchronization " + +#, fuzzy +msgid "ldap_user_sync_cron_info" +msgstr "If activated, user accounts will be imported from the LDAP directory and synchronised continuously as an option." + +msgid "ldap_user_sync_info" +msgstr "定义要么在登录时自动创建新用户,要么在每次Cron自动作业时规范的创建新用户。" + +#, fuzzy +msgid "ldap_username_filter" +msgstr "Username Filter" + +#, fuzzy +msgid "ldap_username_filter_info" +msgstr "Use * as wildcard." diff --git a/components/ILIAS/LTI/LTI.php b/components/ILIAS/LTI/LTI.php index 44255ac8a61c..8632e0eedf18 100644 --- a/components/ILIAS/LTI/LTI.php +++ b/components/ILIAS/LTI/LTI.php @@ -26,6 +26,8 @@ use ILIAS\DI\UIServices; use ILIAS\GlobalScreen\Services as GlobalScreen; use ILIAS\HTTP\GlobalHttpState; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; use ILIAS\LTI\View as LTIView; use ILIAS\Refinery\Factory as Refinery; use ILIAS\Setup\Agent; @@ -106,6 +108,11 @@ public function init( $contribute[Component\Resource\PublicAsset::class] = fn() => new Component\Resource\ComponentCSS($this, "lti_view.css"); + + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'ltiv' + ); } /** diff --git a/components/ILIAS/LTI/lang/ltiv.pot b/components/ILIAS/LTI/lang/ltiv.pot new file mode 100644 index 000000000000..1c84ad3ddd71 --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv.pot @@ -0,0 +1,12 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"MIME-Version: 1.0\n" +"X-Domain: ltiv\n" + +msgid "ltiv_create" +msgstr "" + +msgid "ltiv_create_info" +msgstr "" diff --git a/components/ILIAS/LTI/lang/ltiv_ar.po b/components/ILIAS/LTI/lang/ltiv_ar.po new file mode 100644 index 000000000000..f4d2522fe2b3 --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_ar.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ar\n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))));\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_bg.po b/components/ILIAS/LTI/lang/ltiv_bg.po new file mode 100644 index 000000000000..5f695b5948c7 --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_bg.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: bg\n" +"Language-Team: Bulgarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_cs.po b/components/ILIAS/LTI/lang/ltiv_cs.po new file mode 100644 index 000000000000..a5a648fdf293 --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_cs.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: cs\n" +"Language-Team: Czech\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_da.po b/components/ILIAS/LTI/lang/ltiv_da.po new file mode 100644 index 000000000000..ea482463d7bc --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_da.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: da\n" +"Language-Team: Danish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_de.po b/components/ILIAS/LTI/lang/ltiv_de.po new file mode 100644 index 000000000000..f93eb5f1acec --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_de.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: de\n" +"Language-Team: German\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ltiv\n" + +msgid "ltiv_create" +msgstr "Zertifikat für LTI-Konsument-Objekt erstellen" + +msgid "ltiv_create_info" +msgstr "Wählen Sie ein abgeschlossenes LTI-Konsument-Objekt aus, um ein Zertifikat dafür zu generieren." diff --git a/components/ILIAS/LTI/lang/ltiv_el.po b/components/ILIAS/LTI/lang/ltiv_el.po new file mode 100644 index 000000000000..fcdb3f6db012 --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_el.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: el\n" +"Language-Team: Greek\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_en.po b/components/ILIAS/LTI/lang/ltiv_en.po new file mode 100644 index 000000000000..fbdc9673022f --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_en.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: en\n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ltiv\n" + +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_es.po b/components/ILIAS/LTI/lang/ltiv_es.po new file mode 100644 index 000000000000..02e9f34f7daf --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_es.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: es\n" +"Language-Team: Spanish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: ltiv\n" + +msgid "ltiv_create" +msgstr "Crear certificado para objeto consumidor LTI" + +msgid "ltiv_create_info" +msgstr "Seleccione un objeto consumidor LTI finalizado para generar un certificado para el mismo" diff --git a/components/ILIAS/LTI/lang/ltiv_et.po b/components/ILIAS/LTI/lang/ltiv_et.po new file mode 100644 index 000000000000..95ff20d0f4d5 --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_et.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: et\n" +"Language-Team: Estonian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_fa.po b/components/ILIAS/LTI/lang/ltiv_fa.po new file mode 100644 index 000000000000..23550e0c070d --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_fa.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fa\n" +"Language-Team: Persian (Farsi)\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_fr.po b/components/ILIAS/LTI/lang/ltiv_fr.po new file mode 100644 index 000000000000..1215c29549d6 --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_fr.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: fr\n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: ltiv\n" + +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_hr.po b/components/ILIAS/LTI/lang/ltiv_hr.po new file mode 100644 index 000000000000..13c81b838b25 --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_hr.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hr\n" +"Language-Team: Croatian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_hu.po b/components/ILIAS/LTI/lang/ltiv_hu.po new file mode 100644 index 000000000000..d1d85190bc3c --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_hu.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: hu\n" +"Language-Team: Hungarian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ltiv\n" + +msgid "ltiv_create" +msgstr "Az LTI-Fogyasztóobjektumoknak tanúsítvány létrehozása" + +msgid "ltiv_create_info" +msgstr "Válassza ki a teljesített LTI-Fogyasztóobjektumot, melyhez tanúsítványt kíván generálni" diff --git a/components/ILIAS/LTI/lang/ltiv_it.po b/components/ILIAS/LTI/lang/ltiv_it.po new file mode 100644 index 000000000000..c9b9db83962f --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_it.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: it\n" +"Language-Team: Italian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: ltiv\n" + +msgid "ltiv_create" +msgstr "Crea certificato per Oggetto consumatore LTI." + +msgid "ltiv_create_info" +msgstr "Seleziona un Oggetto consumatore LTI completato per generare un certificato." diff --git a/components/ILIAS/LTI/lang/ltiv_ja.po b/components/ILIAS/LTI/lang/ltiv_ja.po new file mode 100644 index 000000000000..a5d7aaf93b03 --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_ja.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ja\n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: ltiv\n" + +msgid "ltiv_create" +msgstr "LTI Consumerオブジェクト用の証明書を作成" + +msgid "ltiv_create_info" +msgstr "証明書作成用の完了したLTI consumerオブジェクトを選択" diff --git a/components/ILIAS/LTI/lang/ltiv_ka.po b/components/ILIAS/LTI/lang/ltiv_ka.po new file mode 100644 index 000000000000..1bef3d5f91d0 --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_ka.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ka\n" +"Language-Team: Georgian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_lt.po b/components/ILIAS/LTI/lang/ltiv_lt.po new file mode 100644 index 000000000000..838900ff1a65 --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_lt.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: lt\n" +"Language-Team: Lithuanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_nl.po b/components/ILIAS/LTI/lang/ltiv_nl.po new file mode 100644 index 000000000000..347a7d99f98b --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_nl.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: nl\n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_pl.po b/components/ILIAS/LTI/lang/ltiv_pl.po new file mode 100644 index 000000000000..644eb3802a59 --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_pl.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pl\n" +"Language-Team: Polish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_pt.po b/components/ILIAS/LTI/lang/ltiv_pt.po new file mode 100644 index 000000000000..0eefa38a0cfb --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_pt.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: pt\n" +"Language-Team: Portuguese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2);\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_ro.po b/components/ILIAS/LTI/lang/ltiv_ro.po new file mode 100644 index 000000000000..d3ae25248320 --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_ro.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ro\n" +"Language-Team: Romanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2);\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_ru.po b/components/ILIAS/LTI/lang/ltiv_ru.po new file mode 100644 index 000000000000..818af9f90e6a --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_ru.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: ru\n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_sk.po b/components/ILIAS/LTI/lang/ltiv_sk.po new file mode 100644 index 000000000000..dfcb69d85a35 --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_sk.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sk\n" +"Language-Team: Slovak\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n >= 2 && n <= 4) ? 1 : 2);\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_sl.po b/components/ILIAS/LTI/lang/ltiv_sl.po new file mode 100644 index 000000000000..36df9228aadc --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_sl.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sl\n" +"Language-Team: Slovenian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=4; plural=(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3));\n" +"X-Domain: ltiv\n" + +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_sq.po b/components/ILIAS/LTI/lang/ltiv_sq.po new file mode 100644 index 000000000000..2df01f513aaa --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_sq.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sq\n" +"Language-Team: Albanian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_sr.po b/components/ILIAS/LTI/lang/ltiv_sr.po new file mode 100644 index 000000000000..d80af5fc22a9 --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_sr.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sr\n" +"Language-Team: Serbian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_sv.po b/components/ILIAS/LTI/lang/ltiv_sv.po new file mode 100644 index 000000000000..ade8f8037bc5 --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_sv.po @@ -0,0 +1,15 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: sv\n" +"Language-Team: Swedish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ltiv\n" + +msgid "ltiv_create" +msgstr "Skapa certifikat för LTI-konsumentobjekt" + +msgid "ltiv_create_info" +msgstr "Välj ett slutfört LTI-konsumentobjekt för att generera ett certifikat för det." diff --git a/components/ILIAS/LTI/lang/ltiv_tr.po b/components/ILIAS/LTI/lang/ltiv_tr.po new file mode 100644 index 000000000000..9d3756683f2a --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_tr.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: tr\n" +"Language-Team: Turkish\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_uk.po b/components/ILIAS/LTI/lang/ltiv_uk.po new file mode 100644 index 000000000000..061cc5facf25 --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_uk.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: uk\n" +"Language-Team: Ukrainian\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_vi.po b/components/ILIAS/LTI/lang/ltiv_vi.po new file mode 100644 index 000000000000..623babb80c0a --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_vi.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: vi\n" +"Language-Team: Vietnamese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/LTI/lang/ltiv_zh.po b/components/ILIAS/LTI/lang/ltiv_zh.po new file mode 100644 index 000000000000..cf9564538b58 --- /dev/null +++ b/components/ILIAS/LTI/lang/ltiv_zh.po @@ -0,0 +1,17 @@ +msgid "" +msgstr "" +"Content-Transfer-Encoding: 8bit\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Language: zh\n" +"Language-Team: Chinese\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Domain: ltiv\n" + +#, fuzzy +msgid "ltiv_create" +msgstr "Create Certificate for LTI Consumer Object" + +#, fuzzy +msgid "ltiv_create_info" +msgstr "Select a completed LTI consumer object to generate a certificate for it" diff --git a/components/ILIAS/Language/Language.php b/components/ILIAS/Language/Language.php index 2cbc888fc36a..256093c9f975 100644 --- a/components/ILIAS/Language/Language.php +++ b/components/ILIAS/Language/Language.php @@ -20,6 +20,25 @@ namespace ILIAS; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectoryManager; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\MainLanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\CustomizingLanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\ComponentLanguageFileDirectory; +use ILIAS\Language\Activities\InstallLanguage; +use ILIAS\Language\Activities\UpdateLanguage; +use ILIAS\Language\Activities\UninstallLanguage; +use ILIAS\Language\Activities\RemoveLocalLanguageChanges; +use ILIAS\Language\Activities\AddLanguageEntry; +use ILIAS\Language\Activities\SetLanguageDetectionEnabled; +use ILIAS\Language\Activities\SetLanguageTranslationEnabled; +use ILIAS\Language\Activities\RepositoryProvider; +use ILIAS\Language\Setup\InstalledLanguageDatabaseRepository; +use ILIAS\Environment\Configuration\Installation\Directories; +use ILIAS\Environment\Configuration\Installation\ClientIdProvider; +use ILIAS\Language\ComponentTranslation\MigratedLanguageFilePaths; +use ILIAS\Logging\Logger\LoggerFactoryInterface; + class Language implements Component\Component { public function init( @@ -34,25 +53,174 @@ public function init( ): void { $define[] = \ILIAS\Language\Language::class; + // each entry's dependencies are declared above it + $internal[Language\LanguageFolder::class] = static fn() => + new Language\LanguageFolderLegacyProxy(); + + $internal[LanguageFileDirectoryManager::class] = static fn() => + new LanguageFileDirectoryManager( + new CustomizingLanguageFileDirectory(), + ...$seek[LanguageFileDirectory::class] + ); + + $internal[InstalledLanguageDatabaseRepository::class] = static fn() => + new InstalledLanguageDatabaseRepository( + $pull[\ILIAS\Database\Connection::class], + $internal[LanguageFileDirectoryManager::class], + new Language\Setup\DirectoriesInstallationRoot($use[Directories::class]) + ); + + // Setup hands in its own database via setDbHandler() instead of the Connection + $internal[\ilSetupLanguage::class] = static fn() => + new \ilSetupLanguage( + "en", + $internal[LanguageFileDirectoryManager::class] + ); + + $internal[Language\Setup\TranslationCache::class] = static fn() => + new Language\Setup\TranslationCacheLegacyProxy(); + + // $use must be read inside a container closure: the bootstrap only wires what is read there + $client_data_dir_resolver_of = static function ( + Directories $directories, + ClientIdProvider $client_id_provider + ): \Closure { + return static function () use ($directories, $client_id_provider): ?string { + try { + $client_id = $client_id_provider->getClientId()->toString(); + } catch (\InvalidArgumentException) { + // Missing or invalid client id: no overlay instead of a failing request. + return null; + } + return MigratedLanguageFilePaths::fromDataDirAndClientId($directories->getDataDir(), $client_id); + }; + }; + + $runtime_setup_language = static fn(): \ilSetupLanguage => + new \ilSetupLanguage( + "en", + $internal[LanguageFileDirectoryManager::class], + $pull[\ILIAS\Database\Connection::class], + $internal[Language\Setup\TranslationCache::class], + $use[LoggerFactoryInterface::class]->getLazy('lang'), + $client_data_dir_resolver_of($use[Directories::class], $use[ClientIdProvider::class]) + ); + + $internal[Language\Activities\LanguageSettings::class] = static fn() => + new Language\Activities\LanguageSettingsLegacyProxy(); + + // the runtime Activities route all legacy access through this provider + $internal[RepositoryProvider::class] = static fn() => + new RepositoryProvider( + $internal[InstalledLanguageDatabaseRepository::class], + $pull[\ILIAS\Database\Connection::class], + $internal[Language\Activities\LanguageSettings::class], + $internal[LanguageFileDirectoryManager::class], + new Language\Setup\DirectoriesInstallationRoot($use[Directories::class]), + $client_data_dir_resolver_of($use[Directories::class], $use[ClientIdProvider::class]), + $use[LoggerFactoryInterface::class]->getLazy('lang'), + ); + + $internal[InstallLanguage::class] = static fn() => + new InstallLanguage( + $use[\ILIAS\AccessControl\PublicInterface\RBAC::class], + $runtime_setup_language(), + $internal[Language\LanguageFolder::class] + ); + + $internal[UpdateLanguage::class] = static fn() => + new UpdateLanguage( + $use[\ILIAS\AccessControl\PublicInterface\RBAC::class], + $runtime_setup_language(), + $internal[Language\LanguageFolder::class], + $internal[RepositoryProvider::class], + ); + + $internal[UninstallLanguage::class] = static fn() => + new UninstallLanguage( + $use[\ILIAS\AccessControl\PublicInterface\RBAC::class], + $internal[Language\LanguageFolder::class], + $internal[RepositoryProvider::class], + ); + + $internal[RemoveLocalLanguageChanges::class] = static fn() => + new RemoveLocalLanguageChanges( + $use[\ILIAS\AccessControl\PublicInterface\RBAC::class], + $internal[Language\LanguageFolder::class], + $internal[RepositoryProvider::class], + ); + + $internal[AddLanguageEntry::class] = static fn() => + new AddLanguageEntry( + $use[\ILIAS\Language\Language::class], + $use[\ILIAS\AccessControl\PublicInterface\RBAC::class], + $internal[Language\LanguageFolder::class], + $internal[RepositoryProvider::class], + ); + + $internal[SetLanguageDetectionEnabled::class] = static fn() => + new SetLanguageDetectionEnabled( + $use[\ILIAS\AccessControl\PublicInterface\RBAC::class], + $internal[Language\LanguageFolder::class], + $internal[RepositoryProvider::class], + ); + + $internal[SetLanguageTranslationEnabled::class] = static fn() => + new SetLanguageTranslationEnabled( + $use[\ILIAS\AccessControl\PublicInterface\RBAC::class], + $internal[Language\LanguageFolder::class], + $internal[RepositoryProvider::class], + ); + + // only proxies to $DIC->language() at call time, hence no constructor arguments + $internal[Language\LanguageLegacyInitialisationAdapter::class] = static fn() => + new Language\LanguageLegacyInitialisationAdapter(); + + // Two candidates on purpose, neither line is dead: every $implement assignment is collected, + // and each bootstrap entry point picks one in its resources/dependency_resolution.php + // (Setup: ilSetupLanguage, Init: LanguageLegacyInitialisationAdapter). $implement[\ILIAS\Language\Language::class] = static fn() => $internal[\ilSetupLanguage::class]; $implement[\ILIAS\Language\Language::class] = static fn() => - $internal[\ilLanguage::class]; + $internal[Language\LanguageLegacyInitialisationAdapter::class]; + + $provide[LanguageFileDirectoryManager::class] = static fn() => + $internal[LanguageFileDirectoryManager::class]; + + $contribute[LanguageFileDirectory::class] = static fn() => new MainLanguageFileDirectory(); $contribute[\ILIAS\Setup\Agent::class] = static fn() => new \ilLanguageSetupAgent( $pull[\ILIAS\Refinery\Factory::class], - $internal[\ilSetupLanguage::class] + $internal[\ilSetupLanguage::class], + // Setup checks no permissions, hence no RBAC. + InstallLanguage::forSetup($internal[\ilSetupLanguage::class]), + // no plugin language files re-applied: the plugin objectives do that in the Setup + UpdateLanguage::forSetup($internal[\ilSetupLanguage::class]) ); - $internal[\ilSetupLanguage::class] = static fn() => - new \ilSetupLanguage("en"); - - $internal[\ilLanguage::class] = static fn() => - new Language\LanguageLegacyInitialisationAdapter(); + // Provided under the concrete class because Init.php pulls it, so none may become final + // (the GUI tests mock them). + $activities = [ + InstallLanguage::class, + UpdateLanguage::class, + UninstallLanguage::class, + RemoveLocalLanguageChanges::class, + AddLanguageEntry::class, + SetLanguageDetectionEnabled::class, + SetLanguageTranslationEnabled::class, + ]; + foreach ($activities as $activity) { + $provide[$activity] = static fn() => $internal[$activity]; + $contribute[\ILIAS\Component\Activities\Activity::class] = static fn() => $internal[$activity]; + } $contribute[User\Settings\UserSettings::class] = fn() => new Language\UserSettings\Settings(); + $contribute[LanguageFileDirectory::class] = fn() => new ComponentLanguageFileDirectory( + $this, + 'lng' + ); } } diff --git a/components/ILIAS/Language/README.md b/components/ILIAS/Language/README.md index 9a60a158bb43..6c55894a6bb4 100755 --- a/components/ILIAS/Language/README.md +++ b/components/ILIAS/Language/README.md @@ -6,22 +6,505 @@ Language Service # General Information ## Guidelines -There are a couple of guidelines defined in the [language.md](../../docs/development/language.md) that have to be respected when adding language variables to the lang files of ILIAS or editing them. +There are a couple of guidelines defined in the [language.md](../../../docs/development/language.md) that have to be respected when adding language variables to the lang files of ILIAS or editing them. -## Using the Global Language Object -The global language object can be retrieved from the dependency injection container by using/calling `$DIC['lng']` or -`$DIC->language()`. This is an instance of class `ilLanguage` and provides methods to access these strings in the -language of the user within the current authentication process. This is done by using the functions - `loadLanguageModule()` and `txt()`. +## Using the Language Service +Component-revision code should depend on `ILIAS\Language\Language`. During the legacy bootstrap this interface is +provided lazily, so early component construction does not access the language service before the legacy container has +been initialised. After initialisation it delegates to the active `ilLanguage` runtime instance. - $lng->loadLanguageModule("frm"); - $tpl->setVariable("TEXT", $lng->txt("frm_new_posting")); +For components which have not yet been migrated, the active runtime language remains available through `$DIC['lng']` +or `$DIC->language()`. These access paths are a temporary compatibility layer and must not be used for new code. +Setup code has a separate language implementation, `ilSetupLanguage`, which is constructed without runtime user, +session, or container state. It must not be used as the runtime language service. -## Supported HTML Tags in Language Files -Only a defined set of HTML tags are allowed to be used within the `text_content` of a language entry: + $language->loadLanguageModule("frm"); + $tpl->setVariable("TEXT", $language->txt("frm_new_posting")); -* All tags allowed by `getSecureTags` from `ilUtil`: `a`, `b`, `bdo`, `code`, `div`, `em`, `gap`, `i`, `img`, `li`, `ol`, `p`, `pre`, `strike`, `strong`, `sub`, `sup`, `u` and `ul` -* In addition: `span` and `br` +### Language Identifier Enums +`txt()` (`ILIAS\Language\Language`) accepts, besides a string, a `LanguageIdentifier`: -All other HTML tags are unsupported and will be removed by `ilUtil::stripSlashes`. + $language->txt(PollLanguageIdentifier::POLL_ANSWERS); // text of the current language + $language->txt(PollLanguageIdentifier::POLL_ANSWERS, $count); // plural form for $count + $language->txt('poll_answers'); // unchanged + +- `ILIAS\Language\LanguageIdentifier` is implemented by a string backed enum per module (`LanguageIdentifier`): + the case value is the identifier, `module()` the module. The enum is generated from the module's `.pot` with + [`tools/language-identifier-enum/`](tools/language-identifier-enum/README.md) (`--check` in CI), so a removed + identifier fails at the call site instead of showing `-identifier-`. +- With a `LanguageIdentifier` the identifier is read from exactly its module - no `loadLanguageModule()` beforehand, no + dependency on which module was loaded last (no collision of identifiers that exist in several modules). A shipped + module is looked up directly in its build and overlay; of a plugin module the values for the current + language are read (cache of `lng_modules`, else `lng_modules`) and kept for the request, for the default language its + entry is read from `lng_data`. No side effect on string calls: the module is not loaded, so the order "the module + loaded last wins" stays as it is. Without a text in the current language the one of the default language is served, + otherwise `-identifier-`. +- With a string and without `$n`, `txt()` behaves as before, without a fallback module (see below). +- An empty identifier (as for a string, also `"0"`) gives `""`. +- `$n` only selects a plural form of a plural message of a migrated module, see [Plural Forms](#plural-forms). +- `txtlng()` and `exists()` take a string only. +- Breaking change (announced for the Jour Fixe): implementations of `ILIAS\Language\Language` and subclasses of + `ilLanguage` that override `txt()` must accept `string|LanguageIdentifier $a_topic, ?int $n = null`. `ntxt()` is + gone, use `txt($a_topic, $n)`. The second parameter `$a_default_lang_fallback_mod` is gone: load the module with + `loadLanguageModule()` or pass a `LanguageIdentifier`. A string no longer falls back to the default language + (#13467); only a `LanguageIdentifier` does. Behaviour change: where callers passed a fallback module, a key missing + in the user's language now shows `-key-` instead of the text of the default language (`ilPluginLanguage` and the fuzzy marker of the + language editor keep the fallback). + `ilSetupLanguage` reads only the identifier of a `LanguageIdentifier` (`$n` without effect) - Setup needs English at most. + +## Installing and Managing Languages +Which languages are installed/available (`ILIAS\Language\Setup\InstalledLanguageRepository`) and installing, flushing +or registering a language (`ILIAS\Language\Setup\LanguageInstallationManager`) are separate, narrower services - +following [the repository pattern](../../../docs/development/repository-pattern.md) - rather than part of +`ilSetupLanguage` itself. Both are internal to this component; `ilSetupLanguage` delegates to them and remains the +concrete `ILIAS\Language\Language` implementation used during Setup and the entry point for callers outside the +component. + + +## Language File Directories +Where language files are looked up - the global `lang` directories, a component's own language +files, and the Customizing overrides - is resolved through `ILIAS\Language\ComponentTranslation\*` +(`src/ComponentTranslation/`): `LanguageFileDirectory` is the interface each source implements +(`MainLanguageFileDirectory`, `ComponentLanguageFileDirectory`, `CustomizingLanguageFileDirectory`), +and `LanguageFileDirectoryManager` aggregates all of them, contributed by other components via +`$contribute[LanguageFileDirectory::class]` and gathered in `Language.php` via +`$seek[LanguageFileDirectory::class]`. `InstalledLanguageDatabaseRepository` and +`LanguageInstallationManager` both depend on this manager rather than hardcoding paths. + +## Translations Maintained in PO Files +A module is shipped by its component as gettext files instead of lines in +`lang/ilias_.lang`. All modules of the global files are migrated: +`lang/ilias_.lang` only holds the header, the database serves plugin +modules only. For such a module the shipped `.po` is +the only source of its shipped values: its lines are removed from +`lang/ilias_.lang` when it is migrated (`--remove-from-lang`, see +[Migrating a Module](#migrating-a-module)); a rollback restores them from git +(see [Rollback](#rollback)). Lines left there would be ignored when installing +or updating a language. + +1. [Shipped Files](#shipped-files) +2. [Build](#build) +3. [Runtime](#runtime) +4. [Plural Forms](#plural-forms) +5. [Local Changes and Database](#local-changes-and-database) +6. [Markup Policy](#markup-policy) +7. [Language Administration](#language-administration) +8. [Setup](#setup) +9. [Plugins](#plugins) +10. [Migrating a Module](#migrating-a-module) +11. [Rollback](#rollback) + +### Shipped Files +* The component contributes a `ComponentLanguageFileDirectory` with the module + as prefix (`$contribute[LanguageFileDirectory::class]` in `.php`) + and ships `.pot` and one `_.po` per language in its + `lang/` directory. A 4th constructor argument may name the files differently + (e.g. `'ilias_%s'` for `ilias_.po`; exactly one `%s`, no `/` or `..`). + Build artifacts and overlays are always named after the module. +* Several modules of one component share its `lang/` directory and are told + apart by their file names only: `LanguageFileDirectoryManager` refuses two + directories that ship the same files. An `ilias_.lang` must not be put + there: it is read once per contributed directory, so its lines would end up + in every module of that folder. +* `msgid` is the language key (`txt()` is unchanged). There is no `msgctxt`: an + entry without context belongs to the module of its directory, an entry with + the module as context is read as well, every other context (also + `msgctxt ""`) is ignored. Only UTF-8 files are accepted. +* A `###` comment of a `.lang` file is a note: the reference language's note + is an extracted comment (`#.`, also in the `.pot`), a language's own note a + translator comment (`# `, kept by `msgmerge`), which wins. `#, fuzzy` marks + an entry that is not translated yet (it holds the English text); fuzzy + entries are served like all others, empty translations are not shipped + (`-identifier-`, as before). +* The initial files are generated with + [`tools/po-migration/convert_module_to_po.php`](tools/po-migration/README.md), + later changes are made in the `.po`/`.pot` files directly. The module has no + `.lang` lines any more, so a new run of the tool fails ("Nothing was + written") and leaves the files unchanged. +* A module counts as migrated for a language while its shipped `.po` exists + (Setup, administration) and the build contains it (runtime). + +### Build +`php cli/setup.php build` (also run by `composer install` and +`composer dump-autoload`, see `ShippedTranslationsBuild`) compiles every +shipped `.po` into `artifacts/language//`: +`messages/LC_MESSAGES/..mo`, `keys/.php`, a copy of the C +library's `C.utf8` locale and a manifest (also the hashes of the compiled +`.po` files, warnings and collisions). `artifacts/language/current.json` names +the build that is served, its languages per module and every contributed +module, nothing else, as every request reads it; it is switched only after the +new build is complete and passed a real lookup through native gettext, and the +previous build is kept for running requests. + +* **The build aborts** if the PHP extension `gettext` (a precondition of + `setup build`) or `C.utf8` is missing. +* Not aborting, but reported on every build: values with markup that is not + allowed (compiled cleaned, see [Markup Policy](#markup-policy)), a `.po` that + cannot be compiled (e.g. merge conflict markers) and identifiers that two + migrated modules ship with different values (grouped by modules). A reused, + unchanged build lists only the `.po` files that cannot be compiled and counts + the rest; the details stay in its `manifest.json`. For a `.po` that cannot be + compiled the language keeps the catalog of the served (or previous) build, + if that build was made by the same compiler and its catalog is intact and + passes the markup policy; otherwise the module is not served for that + language (`-identifier-`, like a `.lang` line that cannot be read) until the + file is fixed; the runtime logs it when the module is used. +* **Deployment requirement:** run `php cli/setup.php build` after every change + of a shipped `.po`. The runtime never compiles; a file that is not in the + build is not served. +* Only Setup builds. The web server never writes into `artifacts/`. + +### Runtime +`ilLanguage` serves a module shipped by a component only through a +`TranslationRepository`, by default `TranslationGettextRepository` (native +gettext, see `NativeGettext`): the build with the overlay of the +local changes on top, never from the database - also in Setup and CLI, where +the client data directory of the overlay is taken from `ilias.ini.php` until +`CLIENT_DATA_DIR` is defined. A module counts as shipped if `current.json` +lists it as contributed, without a build if a component ships its +`lang/.pot` (the build warns about a contribution without one); this +needs no component graph. +Only other modules (plugins) are read from `lng_data`/`lng_modules`. + +* Without a build, for a language the build lacks, or for a language that is + not installed a shipped module has no texts (`-identifier-`); a missing + build or a shipped `.po` that is not built is reported. +* Requirements: the PHP extension `gettext` and the locale `C.utf8` are + mandatory for CLI and web server, with the same C library for both (glibc; + musl ignores `LOCPATH`). The build checks this in the CLI process only. + Without them every text of a shipped module is shown as `-identifier-`; the + problem is logged and shown in the language administration. With a + thread-safe PHP (ZTS) the locale applies to every thread of the process. +* Behaviour change: an identifier that the migrated module loaded last does not + translate gives `-identifier-`, not the value of a module loaded before. +* `txt()` with a `LanguageIdentifier` reads from exactly its module, see + [above](#language-identifier-enums). +* Another `TranslationRepository` (e.g. in unit tests) is handed to + `new ilLanguage($lang_key, $translations)`. The static methods + (`_lookupEntry()`, the invalidation after a write) always use + `TranslationGettextRepository`. Its state is static, so every instance + shares it, like native gettext its domains. Build status and problems stay + in `MigratedTranslations`. +* Apart from these lookups, `.po`/`.mo` files are read and written with the + library `gettext/gettext`, only through the adapter in + `src/ComponentTranslation/Catalog/` (`TranslationCatalog`, + `TranslationEntry`). No other class imports from `Gettext\`, and the + library's `Scanner` is not used. + +### Plural Forms +`txt($a_topic, $n)` returns the form of a plural message (`msgid_plural`, +`msgstr[n]`) that the `Plural-Forms` rule of the language selects for `$n`. +The quantity is not inserted; callers do that, e.g. with `sprintf()`. In every +other case (module not migrated, plugin, no plural message, empty form) it +returns exactly what `txt()` without `$n` returns in that language, never the +form of another language. + +* `txt()` without `$n` returns the default form of a plural message: the last form + (CLDR "other"), or the last non-empty one before it. The database holds this + form only; all forms exist only in the `.po` files, the build and the + overlay. +* The rules are taken from CLDR (`tools/po-migration/plurals.json`). They are + checked when compiling (`PluralForms`, no `eval`); a missing or invalid + header falls back to `nplurals=2; plural=(n != 1);` with a warning. +* The administration shows each form as a row of its own, ` []` + (e.g. `poll_population [0]`). Keys containing ` [` cannot be migrated. +* If the rule of a language changes (e.g. CLDR 49: `vi` 1 → 2), local form + values are taken over by meaning, not by index: a new form gets the local + value of the old form that served the same quantities (n = 0…200 and some + large values). If it covers several old forms, it gets their value if they + agree, and the new default form gets the old default form; otherwise it + shows the shipped value (logged when the overlay is written). The overlay + keeps its old rule until the next write (e.g. `setup update`): until then + the runtime serves the local plural messages with the old rule (consistent + in itself, by meaning), `setup build` alone does not change that; the + administration and every write already map it to the new rule. Form keys in imported files (` []`) always mean the + forms of the current rule. + +### Local Changes and Database +Shipped files are never written at runtime, except by "merge" (see +[Language Administration](#language-administration)). Each installation keeps +only its local changes in the "overlay" below the client data directory, +`/lang///`: the `.po` with the bookkeeping +(`# original`, `# local_change`, `# remark`), `lock`, `current` and the +compiled revisions `r-/` that `current` names. + +* The overlay holds the delta only: entries whose value differs from the + shipped one, keys that are not shipped (customizing file, "add new + variable") and remarks. Setting an entry back to the shipped value, or to an + empty value, removes it; an empty overlay is deleted. Installing a language + without local changes writes no overlay (only the record of the + [Setup](#setup) that `lng_data` was taken over). +* `lng_data`/`lng_modules` are still written on every path (with the cleaned + shipped values and the default form of plural messages) as fallback for a + rollback. They must not be dropped as long as code outside of this component + reads `lng_data` directly (`ilNotificationDatabaseHandler`, + `ilDclStandardField`). +* Writes of a module's overlay and database rows are serialized per module and + language by an exclusive lock on `lock` in the overlay directory. Setup and + "remove local changes" lock every module with an overlay for the whole run. + Known limitation: `lng_data` is written in one batch, so a concurrent edit of + a module without overlay can lose its database row (the overlay, which is + served, keeps the edit). +* Symbolic links below `/lang` are not followed. The checks + work on path names, so a link swapped in between check and file operation is + still followed (requires write access as web server user). +* **Setup MUST be run as the web server user** (the owner of the client data + directory), since Setup and the web server both write the overlay. Setup does + not change ownership: it warns, naming the directories and the `chown` + command. The administration shows a warning whenever an overlay could not be + written or removed. +* An overlay that cannot be read (e.g. edited by hand) is reported: at runtime + the module serves its shipped values, Setup leaves the module unchanged + (nothing written, nothing taken from `lng_data`) and saving in the + administration is refused for it. Its local changes are only served again + once the overlay is repaired. Until then the rollback copy of the module in + `lng_data`/`lng_modules` is incomplete: Setup's flush removed its rows that + are not local changes, `lng_modules` keeps its former row. +* Uninstalling a language removes its overlays. + +### Markup Policy +Which HTML a language value may contain is decided in one place, +`ILIAS\Language\ComponentTranslation\TranslationMarkupPolicy`, for every +module, migrated or not. It uses PHP's HTML5 parser (no regular expressions); +an allowed value stays byte-identical. + +* Tags: `a`, `b`, `bdo`, `br`, `code`, `div`, `em`, `gap`, `h3`, `i`, `img`, + `li`, `ol`, `p`, `pre`, `s`, `small`, `span`, `strike`, `strong`, `sub`, + `sup`, `u`, `ul`. +* Attributes (names case-insensitive): `a[href|target|rel|title]`, + `img[src|alt]`, `span[class|style]`, `p[align]`, `div[align]`; no others. + `href`/`src` must be relative or use `http`/`https` (`href` also `mailto`), + checked on the decoded value. An attribute value must not contain `<`. +* `style` (on `span` only): the properties `background-color`, `color`, + `font-style`, `font-weight`, `text-align` and `text-decoration`; no functions + except `rgb`, `rgba`, `hsl`, `hsla`, no CSS escapes or comments. +* Not allowed either: comments, a value ending inside an unfinished tag, and + unbalanced markup - an element left open (unless HTML5 allows to omit its end + tag, e.g. `li`, `p`), an end tag closing an element around the value, and + the end tag of any tag that is not allowed (``). Known gap: a stray + `

` or `` is not detected. +* A value containing `<` that is longer than 16 KiB is not parsed and never + allowed. +* Text that is no tag to an HTML parser (`a <= b`, `<<`) is allowed. +* Values without `<` are not checked at all: output in attributes or + JavaScript must be escaped by the caller. + +Where the rules apply: +* Build (shipped `.po`) and plugin `.po`: offending tags, attributes and + comments are removed (their text stays) and reported; nothing aborts. +* Local write paths reject such values instead, checking only values that + differ from the current and the shipped one: the edit table and the import + of an uploaded file (nothing is saved, every affected key is named with the + offending markup), "add new variable" (the whole request is rejected), the + customizing file `lang/customizing/ilias_.lang.local` (the affected + entries are left out and named; the language is installed regardless). +* `setup update` reports local changes that break the rules, without changing + them. +* Plugin `.lang` files and the shipped `lang/ilias_.lang` files are not + changed; violations of plugin `.lang` files are logged. + +### Language Administration +* The edit table compares with the shipped `.po`. A rejected save shows the + table again with the input. The remark field of a module maintained in PO + files shows the note of the shipped entry as long as there is no local + remark; saving it unchanged writes nothing. Fuzzy entries are marked + "Not translated" (`lng_not_translated`) in the comment of the default value. +* Remarks of migrated modules are stored in the overlay (and `lng_data`), one + per key, also for plural messages. +* Import of a language file: for a migrated module, imported values that + differ from the shipped ones become local changes in the overlay, in every + mode. A line without `###` comment keeps the stored remark. "delete" first + deletes the language's database rows and then writes every module anew; a + remark that is not in the file is removed from the overlay as well. Markup is + checked before anything is deleted. So are identifiers that exist in another + module or in another spelling (as for "add new variable", an entry the module + already holds stays importable): an uploaded file is rejected as a whole, the + maintenance action "load" leaves such entries out; both name them + (`lng_identifier_not_unique`). Installing, updating and "install local" leave + such entries of the customizing file out as well and name them (Activity + output `duplicate_customizing_entries`, setup output). The check reads + `lng_data` of all languages: after a key moved to another module, `setup + update` may report a customizing line as a duplicate as long as a language + updated later in the same run still holds the old row. The next run applies it. +* "Remove local changes" and the maintenance action "clear" are the same + activity (`RemoveLocalLanguageChanges`): values, locally added keys and + remarks are removed from database and overlay, the shipped state is + re-installed and the plugin languages are re-imported. +* "save_dist" also copies the shipped `.po` of each migrated module into + `/lang_data/`; the filter "conflicts" compares with these + copies. +* "merge" (translation mode only, checked on the server) writes the global + `.lang` file for modules that are not migrated, and the local changes of + migrated modules into their shipped `.po` (new keys also into the `.pot`; + remarks become an additional `# ` line); a read-only global `.lang` file does + not stop the merge into the `.po` and is only reported if unmigrated modules + have local changes. The previous files are copied to + `lang/customizing/` (ignored by git), the written files belong to the web + server user. Values with markup that is not allowed are not taken over. The + overlay keeps serving the merged values until `php cli/setup.php build` and + then `php cli/setup.php update` ran. Afterwards remove the lines of the + merged keys from `lang/customizing/ilias_.lang.local`; otherwise the + next update takes them as local changes again (and a remark appears twice). + +### Setup +`setup update` (and "update" in the administration) reconciles each entry of a +migrated module three-way: L = the local value (overlay or customizing file), +O = the shipped value recorded in the overlay (`original`), S = the new shipped +value. + +The local changes in `lng_data` (e.g. of an upgrade from ILIAS 10/11) are taken +over into the overlay once, while a module has no overlay for the language yet. +Afterwards (recorded in `/lang/taken-over..json`, also +for a module without any local change) and whenever an overlay exists, the +overlay is the only source of local changes and remarks: `lng_data` is no longer +read for the module. Uninstalling a language forgets the record. Plugin modules +are read from `lng_data` as before. + +| Case | Result | +|---|---| +| no L | S | +| L == S | S, no longer a local change | +| L == O (only the shipped value changed) | S | +| otherwise | L stays, `original` becomes S | + +Values from the customizing file always stay local. A key removed from the +shipped `.po` is removed unless it carries a real local change. + +* `setup install`/`update` first run the build (`ShippedLanguageFilesCompiledObjective` + is a precondition of installing and updating the languages), so the Setup + serves the shipped modules from a current build. They therefore need the PHP + extension `gettext` and a writable `artifacts/language/` (including + `build.lock`), like `setup build`. +* A language with an invalid language file (e.g. a shipped `.po` that cannot be + parsed) is skipped and reported; the run goes on. +* **`setup update` aborts with `LanguageDataNotSavedException`** if a module + array written to `lng_modules` cannot be read back (almost always a wrong + collation of `lng_data`/`lng_modules`). +* Warnings are printed for skipped customizing entries, local changes with + markup that is not allowed, overlay directories that are not writable, a + record of taken over local changes that cannot be written (taken over again + by the next update), overlays or records of modules that are not shipped, a + Setup not running as owner of the client data directory, and a missing + client data directory (the overlay is then written by the next update; until + then migrated modules show their shipped values without local changes). + +### Plugins +Plugins cannot contribute a `LanguageFileDirectory` yet. A plugin may ship +`lang/ilias_.po` instead of `lang/ilias_.lang` (the `.po` wins if +both exist): `msgid` is the key without the plugin prefix, entries with a +`msgctxt` are ignored and logged. The values go into the database as before +(no build, no overlay), comments are not stored, plural messages are +stored with their default form (`$n` has no effect for plugins). Values +of a plugin `.po` with markup that is not allowed are cleaned and logged; +values of a plugin `.lang` are only logged and taken over unchanged. + +### Migrating a Module +1. Contribute the module's `ComponentLanguageFileDirectory` in the + component's `.php` (`$contribute[LanguageFileDirectory::class]`); + `--remove-from-lang` refuses to run without it. +2. Generate the `.pot`/`.po` files into the component's `lang/` directory and + remove the module's lines from `lang/ilias_.lang` with + [`convert_module_to_po.php --remove-from-lang`](tools/po-migration/README.md), + then compare the placeholders with the reference language. +3. Run `composer dump-autoload` (or `php cli/setup.php build`) and + `php cli/setup.php update`. + +### Rollback +The database tables are written on every path, so a rollback removes code or +files, it never writes data back. + +* Per module: revert the migration with git (restores the module's `.lang` + lines, removes the contribution and the `.po`/`.pot`, e.g. `git revert` of + the migration commit), run `composer dump-autoload` (rebuilds the component + graph and the build) and `php cli/setup.php update`. Local changes of plural + forms other than the default form are lost, values merged into the `.po` must + be added to the `.lang` files. The module's overlay and its entry in + `taken-over..json` are kept (Setup reports them on every update): + remove both before migrating the module again, otherwise they win over the + changes made in `lng_data` in the meantime. Setup only reports this if at + least one `setup update` runs between the revert and the new migration, + otherwise these changes are lost without notice. +* Per language: not by removing its shipped `.po` - the module then shows + `-identifier-` for that language, never its database rows; revert the module + instead. +* Shipped modules never fall back to the database: `ilLanguage` reads + `lng_data`/`lng_modules` only for modules that are not shipped (see + [Runtime](#runtime)). A fallback for a module or language without build needs + a code change of `ilLanguage::migratedKeysOf()`. +* `artifacts/language/` can be deleted and rebuilt with + `php cli/setup.php build`; until then migrated modules show `-identifier-`. + +## User Settings Contribution +This component contributes a personal "language" setting to the user settings framework +(`ILIAS\Language\UserSettings\Settings`, wired in `Language.php` via +`$contribute[User\Settings\UserSettings::class]`). + +## Activities +This component provides seven [Activities](../Component/src/Activities/README.md) +(`ILIAS\Language\Activities\*`), each wired into `Language.php` (`$internal`/`$provide`/ +`$contribute`) and used by this component's own GUI classes via `maybePerformAs()`. All seven +are `Command`s (they change installation/configuration state; none of them queries data without +side effects). See each class's own `getDescription()` for its authoritative, up-to-date +description rather than a copy here, which would drift out of sync: + +* **InstallLanguage** (`src/Activities/InstallLanguage.php`) - installs/re-applies one or more + languages, depending on the chosen mode. Mode `install` (`MODE_INSTALL`) fully installs a + language that is not installed yet and is a no-op for an installed one. Mode `install_local` + (`MODE_INSTALL_LOCAL`) only applies to already installed languages: it re-applies just the + customizing/local file (`ilias_.lang.local`) on top of the stored data; not installed + languages are skipped (reported as `not_installed_language_keys`). This is intended. +* **UpdateLanguage** (`src/Activities/UpdateLanguage.php`) - refreshes one or more already + installed languages from the current language files. The entries of a module maintained in PO + files are reconciled three-way with its shipped `.po`, see [Setup](#setup) above. +* **UninstallLanguage** (`src/Activities/UninstallLanguage.php`) - uninstalls one or more already + installed languages. +* **RemoveLocalLanguageChanges** (`src/Activities/RemoveLocalLanguageChanges.php`) - removes all + local changes of one or more already installed languages and reinstalls them from the + global/component language files. +* **AddLanguageEntry** (`src/Activities/AddLanguageEntry.php`) - adds one new "adjust language + variables" entry to every currently installed language for which a value was given. +* **SetLanguageDetectionEnabled** (`src/Activities/SetLanguageDetectionEnabled.php`) - enables or + disables the system-wide automatic language detection from the browser's Accept-Language + header. +* **SetLanguageTranslationEnabled** (`src/Activities/SetLanguageTranslationEnabled.php`) - enables + or disables the "page translation" feature for one specific language. + +### Known, accepted deviations from the Activity contract + +* **AddLanguageEntry::perform()** additionally accepts an optional `usr_id` (int) key in its + `$parameters`, even though `getInputDescription()`'s `FormInput` never produces one - it is + supplied out-of-band by `maybePerformAs()` (never spoofable via form data) and recorded as the + author of the local change made to every written entry. A caller that omits it (e.g. a generic + caller following the plain `getInputDescription()` -> `withInput()` -> `getContent()` -> + `perform()` contract) is not rejected; the entries are simply written without an attributed + author. +* **AddLanguageEntry::getInputDescription()** builds per-language field labels via + `$this->lng->txt('meta_l_' . $lang_key)`, which requires the caller to have already called + `loadLanguageModule('meta')` beforehand. This component's own GUI does so already (see + `classes/class.ilObjLanguageExtGUI.php`'s constructor). A caller that skips this gets the raw, + untranslated placeholder (e.g. `-meta_l_de-`) as the label instead of a crash. `getInputDescription()` + deliberately does not load the module itself, since `loadLanguageModule()` merges the module's + keys, unnamespaced, into the shared `$this->lng` state - doing so implicitly here could clobber + keys for an unrelated module if a future generic caller iterates over several Activities sharing + one `Language`/`ilLanguage` instance. +* **AddLanguageEntry::getInputDescription()** resolves the current set of installed languages from + `InstalledLanguageRepository::getInstalledLanguages()` on every call, rather than being a pure, + static description of the input shape. Within one `maybePerformAs()` call, `getInputDescription()` + and `perform()` can therefore observe different snapshots if a language is installed/uninstalled + concurrently between the two calls: a newly installed optional language simply ends up in + `skipped_empty_language_keys`; a newly installed `de`/`en` makes `perform()` reject the whole + request (fail-closed, since no value could have been submitted for it); a language uninstalled + in the meantime has its submitted value silently dropped rather than written or reported. No + case crashes or writes partial data. + +## Further Reading +* [use-language-object.md](use-language-object.md) and [use-language-logging.md](use-language-logging.md) + document the older, still widely used `$lng`/`ilLanguage` access pattern. They predate the + `ILIAS\Language\Language` interface and the Activities described above and have not been updated + to reference them; prefer the "Using the Language Service" section above for new, + component-revision code. +* [`tests/LanguageComponentGraphTest.php`](tests/LanguageComponentGraphTest.php) is a contract test + for this component's `$define`/`$implement`/`$use`/`$contribute`/`$seek`/`$provide`/`$pull`/`$internal` + wiring in `Language.php` and is a good place to check the current, authoritative wiring behaviour + (e.g. singleton guarantees) rather than relying on prose descriptions here. diff --git a/components/ILIAS/Language/ROADMAP.md b/components/ILIAS/Language/ROADMAP.md index 1e394d3d2505..2033ae544032 100755 --- a/components/ILIAS/Language/ROADMAP.md +++ b/components/ILIAS/Language/ROADMAP.md @@ -4,17 +4,40 @@ * Accelerated language update (no more need to introduce background tasks) * Removed language installation in config (only English is installed by Setup) -* Substituted LegacyUI Button by KS Button +* Substituted LegacyUI Button by KS Button in the folder GUI's toolbar (`ilObjLanguageFolderGUI`); + the form action buttons in `ilObjLanguageExtGUI` (`addCommandButton()`) are still legacy `ilPropertyFormGUI` buttons +* Migrated the component to the Component Revision's dependency graph + (`$define`/`$implement`/`$use`/`$contribute`/`$seek`/`$provide`/`$pull`/`$internal` in `Language.php`) + and introduced the Activities pattern: seven `ILIAS\Language\Activities\*` classes now hold this + component's install/update/uninstall/detection/translation-toggle/entry-editing logic, used by the + GUI classes via `maybePerformAs()` - see the README's "Activities" section +* Extracted language-installation state access into `InstalledLanguageRepository` and + `LanguageInstallationManager` (repository pattern), and language-file-directory resolution into + `ILIAS\Language\ComponentTranslation\*` - see the README +* Plural forms for modules maintained in PO files: `txt($a_topic, $n)`, `Plural-Forms` evaluated by + `ILIAS\Language\ComponentTranslation\PluralForms` (pilot modules `tos` and `poll`, see + [Translations Maintained in PO Files](README.md#translations-maintained-in-po-files)) ## Short Term * Fixing PHP 8.2 issues * Analysing use of language variables on test9 * GitHook for preventing duplicate use of same variable_ID in language files +* Migrate the remaining `addCommandButton()` form buttons in `ilObjLanguageExtGUI` to KS Button +* Take the system settings of `SetLanguageDetectionEnabled`/`SetLanguageTranslationEnabled` from the + dependency graph as soon as Administration offers them there; until then `LanguageSettingsLegacyProxy` + reads them from the legacy container +* Let the GUI classes get the Activities by dependency injection once ilCtrl allows it, and drop the + Activities and the `LanguageFileDirectoryManager` from the legacy `$DIC` (`AllModernComponents`) +* Build `lng` in the dependency graph instead of `ilInitialisation::initLanguage()` +* Replace hand-made singular/plural key pairs by plural messages and `txt($a_topic, $n)` together + with the owning components (first proposal: `Poll`) ## Mid Term -* Move LegacyUI Table2GUI to KS Data Table +* Move LegacyUI Table2GUI to KS Data Table - `ilLanguageFolderTable` and `ilLanguageStatisticsTable` + already implement the KS `DataRetrieval` table; only `ilLanguageExtTableGUI` (still `extends ilTable2GUI`, + used by `ilObjLanguageExtGUI::getViewTable()`) remains to be migrated * Remove unused language variables from language files * Improving export and import of customised language files * Improving online translation tool diff --git a/components/ILIAS/Language/classes/Setup/class.ilLanguageMetricsCollectedObjective.php b/components/ILIAS/Language/classes/Setup/class.ilLanguageMetricsCollectedObjective.php index c97bc0bd8b45..da63baed6d60 100755 --- a/components/ILIAS/Language/classes/Setup/class.ilLanguageMetricsCollectedObjective.php +++ b/components/ILIAS/Language/classes/Setup/class.ilLanguageMetricsCollectedObjective.php @@ -61,11 +61,8 @@ protected function collectFrom(Setup\Environment $environment, Setup\Metrics\Sto if (!($db instanceof \ilDBInterface)) { return; } - $this->il_setup_language->setDbHandler($db); - // TODO: Remove this once ilSetupLanguage (or a successor) supports proper - // DI for all methods. - $GLOBALS["ilDB"] = $db; + $this->il_setup_language->setDbHandler($db); $installed_languages = []; $local_languages = $this->il_setup_language->getLocalLanguages(); diff --git a/components/ILIAS/Language/classes/Setup/class.ilLanguageSetupAgent.php b/components/ILIAS/Language/classes/Setup/class.ilLanguageSetupAgent.php index fbda65bbce47..a9be7f366ab5 100755 --- a/components/ILIAS/Language/classes/Setup/class.ilLanguageSetupAgent.php +++ b/components/ILIAS/Language/classes/Setup/class.ilLanguageSetupAgent.php @@ -21,6 +21,9 @@ use ILIAS\Setup; use ILIAS\Refinery; use ILIAS\UI; +use ILIAS\Language\Activities\InstallLanguage; +use ILIAS\Language\Activities\UpdateLanguage; +use ILIAS\Language\Setup\ShippedLanguageFilesCompiledObjective; class ilLanguageSetupAgent implements Setup\Agent { @@ -28,13 +31,19 @@ class ilLanguageSetupAgent implements Setup\Agent protected Refinery\Factory $refinery; protected \ilSetupLanguage $il_setup_language; + protected InstallLanguage $install_language; + protected UpdateLanguage $update_language; public function __construct( Refinery\Factory $refinery, - \ilSetupLanguage $il_setup_language + \ilSetupLanguage $il_setup_language, + InstallLanguage $install_language, + UpdateLanguage $update_language ) { $this->refinery = $refinery; $this->il_setup_language = $il_setup_language; + $this->install_language = $install_language; + $this->update_language = $update_language; } /** @@ -61,7 +70,11 @@ public function getInstallObjective(?Setup\Config $config = null): Setup\Objecti return new Setup\ObjectiveCollection( "Complete objectives from components/ILIAS/Language", false, - new ilLanguagesInstalledAndUpdatedObjective($this->il_setup_language), + new ilLanguagesInstalledAndUpdatedObjective( + $this->il_setup_language, + $this->install_language, + $this->update_language + ), new ilDefaultLanguageSetObjective() ); } @@ -74,16 +87,23 @@ public function getUpdateObjective(?Setup\Config $config = null): Setup\Objectiv return new Setup\ObjectiveCollection( "Complete objectives from components/ILIAS/Language", false, - new ilLanguagesInstalledAndUpdatedObjective($this->il_setup_language), + new ilLanguagesInstalledAndUpdatedObjective( + $this->il_setup_language, + $this->install_language, + $this->update_language + ), ); } /** - * @inheritdoc + * The directories come from the component graph, via the LanguageFileDirectoryManager of ilSetupLanguage. */ public function getBuildObjective(): Setup\Objective { - return new Setup\Objective\NullObjective(); + return new ShippedLanguageFilesCompiledObjective( + $this->il_setup_language->getLanguageFileDirectoryManager(), + dirname(__DIR__, 5) + ); } /** diff --git a/components/ILIAS/Language/classes/Setup/class.ilLanguagesInstalledAndUpdatedObjective.php b/components/ILIAS/Language/classes/Setup/class.ilLanguagesInstalledAndUpdatedObjective.php index f85796340a43..a424eaf6aa86 100755 --- a/components/ILIAS/Language/classes/Setup/class.ilLanguagesInstalledAndUpdatedObjective.php +++ b/components/ILIAS/Language/classes/Setup/class.ilLanguagesInstalledAndUpdatedObjective.php @@ -19,24 +19,57 @@ declare(strict_types=1); use ILIAS\Setup; +use ILIAS\Language\ComponentTranslation\MigratedLanguageFileSync; +use ILIAS\Language\ComponentTranslation\PlainLogText; +use ILIAS\Language\ComponentTranslation\TranslationMarkupPolicy; +use ILIAS\Language\Activities\InstallLanguage; +use ILIAS\Language\Activities\UpdateLanguage; +use ILIAS\Language\Setup\ShippedLanguageFilesCompiledObjective; class ilLanguagesInstalledAndUpdatedObjective extends ilLanguageObjective { protected \ilSetupLanguage $il_setup_language; + protected InstallLanguage $install_language; + protected UpdateLanguage $update_language; + /** @var list|null */ + private ?array $install_languages = null; + /** + * @param InstallLanguage|null $install_language null only for callers constructed deep inside the Setup tree + * (plugin objectives); a Setup-only instance is then built here instead of reading $GLOBALS['DIC'] + * @param UpdateLanguage|null $update_language see $install_language + */ public function __construct( - \ilSetupLanguage $il_setup_language + \ilSetupLanguage $il_setup_language, + ?InstallLanguage $install_language = null, + ?UpdateLanguage $update_language = null ) { - parent::__construct(); $this->il_setup_language = $il_setup_language; + $this->install_language = $install_language ?? InstallLanguage::forSetup($il_setup_language); + $this->update_language = $update_language ?? UpdateLanguage::forSetup($il_setup_language); } /** - * @inheritDoc + * The directory configuration is part of the hash: with a class-only hash Setup could keep the + * default-directory instance, which refreshes languages without the component-contributed modules. */ public function getHash(): string { - return hash("sha256", self::class); + $directories = []; + foreach ($this->il_setup_language->getLanguageFileDirectoryManager()->getAllDirectories() as $directory) { + $directories[] = implode('|', [ + $directory::class, + $directory->getPrefix(), + $directory->getPath(), + $directory->getSuffix(), + ]); + } + + return hash("sha256", implode("\n", [ + self::class, + $this->il_setup_language->usesDefaultLanguageFileDirectories() ? 'default-directories' : 'configured-directories', + ...$directories, + ])); } /** @@ -44,15 +77,7 @@ public function getHash(): string */ protected function getInstallLanguages(): array { - return $this->il_setup_language->getInstalledLanguages() ?: ['en']; - } - - /** - * Return installed local languages - */ - protected function getInstallLocalLanguages(): array - { - return $this->il_setup_language->getInstalledLocalLanguages(); + return $this->install_languages ??= $this->il_setup_language->getInstalledLanguages() ?: ['en']; } /** @@ -60,7 +85,11 @@ protected function getInstallLocalLanguages(): array */ public function getLabel(): string { - return "Install/Update languages " . implode(", ", $this->getInstallLanguages()); + // No database access here: the Setup CLI calls this before achieve(). + if ($this->install_languages === null) { + return "Install/Update languages"; + } + return "Install/Update languages " . implode(", ", $this->install_languages); } /** @@ -76,9 +105,16 @@ public function isNotable(): bool */ public function getPreconditions(Setup\Environment $environment): array { - return [ - new ilDatabaseInitializedObjective() - ]; + $preconditions = [new ilDatabaseInitializedObjective()]; + // with the default directories the build would serve no module at all + if (!$this->il_setup_language->usesDefaultLanguageFileDirectories()) { + $preconditions[] = new ShippedLanguageFilesCompiledObjective( + $this->il_setup_language->getLanguageFileDirectoryManager(), + dirname(__DIR__, 5) + ); + } + + return $preconditions; } /** @@ -86,22 +122,298 @@ public function getPreconditions(Setup\Environment $environment): array */ public function achieve(Setup\Environment $environment): Setup\Environment { - $db = $environment->getResource(Setup\Environment::RESOURCE_DATABASE); + // Must come first: getInstallLanguages() reads from the database too. + $this->useSetupDatabase($environment); + $this->useSetupClientDataDir($environment); + + $language_keys = []; + $invalid_language_keys = []; + foreach ($this->getInstallLanguages() as $language_key) { + if ($this->il_setup_language->checkLanguageForInstallation($language_key)) { + $language_keys[] = $language_key; + } else { + $invalid_language_keys[] = $language_key; + } + } + if ($invalid_language_keys !== []) { + // an invalid language file only skips that language, the Setup run goes on + $this->inform( + $environment, + 'Skipped languages with invalid language files (left unchanged): ' + . implode(', ', $invalid_language_keys) + ); + } + + $this->informAboutMissingClientDataDirectory($environment, $language_keys); + $this->informAboutUnwritableOverlayDirectories($environment, $language_keys); + $this->informAboutUnwrittenOverlays($environment, $this->installLanguages($language_keys)); + $this->informAboutSkippedInvalidMarkupEntries($environment); + $this->informAboutSkippedDuplicateEntries($environment); + foreach ($this->il_setup_language->getSkippedUnreadableOverlays() as $language_key => $modules) { + $this->inform($environment, PlainLogText::of( + 'WARNING: The overlay (local changes) of language ' . $language_key . ' cannot be read for the modules ' + . implode(', ', $modules) . ': they were left unchanged, their local changes are only served again ' + . 'once the overlay below /lang is repaired. Until then their rollback copy in ' + . 'lng_data/lng_modules is incomplete.' + )); + } + $this->informAboutOverlaysOfUnshippedModules($environment); + $this->informAboutUnrecordedTakenOverModules($environment); + $this->informAboutInvalidMarkupInLocalChanges($environment, $language_keys); + + return $environment; + } + + /** + * Customizing entries with disallowed markup are not applied; the languages are installed regardless. + */ + protected function informAboutSkippedInvalidMarkupEntries(Setup\Environment $environment): void + { + foreach ($this->il_setup_language->getSkippedInvalidMarkupEntries() as $language_key => $entries) { + $this->inform( + $environment, + PlainLogText::of( + 'WARNING: Customizing entries of language ' . $language_key . ' were not applied, their ' + . 'value contains HTML that is not allowed in language texts: ' + . PlainLogText::keyList(array_map('strval', array_keys($entries))) + ) + ); + } + } + + /** A warning only: the languages are installed regardless. */ + protected function informAboutSkippedDuplicateEntries(Setup\Environment $environment): void + { + foreach ($this->il_setup_language->getSkippedDuplicateEntries() as $language_key => $entries) { + $this->inform( + $environment, + PlainLogText::of( + 'WARNING: Customizing entries of language ' . $language_key . ' were not applied, their ' + . 'identifier already exists in another module or in another spelling: ' + . PlainLogText::keyList(array_map('strval', array_keys($entries))) + ) + ); + } + } + + protected function informAboutOverlaysOfUnshippedModules(Setup\Environment $environment): void + { + foreach ($this->il_setup_language->getOverlaysOfUnshippedModules() as $language_key => $modules) { + $this->inform($environment, PlainLogText::of( + 'WARNING: The modules ' . implode(', ', $modules) . ' have no shipped .po for language ' + . $language_key . ', but an overlay below /lang or an entry in /lang/taken-over.' . $language_key . '.json. Remove the overlay directory /lang//' . $language_key . ' and the entry before the module is shipped again (or ' + . 'if it no longer exists) - otherwise they win over the local changes in lng_data.' + )); + } + } + + protected function informAboutUnrecordedTakenOverModules(Setup\Environment $environment): void + { + foreach ($this->il_setup_language->getUnrecordedTakenOverModules() as $language_key => $modules) { + $this->inform($environment, PlainLogText::of( + 'WARNING: Could not record in /lang/taken-over.' . $language_key . '.json that the ' + . 'local changes of language ' . $language_key . ' in lng_data were taken over for the modules ' + . implode(', ', $modules) . ' (see the PHP error log for details). They are taken over again by the ' + . 'next "setup update" - /lang (including .locks and the record file) must be ' + . 'writable for the user running Setup.' + )); + } + } + + /** + * Local changes written before the markup check existed are only reported, never changed: + * that is the administrator's decision. + * + * @param list $language_keys + */ + protected function informAboutInvalidMarkupInLocalChanges(Setup\Environment $environment, array $language_keys): void + { + $policy = new TranslationMarkupPolicy(); + $manager = $this->il_setup_language->getLanguageFileDirectoryManager(); + $client_data_dir = $this->il_setup_language->getClientDataDir(); + foreach ($language_keys as $language_key) { + $values = []; + try { + // a module with an overlay, or whose lng_data was taken over, is checked in its overlay only + $overlay_only = array_fill_keys(MigratedLanguageFileSync::modulesWithLocalChangesTakenOver($client_data_dir, $language_key), true); + foreach ($manager->getDirectories() as $directory) { + $module = $directory->getPrefix(); + if (MigratedLanguageFileSync::hasOverlay($manager, $language_key, $module, $client_data_dir)) { + $overlay_only[$module] = true; + } + foreach (MigratedLanguageFileSync::loadLocalChanges($manager, $language_key, $module, $client_data_dir) ?? [] as $identifier => $entry) { + $values[$module . '#:#' . $identifier] = $entry['value']; + } + } + foreach ($this->il_setup_language->getLocalChanges($language_key) as $module => $entries) { + if (isset($overlay_only[$module])) { + continue; + } + foreach ($entries as $identifier => $value) { + $values[$module . '#:#' . $identifier] ??= (string) $value; + } + } + } catch (\Throwable $t) { + error_log(PlainLogText::of(sprintf( + 'Could not check the local changes of language "%s" for markup: %s', + $language_key, + $t->getMessage() + ))); + continue; + } + + $keys = array_map('strval', array_keys($policy->findInvalidValues($values))); + if ($keys === []) { + continue; + } + error_log(PlainLogText::of(sprintf( + 'Local changes of language "%s" contain markup that is not allowed: %s', + $language_key, + implode(', ', $keys) + ))); + $this->inform( + $environment, + PlainLogText::of( + 'WARNING: Local changes of language ' . $language_key . ' contain HTML that is not allowed ' + . 'in language texts (left unchanged - please correct them in the administration): ' + . PlainLogText::keyList($keys) + ) + ); + } + } + + /** + * Typically during "setup install", before the client directory exists: the overlay of local changes + * cannot be written, the web serves the shipped values (the build) until the next "setup update". + * + * @param list $language_keys + */ + protected function informAboutMissingClientDataDirectory(Setup\Environment $environment, array $language_keys): void + { + if ( + $language_keys === [] + || $this->il_setup_language->getClientDataDir() !== null + || !$this->il_setup_language->hasMigratedModules($language_keys) + ) { + return; + } + + $this->inform( + $environment, + 'WARNING: The client data directory is not known or does not exist yet, so the local changes ' + . '(e.g. lang/*.lang.local) of modules maintained in PO files are not written to their overlay in ' + . 'this run - these modules show their shipped texts without local changes until then. Run "setup ' + . 'update" (as the web server user) once the client data directory exists.' + ); + } + + /** + * Checked before writing. Does not abort: the database is written regardless, the files are + * repaired by the next run with sufficient permissions. + * + * @param list $language_keys + */ + protected function informAboutUnwritableOverlayDirectories(Setup\Environment $environment, array $language_keys): void + { + $unwritable_directories = $this->il_setup_language->findUnwritableOverlayDirectories($language_keys); + if ($unwritable_directories !== []) { + $this->inform( + $environment, + 'WARNING: The PO/MO language files of modules maintained in PO files cannot be written to ' + . implode(', ', $unwritable_directories) . ' (not writable, or a file occupies the ' + . 'directory\'s place). The languages are still installed/updated in the database, but these ' + . 'modules keep showing outdated texts. Setup must be run as the web server user (the owner ' + . 'of the client data directory) - re-run "setup update" as that user to repair the files.' + ); + } + + $this->informIfNotRunAsClientDataDirectoryOwner($environment, $language_keys); + } + + /** + * Writable for Setup is not enough: files created by another user (typically root) cannot be + * replaced by the web server later. The owner of the client data directory counts as web server user. + * + * @param list $language_keys + */ + protected function informIfNotRunAsClientDataDirectoryOwner(Setup\Environment $environment, array $language_keys = []): void + { + $client_data_dir = $this->il_setup_language->getClientDataDir(); + if ($client_data_dir === null || !function_exists('posix_geteuid')) { + return; + } + $owner = @fileowner($client_data_dir); + $current_user = posix_geteuid(); + if ($owner === false || ($owner === $current_user && $current_user !== 0)) { + return; + } + if (!$this->il_setup_language->hasMigratedModules($language_keys)) { + return; + } + + $overlay_root = rtrim($client_data_dir, '/') . '/lang'; + if ($owner === 0) { + $this->inform( + $environment, + sprintf( + 'WARNING: Setup runs as user id %d, and the client data directory %s belongs to root. ' + . 'Running Setup as root is not supported: the web server cannot replace the PO/MO ' + . 'language files and directories of modules maintained in PO files that this run ' + . 'creates. Fix: run "chown -R %s" after this run, and run Setup ' + . 'as the web server user from now on.', + $current_user, + $client_data_dir, + $overlay_root + ) + ); + return; + } - // TODO: Remove this once ilSetupLanguage (or a successor) supports proper - // DI for all methods. - $db_tmp = $GLOBALS["ilDB"]; - $GLOBALS["ilDB"] = $db; + $owner_info = function_exists('posix_getpwuid') ? @posix_getpwuid($owner) : false; + $owner_name = is_array($owner_info) ? (string) $owner_info['name'] : (string) $owner; + $unwritable_for_owner = $this->il_setup_language->findUnwritableOverlayDirectories($language_keys, $owner); - $this->il_setup_language->setDbHandler($db); - $this->il_setup_language->installLanguages( - $this->getInstallLanguages(), - $this->getInstallLocalLanguages() + $this->inform( + $environment, + sprintf( + 'WARNING: Setup runs as user id %d, but the client data directory %s belongs to user id %d. ' + . 'Running Setup as another user than the web server user (the owner of the client data ' + . 'directory) is not supported%s: the PO/MO language files and directories of modules ' + . 'maintained in PO files that this run creates belong to user id %d and cannot be ' + . 'replaced by the web server later on.%s Fix: run "chown -R %s %s" after this run, and ' + . 'run Setup as user %s from now on.', + $current_user, + $client_data_dir, + $owner, + $current_user === 0 ? ' (this includes root)' : '', + $current_user, + $unwritable_for_owner === [] + ? '' + : ' Already not writable for user id ' . $owner . ': ' . implode(', ', $unwritable_for_owner) . '.', + $owner_name, + $overlay_root, + $owner_name + ) ); + } - $GLOBALS["ilDB"] = $db_tmp; + /** + * @param list $language_keys languages whose PO/MO overlay could not be written + */ + protected function informAboutUnwrittenOverlays(Setup\Environment $environment, array $language_keys): void + { + if ($language_keys === []) { + return; + } - return $environment; + $this->inform( + $environment, + 'WARNING: The PO/MO language files of modules maintained in PO files could not be written for ' + . 'the languages ' . implode(', ', $language_keys) . ' (see the PHP error log for details). ' + . 'Setup must be run as the web server user - re-run "setup update" as that user.' + ); } /** @@ -109,6 +421,91 @@ public function achieve(Setup\Environment $environment): Setup\Environment */ public function isApplicable(Setup\Environment $environment): bool { + // getLabel() is shown between isApplicable() and achieve() and lists the languages. + if ($environment->getResource(Setup\Environment::RESOURCE_DATABASE) instanceof \ilDBInterface) { + $this->useSetupDatabase($environment); + $this->getInstallLanguages(); + } + return true; } + + /** + * Must run before anything is read from ilSetupLanguage, so that the language list comes from the Setup database. + */ + protected function useSetupDatabase(Setup\Environment $environment): void + { + $this->il_setup_language->setDbHandler( + $environment->getResource(Setup\Environment::RESOURCE_DATABASE) + ); + } + + /** + * Taken from the Setup environment, which knows it before ilias.ini.php is written; + * otherwise ilSetupLanguage falls back to ilias.ini.php. + */ + protected function useSetupClientDataDir(Setup\Environment $environment): void + { + $ini = $environment->getResource(Setup\Environment::RESOURCE_ILIAS_INI); + $client_id = $environment->getResource(Setup\Environment::RESOURCE_CLIENT_ID); + if (!$ini instanceof ilIniFile || $client_id === null) { + return; + } + + $client_data_dir = \ILIAS\Language\ComponentTranslation\MigratedLanguageFilePaths::fromDataDirAndClientId( + (string) $ini->readVariable('clients', 'datadir'), + (string) $client_id + ); + if ($client_data_dir !== null) { + $this->il_setup_language->setClientDataDir($client_data_dir); + } + } + + protected function inform(Setup\Environment $environment, string $message): void + { + $io = $environment->getResource(Setup\Environment::RESOURCE_ADMIN_INTERACTION); + if ($io instanceof Setup\AdminInteraction) { + $io->inform($message); + return; + } + error_log($message); + } + + /** + * Installs missing languages and refreshes installed ones on every run, so that changed language files take effect. + * + * Both Activities get the full list and ignore keys that do not apply to them; UpdateLanguage also + * runs on just-installed keys, which is harmless. + * + * An instance with only the default directories never refreshes: that would delete the lng_data + * rows of component-contributed modules. + * + * @param list $language_keys + * @return list the languages whose PO/MO overlay could not be written (see + * InstallLanguage/UpdateLanguage, "overlay_write_failed_language_keys") + */ + protected function installLanguages(array $language_keys): array + { + if ($language_keys === []) { + return []; + } + + $install_result = $this->install_language->perform([ + 'language_keys' => $language_keys, + 'mode' => InstallLanguage::MODE_INSTALL, + ]); + $overlay_write_failed = $install_result['overlay_write_failed_language_keys'] ?? []; + + if (!$this->il_setup_language->usesDefaultLanguageFileDirectories()) { + $update_result = $this->update_language->perform([ + 'language_keys' => $language_keys, + ]); + $overlay_write_failed = array_merge( + $overlay_write_failed, + $update_result['overlay_write_failed_language_keys'] ?? [] + ); + } + + return array_values(array_unique($overlay_write_failed)); + } } diff --git a/components/ILIAS/Language/classes/Setup/class.ilLanguagesUpdatedObjective.php b/components/ILIAS/Language/classes/Setup/class.ilLanguagesUpdatedObjective.php deleted file mode 100755 index 629698eaa50b..000000000000 --- a/components/ILIAS/Language/classes/Setup/class.ilLanguagesUpdatedObjective.php +++ /dev/null @@ -1,103 +0,0 @@ -il_setup_language = $il_setup_language; - } - - /** - * @inheritDoc - */ - public function getHash(): string - { - return hash("sha256", self::class); - } - - /** - * Return installed languages as string - */ - protected function getInstalledLanguagesAsString(): string - { - return implode(", ", $this->il_setup_language->getInstalledLanguages()); - } - - /** - * @inheritDoc - */ - public function getLabel(): string - { - return "Update languages " . $this->getInstalledLanguagesAsString(); - } - - /** - * @inheritDoc - */ - public function isNotable(): bool - { - return true; - } - - /** - * @inheritDoc - */ - public function getPreconditions(Setup\Environment $environment): array - { - return []; - } - - /** - * @inheritDoc - */ - public function achieve(Setup\Environment $environment): Setup\Environment - { - $db = $environment->getResource(Setup\Environment::RESOURCE_DATABASE); - - // TODO: Remove this once ilSetupLanguage (or a successor) supports proper - //// DI for all methods. - $db_tmp = $GLOBALS["ilDB"]; - $GLOBALS["ilDB"] = $db; - - $this->il_setup_language->setDbHandler($db); - $this->il_setup_language->installLanguages( - $this->il_setup_language->getInstalledLanguages(), - $this->il_setup_language->getLocalLanguages() - ); - - $GLOBALS["ilDB"] = $db_tmp; - - return $environment; - } - - /** - * @inheritDoc - */ - public function isApplicable(Setup\Environment $environment): bool - { - return true; - } -} diff --git a/components/ILIAS/Language/classes/Setup/class.ilSetupLanguage.php b/components/ILIAS/Language/classes/Setup/class.ilSetupLanguage.php index eb7fc44c3056..0b0231506b97 100755 --- a/components/ILIAS/Language/classes/Setup/class.ilSetupLanguage.php +++ b/components/ILIAS/Language/classes/Setup/class.ilSetupLanguage.php @@ -18,6 +18,20 @@ declare(strict_types=1); +use ILIAS\Language\ComponentTranslation\LanguageFileDirectoryManager; +use ILIAS\Language\ComponentTranslation\MainLanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\CustomizingLanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\MigratedLanguageFilePaths; +use ILIAS\Language\ComponentTranslation\MigratedLanguageFileSync; +use ILIAS\Language\LanguageIdentifier; +use ILIAS\Language\Setup\InstalledLanguageRepository; +use ILIAS\Language\Setup\InstalledLanguageDatabaseRepository; +use ILIAS\Language\Setup\LanguageInstallationManager; +use ILIAS\Language\Setup\TranslationCache; +use ILIAS\Language\Setup\NullTranslationCache; +use ILIAS\Language\Setup\FixedInstallationRoot; +use ILIAS\Logging\Logger\LoggerInterface; + /** * language handling for setup * @@ -32,29 +46,126 @@ * @author Peter Gabriel * @version $Id$ * - * - * @todo The DATE field is not set correctly on changes of a language (update, install, your stable). - * The format functions do not belong in class.Language. Those are also applicable elsewhere. - * Therefore, they would be better placed in class.Format - * @todo This somehow needs to be reconciled with the base class and most probably be factored - * into two classes, one for management, one for retrieval. + * Language implementation for Setup (txt() before the runtime DIC exists). Installation is delegated to + * \ILIAS\Language\Setup\InstalledLanguageRepository (read) and LanguageInstallationManager (write); + * kept as entry point for callers not wired through Language.php. */ class ilSetupLanguage extends ilLanguage { + private string $absolute_path; public array $text; public string $lang_default = "en"; - public string $lang_path; public string $lang_key; public string $separator = "#:#"; public string $comment_separator = "###"; - protected ilDBInterface $db; + protected ?ilDBInterface $db = null; + private ?string $client_data_dir = null; + private readonly bool $uses_default_language_file_directories; + private readonly LanguageFileDirectoryManager $language_file_directory_manager; + private ?LanguageInstallationManager $manager = null; + private ?ilDBInterface $manager_db = null; - public function __construct(string $a_lang_key) - { + /** + * @param LanguageFileDirectoryManager|null $language_file_directory_manager directories contributed through the + * component graph; without it only main lang/ and customizing are known (usesDefaultLanguageFileDirectories()) + * @param ilDBInterface|null $connection none for callers outside the component graph + * @param LoggerInterface|null $logger for the installation manager's warnings; none in the Setup (PHP error log then) + * @param (\Closure():?string)|null $client_data_dir_resolver without it, MigratedLanguageFilePaths::resolveClientDataDir() is used + */ + public function __construct( + string $a_lang_key, + ?LanguageFileDirectoryManager $language_file_directory_manager = null, + private readonly ?ilDBInterface $connection = null, + private readonly TranslationCache $translation_cache = new NullTranslationCache(), + private readonly ?LoggerInterface $logger = null, + private readonly ?\Closure $client_data_dir_resolver = null, + ) { $this->lang_key = $a_lang_key ?: $this->lang_default; - $il_absolute_path = realpath(__DIR__ . "/../../../../../"); - $this->lang_path = $il_absolute_path . "/lang"; - $this->cust_lang_path = $il_absolute_path . "/lang/customizing"; + $this->absolute_path = (string) realpath(__DIR__ . "/../../../../../"); + $this->uses_default_language_file_directories = $language_file_directory_manager === null; + $this->language_file_directory_manager = $language_file_directory_manager ?? new LanguageFileDirectoryManager( + new CustomizingLanguageFileDirectory(), + new MainLanguageFileDirectory() + ); + $this->cust_lang_path = $this->absolute_path . "/lang/customizing"; + $this->lang_path = $this->absolute_path . "/lang"; + } + + /** + * Resolved per call, so a later setDbHandler() takes effect. Order: + * setDbHandler(), constructor connection, $GLOBALS['ilDB']. + */ + private function db(): ?ilDBInterface + { + return $this->db ?? $this->connection ?? $GLOBALS["ilDB"] ?? null; + } + + /** + * Without a database only the file-based methods work. + */ + private function repository(): InstalledLanguageRepository + { + return new InstalledLanguageDatabaseRepository( + $this->db(), + $this->language_file_directory_manager, + new FixedInstallationRoot($this->absolute_path) + ); + } + + /** + * Kept across calls because the manager collects getSkippedInvalidMarkupEntries() over a run; + * rebuilt only when db() changes. + */ + private function manager(): LanguageInstallationManager + { + $db = $this->db() ?? throw new LogicException("No database available for " . self::class . "."); + if ($this->manager === null || $this->manager_db !== $db) { + $this->manager_db = $db; + $this->manager = new LanguageInstallationManager( + $db, + $this->language_file_directory_manager, + $this->absolute_path, + $this->repository(), + null, + $this->translation_cache, + fn(): ?string => $this->getClientDataDir(), + $this->logger + ); + } + return $this->manager; + } + + /** + * `null` resets to the resolver of the constructor. + */ + public function setClientDataDir(?string $client_data_dir): void + { + $this->client_data_dir = $client_data_dir; + } + + public function getClientDataDir(): ?string + { + if ($this->client_data_dir !== null) { + return $this->client_data_dir; + } + if ($this->client_data_dir_resolver !== null) { + return ($this->client_data_dir_resolver)(); + } + return MigratedLanguageFilePaths::resolveClientDataDir($this->absolute_path); + } + + /** + * Such an instance (e.g. `new ilSetupLanguage('en')` in plugin Setup Objectives) must not refresh an + * installed language: that would drop the lng_data rows of every component-contributed module. + */ + public function usesDefaultLanguageFileDirectories(): bool + { + return $this->uses_default_language_file_directories; + } + + public function getLanguageFileDirectoryManager(): LanguageFileDirectoryManager + { + return $this->language_file_directory_manager; } /** @@ -62,12 +173,18 @@ public function __construct(string $a_lang_key) * * if the topic is not in the list, the topic itself with "-" will be returned * - * $a_topic topic + * $a_topic topic; the module of a LanguageIdentifier and $n have no effect for it in Setup */ - public function txt(string $a_topic, string $a_default_lang_fallback_mod = ''): string + public function txt(string|LanguageIdentifier $a_topic, ?int $n = null): string { + /** @var ilLogger $log */ global $log; + if ($a_topic instanceof LanguageIdentifier) { + $a_topic = (string) $a_topic->value; + } elseif ($n !== null) { + return parent::txt($a_topic, $n); + } if (empty($a_topic)) { return ""; } @@ -97,254 +214,188 @@ public function txt(string $a_topic, string $a_default_lang_fallback_mod = ''): * * @return array|bool */ - public function installLanguages(array $a_lang_keys, array $a_local_keys) + public function installLanguages(array $a_lang_keys, array $a_local_keys = []) { - global $ilDB; - if (empty($a_lang_keys)) { - $a_lang_keys = array(); + $a_lang_keys = []; } - if (empty($a_local_keys)) { - $a_local_keys = array(); - } - - $err_lang = array(); - - $db_langs = $this->getAvailableLanguages(); - - foreach ($a_lang_keys as $lang_key) { - if ($this->checkLanguage($lang_key)) { - $this->flushLanguage($lang_key, "keep_local"); - $this->insertLanguage($lang_key); - - if (in_array($lang_key, $a_local_keys, true) && is_dir($this->cust_lang_path)) { - if ($this->checkLanguage($lang_key, "local")) { - $this->insertLanguage($lang_key, "local"); - } else { - $err_lang[] = $lang_key; - } - } - - // register language first time install - if (!array_key_exists($lang_key, $db_langs)) { - if (in_array($lang_key, $a_local_keys, true)) { - $itype = "installed_local"; - } else { - $itype = "installed"; - } - $lid = $ilDB->nextId("object_data"); - $query = "INSERT INTO object_data " . - "(obj_id,type,title,description,owner,create_date,last_update) " . - "VALUES " . - "(" . - $ilDB->quote($lid, "integer") . "," . - $ilDB->quote("lng", "text") . "," . - $ilDB->quote($lang_key, "text") . "," . - $ilDB->quote($itype, "text") . "," . - $ilDB->quote("-1", "integer") . "," . - $ilDB->now() . "," . - $ilDB->now() . - ")"; - $ilDB->manipulate($query); - } - } else { - $err_lang[] = $lang_key; - } - } + return $this->manager()->installLanguages($a_lang_keys, $a_local_keys); + } - foreach ($db_langs as $key => $val) { - if (!in_array($key, $err_lang, true)) { - if (in_array($key, $a_lang_keys, true)) { - if (in_array($key, $a_local_keys, true)) { - $ld = "installed_local"; - } else { - $ld = "installed"; - } - $query = "UPDATE object_data SET " . - "description = " . $ilDB->quote($ld, "text") . ", " . - "last_update = " . $ilDB->quote(gmdate("Y-m-d H:i:s"), "timestamp") . " " . - "WHERE obj_id = " . $ilDB->quote($val["obj_id"], "integer") . " " . - "AND type = " . $ilDB->quote("lng", "text"); - $ilDB->manipulate($query); - } else { - $this->flushLanguage($key, "all"); - - if (strpos($val["status"], "installed") === 0) { - $query = "UPDATE object_data SET " . - "description = " . $ilDB->quote("not_installed", "text") . ", " . - "last_update = " . $ilDB->quote(gmdate("Y-m-d H:i:s"), "timestamp") . " " . - "WHERE obj_id = " . $ilDB->quote($val["obj_id"], "integer") . " " . - "AND type = " . $ilDB->quote("lng", "text"); - $ilDB->manipulate($query); - } - } - } - } + /** + * Single place for the object_data row ("installed" vs. "installed_local"), also used by InstallLanguage::perform(). + * + * @param array $known_languages result of getAvailableLanguages()/getAvailableLanguagesForInstallation() + * @param list $local_language_keys result of getLocalLanguages() + */ + public function registerInstalledLanguage( + string $lang_key, + array $known_languages, + array $local_language_keys + ): void { + $this->manager()->registerInstalledLanguage($lang_key, $known_languages, $local_language_keys); + } - return ($err_lang) ?: true; + public function getAvailableLanguagesForInstallation(): array + { + return $this->repository()->getAvailableLanguages(); } /** - * get already installed languages (in db) + * @return list the keys with a main language file */ - public function getInstalledLanguages(): array + public function getInstallableLanguagesForInstallation(): array { - global $ilDB; - - $arr = []; - if ($ilDB instanceof ilDBInterface) { - $query = "SELECT * FROM object_data " . - "WHERE type = " . $ilDB->quote("lng", "text") . " " . - "AND " . $ilDB->like("description", "text", "installed%"); - $r = $ilDB->query($query); + return array_values($this->repository()->getInstallableLanguages()); + } - while ($row = $ilDB->fetchObject($r)) { - $arr[] = $row->title; - } - } - return $arr; + public function checkLanguageForInstallation(string $lang_key): bool + { + return $this->repository()->checkLanguage($lang_key); } /** - * get already installed local languages (in db) + * Unlike checkLanguageForInstallation(), a missing local file is not acceptable here. */ - public function getInstalledLocalLanguages(): array + public function checkLocalLanguageFileForInstallation(string $lang_key): bool { - global $ilDB; + return $this->repository()->checkLocalLanguageFile($lang_key); + } - $arr = []; - if ($ilDB instanceof ilDBInterface) { - $query = "SELECT * FROM object_data " . - "WHERE type = " . $ilDB->quote("lng", "text") . " " . - "AND description = " . $ilDB->quote("installed_local", "text"); - $r = $ilDB->query($query); + public function flushLanguageForInstallation(string $lang_key): void + { + $this->manager()->flushLanguageForInstallation($lang_key); + } - while ($row = $ilDB->fetchObject($r)) { - $arr[] = $row->title; - } - } - return $arr; + public function flushLanguageForUninstallation(string $lang_key): void + { + $this->manager()->flushLanguageForUninstallation($lang_key); } /** - * get already registered languages (in db) + * @return array>> */ - protected function getAvailableLanguages(): array + public function getSkippedInvalidMarkupEntries(): array { - global $ilDB; - - $arr = array(); - - $query = "SELECT * FROM object_data " . - "WHERE type = " . $ilDB->quote("lng", "text"); - $r = $ilDB->query($query); - - while ($row = $ilDB->fetchObject($r)) { - $arr[$row->title]["obj_id"] = $row->obj_id; - $arr[$row->title]["status"] = $row->description; - } - - return $arr; + return $this->manager?->getSkippedInvalidMarkupEntries() ?? []; } /** - * validate the logical structure of a lang-file - * - * This function checks if a lang-file of a given lang_key exists, - * the file has a header, and each lang-entry consists of exactly - * three elements (module, identifier, value). - * - * $a_lang_key international language key (2 digits) - * $scope empty (global) or "local" - * $info_text message about results of check OR "1" if all checks successfully passed + * @return array>> see LanguageInstallationManager::getSkippedDuplicateEntries() */ - protected function checkLanguage(string $a_lang_key, string $scope = ""): bool - { - $scopeExtension = ""; - if (!empty($scope)) { - if ($scope === "global") { - $scope = ""; - } else { - $scopeExtension = "." . $scope; - } - } - - $path = $this->lang_path; - if ($scope === "local") { - $path = $this->cust_lang_path; - } - - $tmpPath = getcwd(); - chdir($path); - - // compute lang-file name format - $lang_file = "ilias_" . $a_lang_key . ".lang" . $scopeExtension; + public function getSkippedDuplicateEntries(): array + { + return $this->manager?->getSkippedDuplicateEntries() ?? []; + } - // file check - if (!is_file($lang_file)) { - chdir($tmpPath); - return false; - } + /** + * @return array> see LanguageInstallationManager::getSkippedUnreadableOverlays() + */ + public function getSkippedUnreadableOverlays(): array + { + return $this->manager?->getSkippedUnreadableOverlays() ?? []; + } - // header check - if (!$content = $this->cut_header(file($lang_file))) { - chdir($tmpPath); - return false; + /** + * @return array> + */ + public function getOverlaysOfUnshippedModules(): array + { + // without the contributed directories every overlay looks unshipped + if ($this->uses_default_language_file_directories) { + return []; } - // check (counting) elements of each lang-entry - foreach ($content as $key => $val) { - $separated = explode($this->separator, trim($val)); - $num = count($separated); - - if ($num !== 3) { - chdir($tmpPath); - return false; - } - } + return $this->manager?->getOverlaysOfUnshippedModules() ?? []; + } - chdir($tmpPath); + /** + * @return array> + */ + public function getUnrecordedTakenOverModules(): array + { + return $this->manager?->getUnrecordedTakenOverModules() ?? []; + } - // no error occured - return true; + /** + * @return list the migrated modules whose overlay could not be written + */ + public function insertLanguageForInstallation(string $lang_key): array + { + return $this->manager()->insertLanguageForInstallation($lang_key); } /** - * Remove *.lang header information from '$content'. + * See LanguageInstallationManager::insertLanguageForApplyingLocalChanges(). * - * This function seeks for a special keyword where the language information starts. - * If found it returns the plain language information; otherwise returns false. + * @return list see insertLanguageForInstallation() + */ + public function insertLanguageForApplyingLocalChanges(string $lang_key): array + { + return $this->manager()->insertLanguageForApplyingLocalChanges($lang_key); + } + + /** + * File-based, needs no database (unlike manager()). * - * $content expect an ILIAS lang-file + * @param list $lang_keys + * @param int|null $for_user_id evaluate the writability for this user instead of the current process + * @return list + */ + public function findUnwritableOverlayDirectories(array $lang_keys, ?int $for_user_id = null): array + { + return MigratedLanguageFileSync::findUnwritableOverlayDirectories( + $this->language_file_directory_manager, + $this->absolute_path, + $lang_keys, + $this->getClientDataDir(), + $for_user_id + ); + } + + /** + * File-based, needs no database. * - * @return bool|string[] + * @param list $lang_keys */ - protected function cut_header(array $content) + public function hasMigratedModules(array $lang_keys): bool { - foreach ($content as $key => $val) { - if (trim($val) === "") { - return array_slice($content, $key + 1); - } - } - return false; + return MigratedLanguageFileSync::hasShippedModules( + $this->language_file_directory_manager, + $this->absolute_path, + $lang_keys + ); } /** - * remove language data from database - * $a_lang_key language key - * $a_mode "all" or "keep_local" + * get already installed languages (in db) */ - protected function flushLanguage(string $a_lang_key, string $a_mode = "all"): void + public function getInstalledLanguages(): array { - global $ilDB; + return $this->repository()->getInstalledLanguages(); + } - self::_deleteLangData($a_lang_key, ($a_mode === "keep_local")); + /** + * get already installed local languages (in db) + */ + public function getInstalledLocalLanguages(): array + { + return $this->repository()->getInstalledLocalLanguages(); + } - if ($a_mode === "all") { - $ilDB->manipulate("DELETE FROM lng_modules WHERE lang_key = " . - $ilDB->quote($a_lang_key, "text")); - } + /** + * validate the logical structure of a lang-file + * + * This function checks if a lang-file of a given lang_key exists, + * the file has a header, and each lang-entry consists of exactly + * three elements (module, identifier, value). + * + * $a_lang_key international language key (2 digits) + */ + protected function checkLanguage(string $a_lang_key): bool + { + return $this->repository()->checkLanguage($a_lang_key); } /** @@ -375,204 +426,27 @@ public static function _deleteLangData(string $a_lang_key, bool $a_keep_local_ch */ public function getLocalChanges(string $a_lang_key, string $a_min_date = "", string $a_max_date = ""): array { - global $ilDB; - - if ($a_min_date === "") { - $a_min_date = "1980-01-01 00:00:00"; - } - if ($a_max_date === "") { - $a_max_date = "2200-01-01 00:00:00"; - } - - $q = sprintf( - "SELECT * FROM lng_data WHERE lang_key = %s " . - "AND local_change >= %s AND local_change <= %s", - $ilDB->quote($a_lang_key, "text"), - $ilDB->quote($a_min_date, "timestamp"), - $ilDB->quote($a_max_date, "timestamp") - ); - $result = $ilDB->query($q); - - $changes = array(); - while ($row = $result->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) { - $changes[$row["module"]][$row["identifier"]] = $row["value"]; - } - return $changes; + return $this->repository()->getLocalChanges($a_lang_key, $a_min_date, $a_max_date); } - - //TODO: remove redundant checks here! /** - * insert language data from file in database - * - * $lang_key international language key (2 digits) - * $scope empty (global) or "local" + * Searches for the existence of *.lang.local files. + * Returns array with language keys */ - protected function insertLanguage(string $lang_key, string $scope = ""): void + public function getLocalLanguages(): array { - global $ilDB; - - $lang_array = array(); - - $scopeExtension = ""; - if (!empty($scope)) { - if ($scope === "global") { - $scope = ""; - } else { - $scopeExtension = "." . $scope; - } - } - - $path = $this->lang_path; - if ($scope === "local") { - $path = $this->cust_lang_path; - } - - $tmpPath = getcwd(); - chdir($path); - - $lang_file = "ilias_" . $lang_key . ".lang" . $scopeExtension; - $change_date = null; - - if (is_file($lang_file)) { - // initialize the array for updating lng_modules below - $lang_array = []; - $lang_array["common"] = []; - - // remove header first - if ($content = $this->cut_header(file($lang_file))) { - // get the local changes from the database - if (empty($scope)) { - $local_changes = $this->getLocalChanges($lang_key); - } elseif ($scope === "local") { - // set the change date to import time for a local file - // get the modification date of the local file - // get the newer local changes for a local file - $change_date = gmdate("Y-m-d H:i:s", time()); - $min_date = gmdate("Y-m-d H:i:s", filemtime($lang_file)); - $local_changes = $this->getLocalChanges($lang_key, $min_date); - } - - $query_check = false; - $query = "INSERT INTO lng_data (module,identifier,lang_key,value,local_change,remarks) VALUES "; - foreach ($content as $key => $val) { - // split the line of the language file - // [0]: module - // [1]: identifier - // [2]: value - // [3]: comment (optional) - $separated = explode($this->separator, trim($val)); - - //get position of the comment_separator - $pos = strpos($separated[2], $this->comment_separator); - - if ($pos !== false) { - //cut comment of - $separated[2] = substr($separated[2], 0, $pos); - } - - // check if the value has a local change - if (isset($local_changes[$separated[0]])) { - $local_value = $local_changes[$separated[0]][$separated[1]] ?? ""; - } else { - $local_value = ""; - } - - if (empty($scope)) { - if ($local_value !== "" && $local_value !== $separated[2]) { - // keep the locally changed value - $lang_array[$separated[0]][$separated[1]] = $local_value; - continue; - } - } elseif ($scope === "local") { - if ($local_value !== "") { - // keep a locally changed value that is newer than the local file - $lang_array[$separated[0]][$separated[1]] = $local_value; - continue; - } - } - - $query .= sprintf( - "(%s,%s,%s,%s,%s,%s),", - $ilDB->quote($separated[0], "text"), - $ilDB->quote($separated[1], "text"), - $ilDB->quote($lang_key, "text"), - $ilDB->quote($separated[2], "text"), - $ilDB->quote($change_date, "timestamp"), - $ilDB->quote($separated[3] ?? null, "text") - ); - $query_check = true; - $lang_array[$separated[0]][$separated[1]] = $separated[2]; - } - $query = rtrim($query, ",") . " ON DUPLICATE KEY UPDATE value=VALUES(value),remarks=VALUES(remarks);"; - if ($query_check) { - $ilDB->manipulate($query); - } - } - - $query = "INSERT INTO lng_modules (module, lang_key, lang_array) VALUES "; - $modules_to_delete = []; - foreach ($lang_array as $module => $lang_arr) { - if ($scope === "local") { - $q = "SELECT * FROM lng_modules WHERE " . - " lang_key = " . $ilDB->quote($lang_key, "text") . - " AND module = " . $ilDB->quote($module, "text"); - $set = $ilDB->query($q); - $row = $ilDB->fetchAssoc($set); - if ($row === null) { - continue; - } - $arr2 = unserialize($row["lang_array"], ["allowed_classes" => false]); - if (is_array($arr2)) { - $lang_arr = array_merge($arr2, $lang_arr); - } - } - $query .= sprintf( - "(%s,%s,%s),", - $ilDB->quote($module, "text"), - $ilDB->quote($lang_key, "text"), - $ilDB->quote(serialize($lang_arr), "clob"), - ); - $modules_to_delete[] = $module; - } - - $inModulesToDelete = $ilDB->in('module', $modules_to_delete, false, 'text'); - $ilDB->manipulate(sprintf( - "DELETE FROM lng_modules WHERE lang_key = %s AND $inModulesToDelete", - $ilDB->quote($lang_key, "text") - )); - - $query = rtrim($query, ",") . ";"; - $ilDB->manipulate($query); - } - - chdir($tmpPath); + return $this->repository()->getLocalLanguages(); } /** - * Searches for the existence of *.lang.local files. - * Returns array with language keys + * Local language files that contain a requested key but do not match the naming scheme. + * + * @param list $language_keys + * @return list */ - public function getLocalLanguages(): array + public function getInvalidLocalLanguageFiles(array $language_keys): array { - $local_langs = array(); - if (is_dir($this->cust_lang_path)) { - $d = dir($this->cust_lang_path); - $tmpPath = getcwd(); - chdir($this->cust_lang_path); - - // get available .lang.local files - while ($entry = $d->read()) { - if (is_file($entry) && (preg_match("~(^ilias_.{2}\.lang.local$)~", $entry))) { - $lang_key = substr($entry, 6, 2); - $local_langs[] = $lang_key; - } - } - - chdir($tmpPath); - } - - return $local_langs; + return $this->repository()->getInvalidLocalLanguageFiles($language_keys); } /** @@ -580,32 +454,17 @@ public function getLocalLanguages(): array */ public function getInstallableLanguages(): array { - $d = dir($this->lang_path); - $tmpPath = getcwd(); - chdir($this->lang_path); - - $installableLanguages = []; - // get available lang-files - while ($entry = $d->read()) { - if (is_file($entry) && (preg_match("~(^ilias_.{2}\.lang$)~", $entry))) { - $lang_key = substr($entry, 6, 2); - $installableLanguages[] = $lang_key; - } - } - - chdir($tmpPath); - - return $installableLanguages; + return $this->repository()->getInstallableLanguages(); } /** - * set db handler object - * @string object db handler + * Takes precedence over $GLOBALS['ilDB']. + * * Return true on success */ public function setDbHandler(ilDBInterface $a_db_handler): bool { - $this->db = &$a_db_handler; + $this->db = $a_db_handler; return true; } diff --git a/components/ILIAS/Language/classes/class.ilCachedLanguage.php b/components/ILIAS/Language/classes/class.ilCachedLanguage.php index d0e5ecfc00be..f20514c7178e 100755 --- a/components/ILIAS/Language/classes/class.ilCachedLanguage.php +++ b/components/ILIAS/Language/classes/class.ilCachedLanguage.php @@ -64,6 +64,9 @@ public function isForced(): bool /** * Return whether the global cache is active + * + * Always true, so cached_modules is always filled: ilLanguage::loadLanguageModule() must check the + * PO/MO overlay of a migrated module before cached_modules, or the DB cache hides the overlay. */ public function isActive(): bool { diff --git a/components/ILIAS/Language/classes/class.ilLanguage.php b/components/ILIAS/Language/classes/class.ilLanguage.php index 5275ee22bc92..5ddea200dd2e 100755 --- a/components/ILIAS/Language/classes/class.ilLanguage.php +++ b/components/ILIAS/Language/classes/class.ilLanguage.php @@ -18,26 +18,31 @@ declare(strict_types=1); +use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; +use ILIAS\Language\ComponentTranslation\LanguageFileDirectoryManager; +use ILIAS\Language\ComponentTranslation\MigratedLanguageFilePaths; +use ILIAS\Language\ComponentTranslation\MigratedTranslations; +use ILIAS\Language\ComponentTranslation\TranslationGettextRepository; +use ILIAS\Language\ComponentTranslation\TranslationRepository; +use ILIAS\Language\LanguageIdentifier; + /** * language handling * * this class offers the language handling for an application. - * it works initially on one file: languages.txt - * from this file the class can generate many single language files. * the constructor is called with a small language abbreviation * e.g. $lng = new Language("en"); - * the constructor reads the single-languagefile en.lang and puts this into an array. * with * e.g. $lng->txt("user_updated"); * you can translate a lang-topic into the actual language * + * ILIAS modules come from a TranslationRepository (the build plus overlay), never from the DB; plugin modules + * are read from lng_data/lng_modules. + * Values of a migrated module do not go into $text: loadLanguageModule() records its identifiers in + * $migrated_key_modules and txt() looks them up on demand. + * * @author Peter Gabriel * @version $Id$ - * - * - * @todo Das Datefeld wird bei Aenderungen einer Sprache (update, install, deinstall) nicht richtig gesetzt!!! - * Die Formatfunktionen gehoeren nicht in class.Language. Die sind auch woanders einsetzbar!!! - * Daher->besser in class.Format */ class ilLanguage implements \ILIAS\Language\Language { @@ -53,6 +58,37 @@ class ilLanguage implements \ILIAS\Language\Language public array $loaded_modules = array(); protected static array $used_topics = array(); protected static array $used_modules = array(); + + /** + * Static, since _lookupEntry() is; taken from the list the constructor reads anyway, `null` until known. + * + * @var list|null + */ + private static ?array $installed_languages = null; + + /** + * Identifier => module; the module loaded last is responsible. An identifier the responsible migrated module + * does not translate gives "-identifier-", never the value of an earlier module (see txt()). + * + * @var array + */ + protected array $migrated_key_modules = []; + + private ?TranslationRepository $translations = null; + + private static ?LanguageFileDirectoryManager $indexed_manager = null; + + /** + * @var array + */ + private static array $directories_by_prefix = []; + + /** + * Identifier => value per non-migrated module, cached by loadLanguageModule() and txt() with a LanguageIdentifier. + * + * @var array> + */ + private array $module_texts = []; protected array $cached_modules = array(); protected array $map_modules_txt = array(); protected bool $usage_log_enabled = false; @@ -70,9 +106,10 @@ class ilLanguage implements \ILIAS\Language\Language * $a_lang_key language code (two characters), e.g. "de", "en", "in" * Return false if reading failed, otherwise true */ - public function __construct(string $a_lang_key) + public function __construct(string $a_lang_key, ?TranslationRepository $translations = null) { global $DIC; + $this->translations = $translations; $client_ini = $DIC->clientIni(); $this->log = $DIC->logger()->forComponent('lang'); @@ -99,6 +136,7 @@ public function __construct(string $a_lang_key) } $langs = $this->getInstalledLanguages(); + self::$installed_languages = array_values(array_map('strval', $langs)); if (!in_array($this->lang_key, $langs, true)) { $this->lang_key = $this->lang_default; @@ -153,6 +191,7 @@ public function getContentLanguage(): string /** * gets the text for a given topic in a given language * if the topic is not in the list, the topic itself with "-" will be returned + * Another language than this one is always read via gettext (_lookupEntry()), never from the injected repository. */ public function txtlng(string $a_module, string $a_topic, string $a_language): string { @@ -166,9 +205,22 @@ public function txtlng(string $a_module, string $a_topic, string $a_language): s /** * gets the text for a given topic * if the topic is not in the list, the topic itself with "-" will be returned + * + * A LanguageIdentifier is read from exactly its module without loadLanguageModule() and without side effect, + * falling back to the default language. + * + * $n selects a plural form of a migrated module; the quantity is not inserted, callers do that. Without a + * form for $n in the language the value without $n is served, never another language's form. */ - public function txt(string $a_topic, string $a_default_lang_fallback_mod = ""): string + public function txt(string|LanguageIdentifier $a_topic, ?int $n = null): string { + if ($a_topic instanceof LanguageIdentifier) { + return $this->translateInModule($a_topic->module(), (string) $a_topic->value, $n); + } + if ($n !== null) { + // $this->txt(): a subclass (ilSetupLanguage) serves the singular as before + return $this->pluralTxt($a_topic, $n) ?? $this->txt($a_topic); + } if (empty($a_topic)) { return ""; } @@ -176,28 +228,22 @@ public function txt(string $a_topic, string $a_default_lang_fallback_mod = ""): // remember the used topics self::$used_topics[$a_topic] = $a_topic; - $translation = $this->text[$a_topic] ?? ""; - - if ($translation === "" && $a_default_lang_fallback_mod !== "") { - // #13467 - try current language first (could be missing module) - if ($this->lang_key != $this->lang_default) { - $translation = self::_lookupEntry( - $this->lang_key, - $a_default_lang_fallback_mod, - $a_topic - ); - } - // try default language last - if ($translation === "" || $translation === "-" . $a_topic . "-") { - $translation = self::_lookupEntry( - $this->lang_default, - $a_default_lang_fallback_mod, - $a_topic - ); + $module = $this->migrated_key_modules[$a_topic] ?? null; + if ($module !== null) { + $translation = $this->migratedText($module, $a_topic); + if ($translation !== null) { + if ($this->usage_log_enabled) { + self::logUsage($module, $a_topic); + } + return $translation; } + // deliberately not the value of an earlier module: with the same identifier it mostly means + // something else, and "-key-" is noticed. Differs from the .lang path (array_merge kept the earlier value). + $translation = ""; + } else { + $translation = $this->text[$a_topic] ?? ""; } - if ($translation === "") { if (ILIAS_LOG_ENABLED && is_object($this->log)) { $this->log->debug("Language (" . $this->lang_key . "): topic -" . $a_topic . "- not present"); @@ -212,22 +258,136 @@ public function txt(string $a_topic, string $a_default_lang_fallback_mod = ""): return $translation; } + /** + * `null` if txt() without $n applies. + */ + private function pluralTxt(string $a_topic, int $n): ?string + { + $module = $a_topic === '' ? null : ($this->migrated_key_modules[$a_topic] ?? null); + if ($module === null) { + return null; + } + $value = $this->translations()->getPluralText($module, $this->migratedLangKey(), $a_topic, $n, self::clientDataDir()); + if ($value === null || $value === '') { + return null; + } + self::$used_topics[$a_topic] = $a_topic; + if ($this->usage_log_enabled) { + self::logUsage($module, $a_topic); + } + + return $value; + } + /** * Check if language entry exists */ public function exists(string $a_topic): bool { + $module = $this->migrated_key_modules[$a_topic] ?? null; + if ($module !== null) { + return $this->migratedText($module, $a_topic) !== null; + } + return isset($this->text[$a_topic]); } + private function translateInModule(string $module, string $a_topic, ?int $n): string + { + // like txt(""): never the header of a catalog + if (empty($a_topic)) { + return ''; + } + $lang_key = $this->migratedLangKey(); + self::$used_topics[$a_topic] = $a_topic; + + $translation = $this->moduleText($module, $a_topic, $n, $lang_key); + $default_lang_key = $this->getDefaultLanguage(); + if ($translation === null && $lang_key !== $default_lang_key) { + $translation = $this->moduleText($module, $a_topic, $n, $default_lang_key); + } + + if ($translation !== null) { + return $translation; + } + if (ILIAS_LOG_ENABLED && is_object($this->log)) { + $this->log->debug("Language (" . $lang_key . "): topic -" . $a_topic . "- not present"); + } + + return "-" . $a_topic . "-"; + } + + private function moduleText(string $module, string $a_topic, ?int $n, string $lang_key): ?string + { + if (!MigratedLanguageFilePaths::isValidLanguageKey($lang_key)) { + return null; + } + $translations = $this->translations(); + if (self::migratedKeysOf($translations, $module, $lang_key) !== null) { + $translation = $n === null + ? null + : $translations->getPluralText($module, $lang_key, $a_topic, $n, self::clientDataDir()); + if ($translation === null || $translation === '') { + $translation = $translations->getText($module, $lang_key, $a_topic, self::clientDataDir()); + } + } elseif ($lang_key === $this->migratedLangKey()) { + $translation = $this->moduleTexts($module, $lang_key)[$a_topic] ?? null; + } else { + $translation = self::lookupDatabaseEntry($lang_key, $module, $a_topic); + } + if (!is_string($translation) || $translation === '') { + return null; + } + + self::$used_modules[$module] = $module; + if ($this->usage_log_enabled) { + self::logUsage($module, $a_topic); + } + + return $translation; + } + /** - * Load language module + * Without loading the module (see txt() with a LanguageIdentifier). + * + * @return array */ - public function loadLanguageModule(string $a_module): void + private function moduleTexts(string $module, string $lang_key): array + { + if (!isset($this->module_texts[$module])) { + $cached = $this->cached_modules[$module] ?? null; + $this->module_texts[$module] = is_array($cached) ? $cached : (self::readModuleTexts($module, $lang_key) ?? []); + } + + return $this->module_texts[$module]; + } + + /** + * @return array|null + */ + private static function readModuleTexts(string $module, string $lang_key): ?array { global $DIC; $ilDB = $DIC->database(); + $q = "SELECT lang_array FROM lng_modules " . + "WHERE lang_key = " . $ilDB->quote($lang_key, "text") . " AND module = " . + $ilDB->quote($module, "text"); + $r = $ilDB->query($q); + $row = $r->fetchRow(ilDBConstants::FETCHMODE_ASSOC); + if ($row === false) { + return null; + } + $texts = unserialize($row["lang_array"], ["allowed_classes" => false]); + + return is_array($texts) ? $texts : null; + } + + /** + * Load language module + */ + public function loadLanguageModule(string $a_module): void + { if (in_array($a_module, $this->loaded_modules, true)) { return; } @@ -243,8 +403,18 @@ public function loadLanguageModule(string $a_module): void $lang_key = $this->lang_user; } + // Must run before the cached_modules check: ilCachedLanguage::isActive() is always true, and migrated + // modules keep a DB row on purpose (dual-write, see ilObjLanguage::syncMigratedLanguageFile()). + $migrated_keys = self::migratedKeysOf($this->translations(), $a_module, $lang_key); + if ($migrated_keys !== null) { + // the module loaded last is responsible for its identifiers + $this->migrated_key_modules = $migrated_keys + $this->migrated_key_modules; + return; + } + if (isset($this->cached_modules[$a_module]) && is_array($this->cached_modules[$a_module])) { $this->text = array_merge($this->text, $this->cached_modules[$a_module]); + $this->forgetMigratedKeys($this->cached_modules[$a_module]); if ($this->usage_log_enabled) { foreach (array_keys($this->cached_modules[$a_module]) as $key) { @@ -255,19 +425,11 @@ public function loadLanguageModule(string $a_module): void return; } - $q = "SELECT * FROM lng_modules " . - "WHERE lang_key = " . $ilDB->quote($lang_key, "text") . " AND module = " . - $ilDB->quote($a_module, "text"); - $r = $ilDB->query($q); - $row = $r->fetchRow(ilDBConstants::FETCHMODE_ASSOC); - - if ($row === false) { - return; - } - - $new_text = unserialize($row["lang_array"], ["allowed_classes" => false]); - if (is_array($new_text)) { + $new_text = self::readModuleTexts($a_module, $lang_key); + if ($new_text !== null) { + $this->module_texts[$a_module] = $new_text; $this->text = array_merge($this->text, $new_text); + $this->forgetMigratedKeys($new_text); if ($this->usage_log_enabled) { foreach (array_keys($new_text) as $key) { @@ -277,6 +439,130 @@ public function loadLanguageModule(string $a_module): void } } + /** + * A module that is not migrated, loaded after migrated ones, wins for its identifiers. + * + * @param array $text + */ + private function forgetMigratedKeys(array $text): void + { + if ($this->migrated_key_modules !== []) { + $this->migrated_key_modules = array_diff_key($this->migrated_key_modules, $text); + } + } + + private function migratedText(string $module, string $a_topic): ?string + { + return $this->translations()->getText($module, $this->migratedLangKey(), $a_topic, self::clientDataDir()); + } + + /** The default repository has static state, so all instances and the static methods share it. */ + private function translations(): TranslationRepository + { + return $this->translations ??= new TranslationGettextRepository(); + } + + private function migratedLangKey(): string + { + return $this->lang_key !== '' ? $this->lang_key : $this->lang_user; + } + + /** + * The migrated state is only served for installed languages; the list is the one the constructor already + * determined, without a query of its own. Without it (no ilLanguage constructed yet) nothing is restricted. + */ + private static function isInstalledLanguage(string $lang_key): bool + { + return self::$installed_languages === null || in_array($lang_key, self::$installed_languages, true); + } + + /** + * $lang_key was uninstalled in this request: its migrated state is no longer served (see isInstalledLanguage()), + */ + public static function forgetInstalledLanguage(string $lang_key): void + { + if (self::$installed_languages !== null) { + self::$installed_languages = array_values(array_diff(self::$installed_languages, [$lang_key])); + } + (new TranslationGettextRepository())->invalidateLanguage($lang_key); + } + + /** + * Makes an overlay write (see MigratedLanguageFileSync) visible to the rest of the request. + */ + public static function invalidateMigratedLanguageFileCache(string $a_module, string $lang_key): void + { + (new TranslationGettextRepository())->invalidateModule($a_module, $lang_key); + } + + /** + * `null` only for a module the components do not ship (a plugin's): the caller reads lng_modules. + * A shipped module without a build has no identifiers (reported if its `.po` exists), no DB fallback. + * Whether $a_module goes through $translations is decided by isShippedModule() and isInstalledLanguage(), not by it. + * + * @return array|null + */ + private static function migratedKeysOf(TranslationRepository $translations, string $a_module, string $lang_key): ?array + { + if (!self::isShippedModule($a_module)) { + return null; + } + if (!MigratedLanguageFilePaths::isValidLanguageKey($lang_key) || !self::isInstalledLanguage($lang_key)) { + return []; + } + $keys = $translations->getKeys($a_module, $lang_key, self::clientDataDir()); + if ($keys !== null || MigratedTranslations::reportMissingBuild() || !self::isShippedWithoutBuild($a_module, $lang_key)) { + return $keys ?? []; + } + MigratedTranslations::reportProblem(sprintf( + 'Module "%s" ships a language file for "%s" that is not built - if "php cli/setup.php build" warns' + . ' that the file cannot be compiled, fix the file; otherwise run the build.', + $a_module, + $lang_key + )); + + return []; + } + + private static function isShippedModule(string $a_module): bool + { + return MigratedTranslations::isShippedModule($a_module) || self::findLanguageFileDirectory($a_module) !== null; + } + + private static function isShippedWithoutBuild(string $a_module, string $lang_key): bool + { + return MigratedTranslations::shipsPoWithoutBuild($a_module, $lang_key, self::findLanguageFileDirectory($a_module)); + } + + private static function clientDataDir(): ?string + { + return MigratedTranslations::clientDataDir(); + } + + /** + * Assembled by the Language.php component graph and re-exposed to legacy $DIC code by AllModernComponents.php. + */ + private static function findLanguageFileDirectory(string $a_module): ?LanguageFileDirectory + { + global $DIC; + + if (!$DIC instanceof \ArrayAccess || !$DIC->offsetExists(LanguageFileDirectoryManager::class)) { + return null; + } + + /** @var LanguageFileDirectoryManager $manager */ + $manager = $DIC[LanguageFileDirectoryManager::class]; + if ($manager !== self::$indexed_manager) { + self::$directories_by_prefix = []; + foreach ($manager->getDirectories() as $directory) { + self::$directories_by_prefix[$directory->getPrefix()] ??= $directory; + } + self::$indexed_manager = $manager; + } + + return self::$directories_by_prefix[$a_module] ?? null; + } + /** * Get installed languages */ @@ -287,6 +573,9 @@ public function getInstalledLanguages(): array /** * Get installed languages + * + * Not mergeable with ilSetupLanguage::getInstalledLanguages(): ilObject::_getObjectsByType() is + * unavailable during Setup, which uses a raw object_data query. */ public static function _getInstalledLanguages(): array { @@ -304,19 +593,27 @@ public static function _getInstalledLanguages(): array public static function _lookupEntry(string $a_lang_key, string $a_mod, string $a_id): string { - global $DIC; - $ilDB = $DIC->database(); + $translations = new TranslationGettextRepository(); + $migrated_keys = self::migratedKeysOf($translations, $a_mod, $a_lang_key); + if ($migrated_keys !== null) { + $value = isset($migrated_keys[$a_id]) + ? $translations->getText($a_mod, $a_lang_key, $a_id, self::clientDataDir()) + : null; + if ($value === null || $value === '') { + return "-" . $a_id . "-"; + } + self::$used_topics[$a_id] = $a_id; + self::$used_modules[$a_mod] = $a_mod; - $set = $ilDB->query($q = sprintf( - "SELECT * FROM lng_data WHERE module = %s " . - "AND lang_key = %s AND identifier = %s", - $ilDB->quote($a_mod, "text"), - $ilDB->quote($a_lang_key, "text"), - $ilDB->quote($a_id, "text") - )); - $rec = $ilDB->fetchAssoc($set); + if (self::isUsageLogEnabled()) { + self::logUsage($a_mod, $a_id); + } + + return $value; + } - if (isset($rec["value"]) && $rec["value"] != "") { + $value = self::lookupDatabaseEntry($a_lang_key, $a_mod, $a_id); + if ($value !== null) { // remember the used topics self::$used_topics[$a_id] = $a_id; self::$used_modules[$a_mod] = $a_mod; @@ -325,12 +622,29 @@ public static function _lookupEntry(string $a_lang_key, string $a_mod, string $a self::logUsage($a_mod, $a_id); } - return $rec["value"]; + return $value; } return "-" . $a_id . "-"; } + private static function lookupDatabaseEntry(string $a_lang_key, string $a_mod, string $a_id): ?string + { + global $DIC; + $ilDB = $DIC->database(); + + $set = $ilDB->query(sprintf( + "SELECT value FROM lng_data WHERE module = %s " . + "AND lang_key = %s AND identifier = %s", + $ilDB->quote($a_mod, "text"), + $ilDB->quote($a_lang_key, "text"), + $ilDB->quote($a_id, "text") + )); + $rec = $ilDB->fetchAssoc($set); + + return isset($rec["value"]) && $rec["value"] != "" ? (string) $rec["value"] : null; + } + /** * Lookup obj_id of language */ @@ -500,7 +814,11 @@ public function toJSMap(array $a_map, ?ilGlobalTemplateInterface $a_tpl = null): foreach ($a_map as $k => $v) { if ($v != "") { - $a_tpl->addOnloadCode("il.Language.setLangVar('" . $k . "', " . json_encode($v, JSON_THROW_ON_ERROR) . ");"); + // HEX flags: a value or key can never end the surrounding ', + ], + 'usr_id' => 6, + ]); + $this->fail('Expected an InvalidInputException to be thrown.'); + } catch (InvalidInputException $e) { + $this->assertStringContainsString('fr', $e->getMessage()); + $this->assertStringNotContainsString('alert(1)', $e->getMessage()); + $this->assertStringNotContainsString('script', $e->getMessage()); + $this->assertArrayNotHasKey('replace', $calls); + $this->assertArrayNotHasKey('cache', $calls); + } + } + + /** + * A form key missing from the shipped message (here "item [2]", reported by the provider) rejects the request + * before any write, naming the language but not the value. + */ + public function testAFormKeyWithNoSuchFormInAShippedMessageRejectsTheRequestBeforeAnyWrite(): void + { + $calls = []; + $asked = []; + $activity = $this->createActivity( + ['de', 'fr'], + replace_lang_entry: $this->spyReplaceLangEntry($calls), + update_module_cache: $this->spyUpdateModuleCache($calls), + languages_without_plural_form: static function (string $module, string $identifier, array $lang_keys) use (&$asked): array { + $asked[] = [$module, $identifier, $lang_keys]; + return ['de']; + } + ); + + try { + $activity->perform([ + 'module' => 'poll', + 'identifier' => 'item [2]', + 'translations' => ['de' => 'Ein geheimer Wert', 'fr' => ''], + 'usr_id' => 6, + ]); + $this->fail('Expected an InvalidInputException to be thrown.'); + } catch (InvalidInputException $e) { + $this->assertStringContainsString('de', $e->getMessage()); + $this->assertStringNotContainsString('Ein geheimer Wert', $e->getMessage()); + // only the languages with a value are asked + $this->assertSame([['poll', 'item [2]', ['de']]], $asked); + $this->assertArrayNotHasKey('replace', $calls); + $this->assertArrayNotHasKey('cache', $calls); + } + } + + public function testAnIdentifierExistingInAnotherModuleRejectsTheRequestBeforeAnyWrite(): void + { + $calls = []; + $asked = []; + $activity = $this->createActivity( + ['de', 'en'], + replace_lang_entry: $this->spyReplaceLangEntry($calls), + update_module_cache: $this->spyUpdateModuleCache($calls), + duplicates_of: static function (string $module, string $identifier) use (&$asked): array { + $asked[] = [$module, $identifier]; + return ['mme: component_not_active']; + } + ); + + try { + $activity->perform([ + 'module' => 'common', + 'identifier' => 'component_not_active', + 'translations' => ['de' => 'Inaktiv', 'en' => 'Inactive'], + ]); + $this->fail('Expected an InvalidInputException to be thrown.'); + } catch (InvalidInputException $e) { + $this->assertStringContainsString('mme: component_not_active', $e->getMessage()); + $this->assertSame(400, $e->getCode()); + $this->assertSame([['common', 'component_not_active']], $asked); + $this->assertArrayNotHasKey('replace', $calls); + $this->assertArrayNotHasKey('cache', $calls); + } + } + + // same de/en rule as the perform() test above, via maybePerformAs() + public function testMaybePerformAsRejectsWholeRequestAndWritesNothingWhenEnIsBlankWhileDeIsValid(): void + { + $rbac = $this->createStub(\ilRbacSystem::class); + $rbac->method('checkAccessOfUser')->willReturn(true); + + $calls = []; + $activity = $this->createActivity( + ['de', 'en'], + rbac: $rbac, + replace_lang_entry: $this->spyReplaceLangEntry($calls), + update_module_cache: $this->spyUpdateModuleCache($calls) + ); + + $result = $activity->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, [ + 'module' => 'common', + 'identifier' => 'new_topic', + 'translations' => [ + 'de' => 'Hallo', + 'en' => ' ', // whitespace-only counts as blank too + ], + ]); + + $this->assertTrue($result->isError()); + $this->assertInstanceOf(InvalidInputException::class, $result->error()); + $this->assertSame(400, $result->error()->getCode()); + $this->assertArrayNotHasKey('replace', $calls); + $this->assertArrayNotHasKey('cache', $calls); + } + + public function testPerformRejectsWholeRequestAndWritesNothingWhenDeIsBlankWhileEnIsValid(): void + { + $calls = []; + $activity = $this->createActivity( + ['de', 'en'], + replace_lang_entry: $this->spyReplaceLangEntry($calls), + update_module_cache: $this->spyUpdateModuleCache($calls) + ); + + $this->expectException(InvalidInputException::class); + try { + $activity->perform([ + 'module' => 'common', + 'identifier' => 'new_topic', + 'translations' => ['en' => 'Hello'], + 'usr_id' => 6, + ]); + } finally { + $this->assertArrayNotHasKey('replace', $calls); + $this->assertArrayNotHasKey('cache', $calls); + } + } + + public function testDeAndEnNotInstalledAtAllImposesNoMandatoryRequirement(): void + { + $calls = []; + $activity = $this->createActivity( + ['fr'], + replace_lang_entry: $this->spyReplaceLangEntry($calls), + update_module_cache: $this->spyUpdateModuleCache($calls) + ); + + $result = $activity->perform([ + 'module' => 'common', + 'identifier' => 'new_topic', + 'translations' => [], + 'usr_id' => 6, + ]); + + $this->assertSame([], $result['added_language_keys']); + $this->assertSame(['fr'], $result['skipped_empty_language_keys']); + $this->assertArrayNotHasKey('replace', $calls); + } + + public static function invalidPerformParametersProvider(): array + { + return [ + 'missing module' => [['identifier' => 'foo', 'translations' => [], 'usr_id' => 6]], + 'empty string module' => [['module' => '', 'identifier' => 'foo', 'translations' => [], 'usr_id' => 6]], + 'non-string module' => [['module' => 42, 'identifier' => 'foo', 'translations' => [], 'usr_id' => 6]], + 'missing identifier' => [['module' => 'common', 'translations' => [], 'usr_id' => 6]], + 'empty string identifier' => [['module' => 'common', 'identifier' => '', 'translations' => [], 'usr_id' => 6]], + 'non-string identifier' => [['module' => 'common', 'identifier' => [], 'translations' => [], 'usr_id' => 6]], + 'missing translations' => [['module' => 'common', 'identifier' => 'foo', 'usr_id' => 6]], + 'non-array translations' => [['module' => 'common', 'identifier' => 'foo', 'translations' => 'nope', 'usr_id' => 6]], + // a missing/null usr_id is allowed; only a non-null usr_id of the wrong type is invalid + 'non-int usr_id' => [['module' => 'common', 'identifier' => 'foo', 'translations' => [], 'usr_id' => '6']], + ]; + } + + #[DataProvider('invalidPerformParametersProvider')] + public function testPerformRejectsInvalidOrIncompleteParameters(array $parameters): void + { + $this->expectException(InvalidInputException::class); + + $this->createActivity(['de'])->perform($parameters); + } + + public function testPerformRejectsNonArrayParameters(): void + { + $this->expectException(InvalidInputException::class); + + $this->createActivity(['de'])->perform('not-an-array'); + } + + /** + * The fake repository returns different installed-language lists on the 1st (getInputDescription()) and + * 2nd (perform()) call. + */ + public function testOptionalLanguageInstalledBetweenGetInputDescriptionAndPerformIsSkippedNotRejected(): void + { + $rbac = $this->createStub(\ilRbacSystem::class); + $rbac->method('checkAccessOfUser')->willReturn(true); + + $calls = 0; + $repository = new FakeInstalledLanguageRepository(static function () use (&$calls): array { + $calls++; + // 1st call: 'fr' not installed yet; 2nd call: installed + return $calls === 1 ? ['de', 'en'] : ['de', 'en', 'fr']; + }); + + $activity = $this->createActivity( + [], + rbac: $rbac, + installed_language_repository: $repository + ); + + $result = $activity->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, [ + 'module' => 'common', + 'identifier' => 'new_topic', + 'translations' => ['de' => 'Hallo', 'en' => 'Hello'], + ]); + + $this->assertFalse($result->isError()); + $value = $result->value(); + $this->assertSame(['de', 'en'], $value['added_language_keys']); + $this->assertSame(['fr'], $value['skipped_empty_language_keys']); + // two independent snapshots, not a cached one + $this->assertSame(2, $calls); + } + + // fail-closed: "en" becomes mandatory after the form was built without it; the request must be rejected + public function testEnInstalledBetweenGetInputDescriptionAndPerformRejectsTheWholeRequestRatherThanSkippingEn(): void + { + $rbac = $this->createStub(\ilRbacSystem::class); + $rbac->method('checkAccessOfUser')->willReturn(true); + + $calls = 0; + $repository = new FakeInstalledLanguageRepository(static function () use (&$calls): array { + $calls++; + // 1st call: only "de" installed; 2nd call: "en" installed + return $calls === 1 ? ['de'] : ['de', 'en']; + }); + + $calls_to_write_closures = []; + $activity = $this->createActivity( + [], + rbac: $rbac, + installed_language_repository: $repository, + replace_lang_entry: $this->spyReplaceLangEntry($calls_to_write_closures), + update_module_cache: $this->spyUpdateModuleCache($calls_to_write_closures) + ); + + $result = $activity->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, [ + 'module' => 'common', + 'identifier' => 'new_topic', + 'translations' => ['de' => 'Hallo'], + ]); + + $this->assertTrue($result->isError()); + $error = $result->error(); + $this->assertInstanceOf(InvalidInputException::class, $error); + $this->assertSame('A value is required for: en.', $error->getMessage()); + $this->assertArrayNotHasKey('replace', $calls_to_write_closures); + $this->assertArrayNotHasKey('cache', $calls_to_write_closures); + // two independent snapshots, not a cached one + $this->assertSame(2, $calls); + } + + /** + * An optional language uninstalled between the two calls has its submitted value silently dropped. + */ + public function testOptionalLanguageUninstalledBetweenGetInputDescriptionAndPerformIsSilentlyDroppedNotWritten(): void + { + $rbac = $this->createStub(\ilRbacSystem::class); + $rbac->method('checkAccessOfUser')->willReturn(true); + + $calls = 0; + $repository = new FakeInstalledLanguageRepository(static function () use (&$calls): array { + $calls++; + // 1st call: "fr" installed; 2nd call: uninstalled + return $calls === 1 ? ['de', 'en', 'fr'] : ['de', 'en']; + }); + + $calls_to_write_closures = []; + $activity = $this->createActivity( + [], + rbac: $rbac, + installed_language_repository: $repository, + replace_lang_entry: $this->spyReplaceLangEntry($calls_to_write_closures), + update_module_cache: $this->spyUpdateModuleCache($calls_to_write_closures) + ); + + $result = $activity->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, [ + 'module' => 'common', + 'identifier' => 'new_topic', + 'translations' => ['de' => 'Hallo', 'en' => 'Hello', 'fr' => 'Bonjour'], + ]); + + $this->assertFalse($result->isError()); + $value = $result->value(); + $this->assertSame(['de', 'en'], $value['added_language_keys']); + $this->assertSame([], $value['skipped_empty_language_keys']); + $this->assertNotContains('fr', $value['added_language_keys']); + $this->assertNotContains('fr', $value['skipped_empty_language_keys']); + $this->assertArrayHasKey('replace', $calls_to_write_closures); + $written_lang_keys = array_column($calls_to_write_closures['replace'], 2); + $this->assertSame(['de', 'en'], $written_lang_keys); + $this->assertNotContains('fr', $written_lang_keys); + // two independent snapshots, not a cached one + $this->assertSame(2, $calls); + } +} diff --git a/components/ILIAS/Language/tests/Activities/AddLanguageEntryWritesTest.php b/components/ILIAS/Language/tests/Activities/AddLanguageEntryWritesTest.php new file mode 100644 index 000000000000..ee700fa810cb --- /dev/null +++ b/components/ILIAS/Language/tests/Activities/AddLanguageEntryWritesTest.php @@ -0,0 +1,452 @@ + 'login-' . $usr_id; + + $activity = $this->createActivity( + ['de', 'en', 'fr'], + replace_lang_entry: $replace_lang_entry, + update_module_cache: $update_module_cache, + user_login: $user_login + ); + + $result = $activity->perform([ + 'module' => 'common', + 'identifier' => 'new_topic', + 'translations' => [ + 'de' => 'Hallo', + 'en' => 'Hello', + ], + 'usr_id' => 6, + ]); + + $this->assertSame('common', $result['module']); + $this->assertSame('new_topic', $result['identifier']); + $this->assertSame(['de', 'en'], $result['added_language_keys']); + $this->assertSame(['fr'], $result['skipped_empty_language_keys']); + + $this->assertCount(2, $calls['replace']); + $this->assertSame(['common', 'new_topic', 'de', 'Hallo'], array_slice($calls['replace'][0], 0, 4)); + $this->assertSame('login-6', $calls['replace'][0][5]); + $this->assertMatchesRegularExpression('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', $calls['replace'][0][4]); + $this->assertSame(['common', 'new_topic', 'en', 'Hello'], array_slice($calls['replace'][1], 0, 4)); + + $this->assertCount(2, $calls['cache']); + $this->assertSame(['de', 'common', 'new_topic', 'Hallo'], $calls['cache'][0]); + $this->assertSame(['en', 'common', 'new_topic', 'Hello'], $calls['cache'][1]); + + foreach ($calls['replace'] as $call) { + $this->assertNotSame('fr', $call[2]); + } + foreach ($calls['cache'] as $call) { + $this->assertNotSame('fr', $call[0]); + } + } + + /** + * update_module_cache() returns `false` when the PO/MO overlay of a PO-maintained module could not be written: + * the language is listed in "overlay_write_failed_language_keys" but still counts as added. + */ + public function testALanguageWhoseModuleCacheUpdateReportsAnUnwrittenOverlayIsListed(): void + { + $results = ['de' => false, 'en' => true, 'fr' => null]; + $update_module_cache = static fn( + string $lang_key, + string $module, + string $identifier, + string $value + ): ?bool => $results[$lang_key]; + + $result = $this->createActivity(['de', 'en', 'fr'], update_module_cache: $update_module_cache)->perform([ + 'module' => 'common', + 'identifier' => 'new_topic', + 'translations' => ['de' => 'Hallo', 'en' => 'Hello', 'fr' => 'Bonjour'], + 'usr_id' => 6, + ]); + + $this->assertSame(['de', 'en', 'fr'], $result['added_language_keys']); + $this->assertSame(['de'], $result['overlay_write_failed_language_keys']); + } + + /** + * A language whose module content cannot be read is skipped before anything is written (not even lng_data) and + * reported as unwritten instead of added; the other languages are written. + */ + public function testALanguageWithUnreadableModuleContentIsReportedUnwrittenAndNeverWritten(): void + { + $calls = []; + $activity = $this->createActivity( + ['de', 'en', 'fr'], + replace_lang_entry: $this->spyReplaceLangEntry($calls), + update_module_cache: $this->spyUpdateModuleCache($calls), + has_unreadable_content: static fn(string $lang_key, string $module): bool => $lang_key === 'en' + ); + + $result = $activity->perform([ + 'module' => 'common', + 'identifier' => 'new_topic', + 'translations' => ['de' => 'Hallo', 'en' => 'Hello', 'fr' => ''], + 'usr_id' => 6, + ]); + + $this->assertSame(['de'], $result['added_language_keys']); + $this->assertSame(['fr'], $result['skipped_empty_language_keys']); + $this->assertSame(['en'], $result['overlay_write_failed_language_keys']); + $this->assertSame(['de'], array_column($calls['replace'], 2)); + $this->assertSame(['de'], array_column($calls['cache'], 0)); + } + + /** + * A skipped language never reaches update_module_cache(), so it is never listed as unwritten. + */ + public function testASkippedLanguageIsNeverListedAsHavingAnUnwrittenOverlay(): void + { + $update_module_cache = static fn( + string $lang_key, + string $module, + string $identifier, + string $value + ): bool => false; + + $result = $this->createActivity(['de', 'en', 'fr'], update_module_cache: $update_module_cache)->perform([ + 'module' => 'common', + 'identifier' => 'new_topic', + 'translations' => ['de' => 'Hallo', 'en' => 'Hello'], + 'usr_id' => 6, + ]); + + $this->assertSame(['fr'], $result['skipped_empty_language_keys']); + $this->assertSame(['de', 'en'], $result['overlay_write_failed_language_keys']); + } + + /** + * Deliberately not transactional: if replace_lang_entry() throws on the 3rd of 3 languages, the earlier + * writes stay and the exception propagates. + */ + public function testAThrowingReplaceLangEntryPartwayThroughTheWriteLoopLeavesEarlierLanguagesWritten(): void + { + $calls = []; + $replace_lang_entry = static function ( + string $module, + string $identifier, + string $lang_key, + string $value, + string $local_change, + string $remarks + ) use (&$calls): bool { + $calls['replace'][] = [$module, $identifier, $lang_key, $value, $local_change, $remarks]; + if ($lang_key === 'fr') { + throw new \RuntimeException('simulated database error while writing "fr"'); + } + return true; + }; + + $activity = $this->createActivity( + ['de', 'en', 'fr'], + replace_lang_entry: $replace_lang_entry, + update_module_cache: $this->spyUpdateModuleCache($calls) + ); + + try { + $activity->perform([ + 'module' => 'common', + 'identifier' => 'new_topic', + 'translations' => [ + 'de' => 'Hallo', + 'en' => 'Hello', + 'fr' => 'Bonjour', + ], + 'usr_id' => 6, + ]); + $this->fail('Expected the simulated \RuntimeException to propagate out of perform().'); + } catch (\RuntimeException $e) { + $this->assertSame('simulated database error while writing "fr"', $e->getMessage()); + + // "de" and "en", written before the failing "fr", remain written + $this->assertSame( + ['common', 'new_topic', 'de', 'Hallo', $calls['replace'][0][4], 'default-login'], + $calls['replace'][0] + ); + $this->assertSame( + ['common', 'new_topic', 'en', 'Hello', $calls['replace'][1][4], 'default-login'], + $calls['replace'][1] + ); + $this->assertSame(['de', 'common', 'new_topic', 'Hallo'], $calls['cache'][0]); + $this->assertSame(['en', 'common', 'new_topic', 'Hello'], $calls['cache'][1]); + + // "fr" was attempted but never reached update_module_cache() + $this->assertCount(3, $calls['replace']); + $this->assertCount(2, $calls['cache']); + } + } + + /** + * Markup that TranslationMarkupPolicy allows (plain tag, link with allowed scheme) never blocks the request. + */ + public function testAllowedMarkupInEveryLanguageIsWritten(): void + { + $calls = []; + $activity = $this->createActivity( + ['de', 'en'], + replace_lang_entry: $this->spyReplaceLangEntry($calls), + update_module_cache: $this->spyUpdateModuleCache($calls) + ); + + $result = $activity->perform([ + 'module' => 'common', + 'identifier' => 'new_topic', + 'translations' => [ + 'de' => 'Hallo', + 'en' => 'Hello', + ], + 'usr_id' => 6, + ]); + + $this->assertSame(['de', 'en'], $result['added_language_keys']); + $this->assertSame('Hallo', $calls['replace'][0][3]); + $this->assertSame('Hello', $calls['replace'][1][3]); + } + + public function testWhitespaceOnlyValueIsTreatedAsEmptyAndSkipped(): void + { + // 'fr' avoids the separate 'de'/'en' mandatory-value rule + $calls = []; + $activity = $this->createActivity( + ['fr'], + replace_lang_entry: $this->spyReplaceLangEntry($calls), + update_module_cache: $this->spyUpdateModuleCache($calls) + ); + + $result = $activity->perform([ + 'module' => 'common', + 'identifier' => 'new_topic', + 'translations' => ['fr' => " \t "], + 'usr_id' => 6, + ]); + + $this->assertSame([], $result['added_language_keys']); + $this->assertSame(['fr'], $result['skipped_empty_language_keys']); + $this->assertArrayNotHasKey('replace', $calls); + $this->assertArrayNotHasKey('cache', $calls); + } + + public function testValueSurroundedByWhitespaceIsTrimmedBeforeBeingWritten(): void + { + $calls = []; + $activity = $this->createActivity( + ['de'], + replace_lang_entry: $this->spyReplaceLangEntry($calls), + update_module_cache: $this->spyUpdateModuleCache($calls) + ); + + $result = $activity->perform([ + 'module' => 'common', + 'identifier' => 'new_topic', + 'translations' => ['de' => " Hallo Welt "], + 'usr_id' => 6, + ]); + + $this->assertSame(['de'], $result['added_language_keys']); + $this->assertSame('Hallo Welt', $calls['replace'][0][3]); + $this->assertSame('Hallo Welt', $calls['cache'][0][3]); + } + + /** + * A non-string value (direct perform() caller bypassing normalizeParameters()) counts as empty. + */ + public function testNonStringTranslationValueIsTreatedAsEmptyAndSkippedRatherThanCoerced(): void + { + // 'fr' avoids the separate 'de'/'en' mandatory-value rule + $calls = []; + $activity = $this->createActivity( + ['fr'], + replace_lang_entry: $this->spyReplaceLangEntry($calls), + update_module_cache: $this->spyUpdateModuleCache($calls) + ); + + $result = $activity->perform([ + 'module' => 'common', + 'identifier' => 'new_topic', + 'translations' => ['fr' => 42], + 'usr_id' => 6, + ]); + + $this->assertSame([], $result['added_language_keys']); + $this->assertSame(['fr'], $result['skipped_empty_language_keys']); + $this->assertArrayNotHasKey('replace', $calls); + } + + public function testNoInstalledLanguagesResultsInEmptyBucketsAndNoWrites(): void + { + $calls = []; + $activity = $this->createActivity( + [], + replace_lang_entry: $this->spyReplaceLangEntry($calls), + update_module_cache: $this->spyUpdateModuleCache($calls) + ); + + $result = $activity->perform([ + 'module' => 'common', + 'identifier' => 'new_topic', + 'translations' => ['de' => 'Hallo'], + 'usr_id' => 6, + ]); + + $this->assertSame([], $result['added_language_keys']); + $this->assertSame([], $result['skipped_empty_language_keys']); + $this->assertArrayNotHasKey('replace', $calls); + $this->assertArrayNotHasKey('cache', $calls); + } + + public function testUserLoginClosureIsCalledExactlyOnceWithTheGivenUsrIdRegardlessOfLanguageCount(): void + { + $login_calls = []; + $user_login = static function (int $usr_id) use (&$login_calls): string { + $login_calls[] = $usr_id; + return 'resolved-login'; + }; + + $activity = $this->createActivity(['de', 'en'], user_login: $user_login); + + $activity->perform([ + 'module' => 'common', + 'identifier' => 'new_topic', + 'translations' => ['de' => 'Hallo', 'en' => 'Hello'], + 'usr_id' => 99, + ]); + + $this->assertSame([99], $login_calls); + } + + // a missing usr_id is allowed: a caller following the plain Activity contract never supplies one + public function testPerformWithoutUsrIdKeySucceedsWithAnAuthorlessAuditEntryAndNeverCallsUserLoginClosure(): void + { + $login_calls = []; + $user_login = static function (int $usr_id) use (&$login_calls): string { + $login_calls[] = $usr_id; + return 'must-not-be-used'; + }; + + $calls = []; + $activity = $this->createActivity( + ['de', 'en'], + replace_lang_entry: $this->spyReplaceLangEntry($calls), + update_module_cache: $this->spyUpdateModuleCache($calls), + user_login: $user_login + ); + + $result = $activity->perform([ + 'module' => 'common', + 'identifier' => 'new_topic', + 'translations' => ['de' => 'Hallo', 'en' => 'Hello'], + ]); + + $this->assertSame(['de', 'en'], $result['added_language_keys']); + $this->assertSame([], $login_calls, 'user_login() must never be called when usr_id is absent.'); + $this->assertSame('', $calls['replace'][0][5]); + $this->assertSame('', $calls['replace'][1][5]); + } + + /** + * A missing or null usr_id must succeed; only a non-null usr_id of the wrong type is rejected. + */ + public static function validUsrIdMissingOrNullWithValidTranslationsProvider(): array + { + return [ + 'missing usr_id' => [ + ['module' => 'common', 'identifier' => 'foo', 'translations' => ['de' => 'Hallo', 'en' => 'Hello']], + ], + 'null usr_id' => [ + [ + 'module' => 'common', + 'identifier' => 'foo', + 'translations' => ['de' => 'Hallo', 'en' => 'Hello'], + 'usr_id' => null, + ], + ], + ]; + } + + #[DataProvider('validUsrIdMissingOrNullWithValidTranslationsProvider')] + public function testPerformSucceedsWhenUsrIdIsMissingOrNullGivenValidTranslations(array $parameters): void + { + $activity = $this->createActivity(['de', 'en']); + + $result = $activity->perform($parameters); + + $this->assertSame('common', $result['module']); + $this->assertSame('foo', $result['identifier']); + $this->assertSame(['de', 'en'], $result['added_language_keys']); + } + + /** + * An empty translations array is legal: every installed language is reported skipped, not rejected. + */ + public function testEmptyTranslationsArrayIsAcceptedAndSkipsEveryInstalledLanguage(): void + { + // 'fr'/'it' avoid the separate 'de'/'en' mandatory-value rule + $rbac = $this->createStub(\ilRbacSystem::class); + $rbac->method('checkAccessOfUser')->willReturn(true); + + $activity = $this->createActivity(['fr', 'it'], rbac: $rbac); + + $result = $activity->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, [ + 'module' => 'common', + 'identifier' => 'new_topic', + 'translations' => [], + ]); + + $this->assertFalse($result->isError()); + $this->assertSame([], $result->value()['added_language_keys']); + $this->assertSame(['fr', 'it'], $result->value()['skipped_empty_language_keys']); + } +} diff --git a/components/ILIAS/Language/tests/Activities/FailureTest.php b/components/ILIAS/Language/tests/Activities/FailureTest.php new file mode 100644 index 000000000000..43a75f656087 --- /dev/null +++ b/components/ILIAS/Language/tests/Activities/FailureTest.php @@ -0,0 +1,87 @@ +>|list> */ + public static function clientErrorProvider(): array + { + return [ + 'invalid input (400)' => [new InvalidInputException('bad')], + 'forbidden (403)' => [new \DomainException('nope', 403)], + 'ambiguous title (409)' => [new AmbiguousLanguageTitleException('twice')], + 'lowest 4xx' => [new \RuntimeException('x', 400)], + 'highest 4xx' => [new \RuntimeException('x', 499)], + ]; + } + + #[DataProvider('clientErrorProvider')] + public function testOf4xxExceptionPassesThroughUnchanged(\Exception $e): void + { + $this->assertSame($e, Failure::of($e)); + } + + /** @return array>|list> */ + public static function defectProvider(): array + { + return [ + 'code 0' => [new \RuntimeException('SQL: secret', 0)], + 'below 4xx (399)' => [new \RuntimeException('secret', 399)], + 'above 4xx (500)' => [new \RuntimeException('secret', 500)], + 'above 4xx (600)' => [new \RuntimeException('secret', 600)], + 'Error with 4xx code' => [new \TypeError('secret', 400)], + 'plain Error' => [new \Error('secret')], + 'PDOException, SQLSTATE 42S02 as string code' => [self::pdoExceptionWithSqlState('42S02')], + 'PDOException, SQLSTATE 42S22 as string code' => [self::pdoExceptionWithSqlState('42S22')], + ]; + } + + /** PDOException carries its SQLSTATE as string code, which compares numerically against 400..499 in PHP 8. */ + private static function pdoExceptionWithSqlState(string $sql_state): \PDOException + { + return new class ('SQLSTATE: secret table', $sql_state) extends \PDOException { + public function __construct(string $message, string $sql_state) + { + parent::__construct($message); + $this->code = $sql_state; + } + }; + } + + #[DataProvider('defectProvider')] + public function testOfMasksEverythingElseAsGeneric500KeepingTheOriginalAsPrevious(\Throwable $defect): void + { + $failure = Failure::of($defect); + + $this->assertNotSame($defect, $failure); + $this->assertInstanceOf(\RuntimeException::class, $failure); + $this->assertSame(500, $failure->getCode()); + $this->assertSame('The activity could not be performed.', $failure->getMessage()); + $this->assertSame($defect, $failure->getPrevious()); + } +} diff --git a/components/ILIAS/Language/tests/Activities/FakeInstalledLanguageRepository.php b/components/ILIAS/Language/tests/Activities/FakeInstalledLanguageRepository.php new file mode 100644 index 000000000000..8f1a2890a019 --- /dev/null +++ b/components/ILIAS/Language/tests/Activities/FakeInstalledLanguageRepository.php @@ -0,0 +1,87 @@ +installed_languages)(); + } + + public function getInstalledLocalLanguages(): array + { + throw new \LogicException(__METHOD__ . ' is not used by AddLanguageEntry.'); + } + + public function getAvailableLanguages(): array + { + throw new \LogicException(__METHOD__ . ' is not used by AddLanguageEntry.'); + } + + public function getLocalChanges(string $lang_key, string $min_date = "", string $max_date = ""): array + { + throw new \LogicException(__METHOD__ . ' is not used by AddLanguageEntry.'); + } + + public function getLanguageEntries(string $lang_key): array + { + throw new \LogicException(__METHOD__ . ' is not used by AddLanguageEntry.'); + } + + public function getLocalLanguages(): array + { + throw new \LogicException(__METHOD__ . ' is not used by AddLanguageEntry.'); + } + + public function getInstallableLanguages(): array + { + throw new \LogicException(__METHOD__ . ' is not used by AddLanguageEntry.'); + } + + public function getInvalidLocalLanguageFiles(array $language_keys): array + { + throw new \LogicException(__METHOD__ . ' is not used by AddLanguageEntry.'); + } + + public function checkLanguage(string $lang_key): bool + { + throw new \LogicException(__METHOD__ . ' is not used by AddLanguageEntry.'); + } + + public function checkLocalLanguageFile(string $lang_key): bool + { + throw new \LogicException(__METHOD__ . ' is not used by AddLanguageEntry.'); + } +} diff --git a/components/ILIAS/Language/tests/Activities/FakeLanguageObject.php b/components/ILIAS/Language/tests/Activities/FakeLanguageObject.php new file mode 100644 index 000000000000..893e51fbf418 --- /dev/null +++ b/components/ILIAS/Language/tests/Activities/FakeLanguageObject.php @@ -0,0 +1,83 @@ + $unwritten_overlay_modules + */ + public function __construct( + private readonly bool $is_system_language, + private readonly bool $is_user_language, + private readonly bool $is_installed, + private readonly string $uninstall_return_value = 'uninstalled', + private readonly array $unwritten_overlay_modules = [], + ) { + } + + public function isSystemLanguage(): bool + { + return $this->is_system_language; + } + + public function isUserLanguage(): bool + { + return $this->is_user_language; + } + + public function isInstalled(): bool + { + return $this->is_installed; + } + + public function uninstall(): string + { + $this->uninstall_calls++; + + return $this->uninstall_return_value; + } + + /** + * @return list modules whose overlay the last uninstall() could not remove + */ + public function getModulesWithUnwrittenOverlay(): array + { + return $this->unwritten_overlay_modules; + } + + public function uninstallCallCount(): int + { + return $this->uninstall_calls; + } +} diff --git a/components/ILIAS/Language/tests/Activities/FakeRemoveLocalLanguageChangesObject.php b/components/ILIAS/Language/tests/Activities/FakeRemoveLocalLanguageChangesObject.php new file mode 100644 index 000000000000..c56ff172640e --- /dev/null +++ b/components/ILIAS/Language/tests/Activities/FakeRemoveLocalLanguageChangesObject.php @@ -0,0 +1,69 @@ + $modules_with_unwritten_overlay migrated modules whose PO/MO overlay could not be written + */ + public function __construct( + private readonly bool $is_installed, + private readonly bool $remove_local_changes_return_value = true, + private readonly array $modules_with_unwritten_overlay = [], + ) { + } + + public function isInstalled(): bool + { + return $this->is_installed; + } + + public function removeLocalChanges(): bool + { + $this->remove_local_changes_calls++; + + return $this->remove_local_changes_return_value; + } + + /** + * @return list + */ + public function getModulesWithUnwrittenOverlay(): array + { + return $this->modules_with_unwritten_overlay; + } + + public function removeLocalChangesCallCount(): int + { + return $this->remove_local_changes_calls; + } +} diff --git a/components/ILIAS/Language/tests/Activities/GrindsFormInputTest.php b/components/ILIAS/Language/tests/Activities/GrindsFormInputTest.php new file mode 100644 index 000000000000..18f39a391ce0 --- /dev/null +++ b/components/ILIAS/Language/tests/Activities/GrindsFormInputTest.php @@ -0,0 +1,249 @@ +expectException(\LogicException::class); + + $this->host()->callGrind($this->createStub(FormInput::class), []); + } + + public static function checkboxWhitelistAcceptsRawValueProvider(): array + { + return [ + 'bool true' => [true, true], + 'int 1' => [1, true], + 'string "1"' => ['1', true], + 'string "true"' => ['true', true], + 'string "checked"' => ['checked', true], + 'string "on"' => ['on', true], + 'bool false' => [false, false], + 'int 0' => [0, false], + 'string "0"' => ['0', false], + 'string "false"' => ['false', false], + 'empty string' => ['', false], + 'null (field omitted entirely)' => [null, false], + ]; + } + + // real Checkbox field to cover 'checked'/'on', the raw values an HTML checkbox submits + #[DataProvider('checkboxWhitelistAcceptsRawValueProvider')] + public function testGrindNormalizesEveryWhitelistedCheckboxRawValue(mixed $raw_value, bool $expected): void + { + $description = $this->checkboxGroupDescription(); + + $raw_parameters = $raw_value === null ? [] : ['enabled' => $raw_value]; + + $result = $this->host()->callGrind($description, $raw_parameters); + + $this->assertTrue($result->isOk()); + $this->assertSame($expected, $result->value()['enabled']); + } + + /** + * Real Activities nest every field in a top-level Group: collectRawValues() narrows $raw_value only when + * recursing into a Group, so a bare top-level field would receive the whole array. + */ + private function checkboxGroupDescription(): FormInput + { + $checkbox = $this->createRealFieldsUiFactory()->input()->field()->checkbox('Enabled', '') + ->withDedicatedName('enabled'); + + return $this->createRealFieldsUiFactory()->input()->field()->group(['enabled' => $checkbox]); + } + + public static function checkboxWhitelistRejectsRawValueProvider(): array + { + return [ + 'array' => [[true]], + 'float' => [1.0], + 'unrecognized string' => ['maybe'], + ]; + } + + /** Becomes an InvalidInputException (400), shown to the user instead of logged. */ + #[DataProvider('checkboxWhitelistRejectsRawValueProvider')] + public function testGrindRejectsRawValueOutsideTheCheckboxWhitelist(mixed $raw_value): void + { + $result = $this->host()->callGrind($this->checkboxGroupDescription(), ['enabled' => $raw_value]); + + $this->assertTrue($result->isError()); + $error = $result->error(); + $this->assertInstanceOf(InvalidInputException::class, $error); + $this->assertSame(400, $error->getCode()); + } + + /** Same conversion, reached via Text::isClientSideValueOk(). */ + public function testGrindConvertsAUiFrameworkInvalidArgumentExceptionFromANonStringTextValueIntoInvalidInputException(): void + { + $text = $this->createRealFieldsUiFactory()->input()->field()->text('Language key', '') + ->withDedicatedName('language_key'); + $description = $this->createRealFieldsUiFactory()->input()->field()->group([ + 'language_key' => $text, + ]); + + // a bool is passed through collectRawValues() unmodified and reaches Text::withValue() as-is + $result = $this->host()->callGrind($description, ['language_key' => true]); + + $this->assertTrue($result->isError()); + $error = $result->error(); + $this->assertInstanceOf(InvalidInputException::class, $error); + $this->assertSame(400, $error->getCode()); + } + + /** Must read ": ", not Group::withInput()'s generic "ui_error_in_group". */ + public function testGrindReportsAFieldAttributedInvalidInputExceptionOnValidationFailure(): void + { + $language_key = $this->createRealFieldsUiFactory()->input()->field()->text('Language key', '') + ->withRequired(true) + ->withDedicatedName('language_key'); + $description = $this->createRealFieldsUiFactory()->input()->field()->group([ + 'language_key' => $language_key, + ]); + + $result = $this->host()->callGrind($description, []); + + $this->assertTrue($result->isError()); + $error = $result->error(); + $this->assertInstanceOf(InvalidInputException::class, $error); + $this->assertSame(400, $error->getCode()); + $this->assertStringStartsWith('language_key: ', $error->getMessage()); + $this->assertNotSame('language_key: ', $error->getMessage()); + } + + /** ilObjLanguageFolderGUI sends 'language_keys' as array of strings: joined with commas. */ + public function testGrindJoinsAnArrayOfStringsRawValueForATextFieldIntoACommaSeparatedString(): void + { + $language_keys = $this->createRealFieldsUiFactory()->input()->field()->text('Language keys', '') + ->withDedicatedName('language_keys'); + $description = $this->createRealFieldsUiFactory()->input()->field()->group([ + 'language_keys' => $language_keys, + ]); + + $result = $this->host()->callGrind($description, ['language_keys' => ['de', 'fr']]); + + $this->assertTrue($result->isOk()); + $this->assertSame('de,fr', $result->value()['language_keys']); + } + + /** The outermost group does not enforce known keys. */ + public function testGrindSilentlyIgnoresAnUnknownKeyAtTheTopLevelOfRawParameters(): void + { + $name = $this->createRealFieldsUiFactory()->input()->field()->text('Name', '') + ->withDedicatedName('name'); + $description = $this->createRealFieldsUiFactory()->input()->field()->group([ + 'name' => $name, + ]); + + $result = $this->host()->callGrind($description, [ + 'name' => 'Foo', + 'some_unrelated_form_field' => 'bar', + ]); + + $this->assertTrue($result->isOk()); + $this->assertSame('Foo', $result->value()['name']); + } + + /** + * The unknown-key message embeds the key unescaped: escaping is RendersActivityErrors::activityErrorMessage()'s + * job, escaping here would double-escape. + */ + public function testGrindReportsUnknownNestedGroupKeysRawAndUnescaped(): void + { + $de = $this->createRealFieldsUiFactory()->input()->field()->text('German', '') + ->withDedicatedName('de'); + $translations = $this->createRealFieldsUiFactory()->input()->field()->group([ + 'de' => $de, + ])->withDedicatedName('translations'); + $description = $this->createRealFieldsUiFactory()->input()->field()->group([ + 'translations' => $translations, + ]); + + $dangerous_unknown_key = ''; + + $result = $this->host()->callGrind($description, [ + 'translations' => [ + 'de' => 'Hallo', + $dangerous_unknown_key => 'whatever', + ], + ]); + + $this->assertTrue($result->isError()); + $error = $result->error(); + $this->assertInstanceOf(InvalidInputException::class, $error); + $this->assertSame(400, $error->getCode()); + $this->assertStringContainsString('Unknown key(s) for translations: ' . $dangerous_unknown_key, $error->getMessage()); + $this->assertStringContainsString('', $error->getMessage()); + } + + public static function nonArrayNonNullGroupRawValueProvider(): array + { + return [ + 'string' => ['not-an-array'], + 'int' => [42], + 'bool' => [true], + ]; + } + + /** Degrading it to an empty array would mask it as a misleading required-field error. */ + #[DataProvider('nonArrayNonNullGroupRawValueProvider')] + public function testGrindRejectsANonArrayNonNullRawValueForANestedGroupInsteadOfSilentlyDegradingToEmptyArray( + mixed $raw_value + ): void { + $de = $this->createRealFieldsUiFactory()->input()->field()->text('German', '') + ->withDedicatedName('de'); + $translations = $this->createRealFieldsUiFactory()->input()->field()->group([ + 'de' => $de, + ])->withDedicatedName('translations'); + $description = $this->createRealFieldsUiFactory()->input()->field()->group([ + 'translations' => $translations, + ]); + + $result = $this->host()->callGrind($description, ['translations' => $raw_value]); + + $this->assertTrue($result->isError()); + $error = $result->error(); + $this->assertInstanceOf(InvalidInputException::class, $error); + $this->assertSame(400, $error->getCode()); + $this->assertStringContainsString( + 'Expected an array of values (or none at all) for translations, got: ' . get_debug_type($raw_value), + $error->getMessage() + ); + } +} diff --git a/components/ILIAS/Language/tests/Activities/GrindsFormInputTestHost.php b/components/ILIAS/Language/tests/Activities/GrindsFormInputTestHost.php new file mode 100644 index 000000000000..8a60ae15a3d8 --- /dev/null +++ b/components/ILIAS/Language/tests/Activities/GrindsFormInputTestHost.php @@ -0,0 +1,38 @@ +grind($description, $raw_parameters); + } +} diff --git a/components/ILIAS/Language/tests/Activities/InstallLanguageModesTest.php b/components/ILIAS/Language/tests/Activities/InstallLanguageModesTest.php new file mode 100644 index 000000000000..eee84d02a118 --- /dev/null +++ b/components/ILIAS/Language/tests/Activities/InstallLanguageModesTest.php @@ -0,0 +1,502 @@ +createSetupLanguageMock([], [], []); + $setup_language->expects($this->once()) + ->method('checkLanguageForInstallation') + ->with('de') + ->willReturn(true); + $setup_language->expects($this->once())->method('flushLanguageForInstallation'); + $setup_language->expects($this->once())->method('insertLanguageForInstallation'); + + $result = $this->createActivity($setup_language)->perform([ + 'language_keys' => ' de ', + 'mode' => InstallLanguage::MODE_INSTALL, + ]); + + $this->assertSame(['de'], $result['installed_language_keys']); + $this->assertSame([], $result['installed_with_local_language_keys']); + $this->assertSame([], $result['already_installed_language_keys']); + $this->assertSame([], $result['not_installed_language_keys']); + $this->assertSame([], $result['invalid_local_language_files']); + } + + /** + * The Activity passes exactly the language key (no $create_missing_mo flag). Captures the raw arguments, as + * ->with('de') would also accept an additional one. + */ + public function testFullInstallPassesOnlyTheLanguageKey(): void + { + $setup_language = $this->createSetupLanguageMock([], [], []); + $setup_language->method('checkLanguageForInstallation')->willReturn(true); + $calls = []; + $setup_language->expects($this->once()) + ->method('insertLanguageForInstallation') + ->willReturnCallback(static function () use (&$calls): array { + $calls[] = func_get_args(); + return []; + }); + + $this->createActivity($setup_language)->perform([ + 'language_keys' => 'de', + 'mode' => InstallLanguage::MODE_INSTALL, + ]); + + $this->assertSame([['de']], $calls); + } + + /** + * A non-empty list from insertLanguageForInstallation() (migrated modules whose overlay could not be written) + * lands in "overlay_write_failed_language_keys"; the language still counts as installed. + */ + public function testFullInstallListsOnlyTheLanguagesWhoseOverlayCouldNotBeWritten(): void + { + $setup_language = $this->createSetupLanguageMock([], [], []); + $setup_language->method('checkLanguageForInstallation')->willReturn(true); + $setup_language->expects($this->exactly(2))->method('insertLanguageForInstallation')->willReturnMap([ + ['de', ['tos', 'pilot']], + ['fr', []], + ]); + + $result = $this->createActivity($setup_language)->perform([ + 'language_keys' => 'de,fr', + 'mode' => InstallLanguage::MODE_INSTALL, + ]); + + $this->assertSame(['de', 'fr'], $result['installed_language_keys']); + $this->assertSame(['de'], $result['overlay_write_failed_language_keys']); + } + + public function testInstallLocalModeListsTheLanguageWhoseOverlayCouldNotBeWritten(): void + { + $setup_language = $this->createSetupLanguageMock( + [ + 'de' => ['obj_id' => 1, 'status' => 'installed'], + 'en' => ['obj_id' => 2, 'status' => 'installed'], + ], + ['de', 'en'], + ['de', 'en'] + ); + $setup_language->method('checkLanguageForInstallation')->willReturn(true); + $setup_language->expects($this->exactly(2))->method('insertLanguageForApplyingLocalChanges')->willReturnMap([ + ['de', []], + ['en', ['pilot']], + ]); + + $result = $this->createActivity($setup_language)->perform([ + 'language_keys' => ['de', 'en'], + 'mode' => InstallLanguage::MODE_INSTALL_LOCAL, + ]); + + $this->assertSame(['de', 'en'], $result['installed_with_local_language_keys']); + $this->assertSame(['en'], $result['overlay_write_failed_language_keys']); + } + + /** + * @param list $installed + */ + #[\PHPUnit\Framework\Attributes\DataProvider('modesThatApplyTheCustomizingFile')] + public function testListsTheDuplicateCustomizingEntriesOfTheAffectedLanguagesOnly(string $mode, array $installed): void + { + $setup_language = $this->createSetupLanguageStub( + ['de' => ['obj_id' => 1, 'status' => 'installed']], + [], + $installed + ); + $setup_language->method('checkLanguageForInstallation')->willReturn(true); + $setup_language->method('insertLanguageForInstallation')->willReturn([]); + $setup_language->method('insertLanguageForApplyingLocalChanges')->willReturn([]); + $setup_language->method('getSkippedDuplicateEntries')->willReturn([ + 'de' => ['common#:#dup' => ['mme: dup']], + 'fr' => ['common#:#dup' => ['mme: dup']], + ]); + + $result = $this->createActivity($setup_language)->perform(['language_keys' => 'de', 'mode' => $mode]); + + $this->assertSame(['de: common#:#dup (mme: dup)'], $result['duplicate_customizing_entries']); + } + + /** @return array}> */ + public static function modesThatApplyTheCustomizingFile(): array + { + return [ + 'install' => [InstallLanguage::MODE_INSTALL, []], + 'install_local' => [InstallLanguage::MODE_INSTALL_LOCAL, ['de']], + ]; + } + + public function testNothingIsListedWhenEveryOverlayWasWrittenOrNothingWasInstalled(): void + { + $setup_language = $this->createSetupLanguageMock( + ['de' => ['obj_id' => 1, 'status' => 'installed']], + [], + ['de'] + ); + $setup_language->method('checkLanguageForInstallation')->willReturn(true); + $setup_language->expects($this->once())->method('insertLanguageForInstallation')->with('fr')->willReturn([]); + + $result = $this->createActivity($setup_language)->perform([ + 'language_keys' => ['de', 'fr'], + 'mode' => InstallLanguage::MODE_INSTALL, + ]); + + $this->assertSame(['fr'], $result['installed_language_keys']); + $this->assertSame([], $result['overlay_write_failed_language_keys']); + } + + public function testMultipleLanguagesSeparatesNotInstalledFromAlreadyInstalledUnderInstallMode(): void + { + // mode "install": the already installed 'de' is left completely alone, only 'fr' is installed + $setup_language = $this->createSetupLanguageMock( + [ + 'de' => ['obj_id' => 1, 'status' => 'installed'], + ], + [], + ['de'] + ); + $setup_language->expects($this->once()) + ->method('checkLanguageForInstallation') + ->with('fr') + ->willReturn(true); + $setup_language->expects($this->once())->method('flushLanguageForInstallation')->with('fr'); + $setup_language->expects($this->once())->method('insertLanguageForInstallation')->with('fr'); + + $result = $this->createActivity($setup_language)->perform([ + 'language_keys' => [' de, fr ', 'de'], + 'mode' => InstallLanguage::MODE_INSTALL, + ]); + + $this->assertSame(['fr'], $result['installed_language_keys']); + $this->assertSame([], $result['installed_with_local_language_keys']); + $this->assertSame(['de'], $result['already_installed_language_keys']); + $this->assertSame([], $result['not_installed_language_keys']); + $this->assertSame([], $result['invalid_local_language_files']); + } + + public function testNewLanguageWithCustomFileIsReportedAsInstalledWithLocalFile(): void + { + // classified by "has a customizing/local file", not "newly installed" + $setup_language = $this->createSetupLanguageMock( + [], + ['de'], + [] + ); + $setup_language->expects($this->once()) + ->method('checkLanguageForInstallation') + ->with('de') + ->willReturn(true); + $setup_language->expects($this->once())->method('flushLanguageForInstallation')->with('de'); + $setup_language->expects($this->once())->method('insertLanguageForInstallation')->with('de'); + + $result = $this->createActivity($setup_language)->perform([ + 'language_keys' => 'de', + 'mode' => InstallLanguage::MODE_INSTALL, + ]); + + $this->assertSame([], $result['installed_language_keys']); + $this->assertSame(['de'], $result['installed_with_local_language_keys']); + $this->assertSame([], $result['already_installed_language_keys']); + $this->assertSame([], $result['not_installed_language_keys']); + } + + /** + * Mode "install" must not re-install or re-apply the local file of an already installed language. + */ + public function testInstallModeIsNoOpForAlreadyInstalledLanguageEvenWithACustomFile(): void + { + $setup_language = $this->createSetupLanguageMock( + ['de' => ['obj_id' => 1, 'status' => 'installed']], + ['de'], + ['de'] + ); + $setup_language->expects($this->never())->method('checkLanguageForInstallation'); + $setup_language->expects($this->never())->method('flushLanguageForInstallation'); + $setup_language->expects($this->never())->method('insertLanguageForInstallation'); + $setup_language->expects($this->never())->method('insertLanguageForApplyingLocalChanges'); + $setup_language->expects($this->never())->method('registerInstalledLanguage'); + + $result = $this->createActivity($setup_language)->perform([ + 'language_keys' => 'de', + 'mode' => InstallLanguage::MODE_INSTALL, + ]); + + $this->assertSame([], $result['installed_language_keys']); + $this->assertSame([], $result['installed_with_local_language_keys']); + $this->assertSame(['de'], $result['already_installed_language_keys']); + $this->assertSame([], $result['not_installed_language_keys']); + $this->assertSame([], $result['invalid_local_language_files']); + } + + public function testInstallLocalModeAppliesCustomFileToAlreadyInstalledLanguage(): void + { + $setup_language = $this->createSetupLanguageMock( + ['de' => ['obj_id' => 1, 'status' => 'installed']], + ['de'], + ['de'] + ); + $setup_language->expects($this->once())->method('checkLanguageForInstallation')->with('de')->willReturn(true); + $setup_language->expects($this->never())->method('flushLanguageForInstallation'); + $setup_language->expects($this->never())->method('insertLanguageForInstallation'); + $setup_language->expects($this->once()) + ->method('insertLanguageForApplyingLocalChanges') + ->with('de'); + // object_data bookkeeping is delegated to ilSetupLanguage::registerInstalledLanguage(), see ilSetupLanguageTest + $setup_language->expects($this->once()) + ->method('registerInstalledLanguage') + ->with( + 'de', + ['de' => ['obj_id' => 1, 'status' => 'installed']], + ['de'] + ); + + $result = $this->createActivity($setup_language)->perform([ + 'language_keys' => 'de', + 'mode' => InstallLanguage::MODE_INSTALL_LOCAL, + ]); + + $this->assertSame([], $result['installed_language_keys']); + $this->assertSame(['de'], $result['installed_with_local_language_keys']); + $this->assertSame([], $result['already_installed_language_keys']); + $this->assertSame([], $result['not_installed_language_keys']); + $this->assertSame([], $result['invalid_local_language_files']); + } + + public function testInstallLocalModePassesOnlyTheLanguageKey(): void + { + $setup_language = $this->createSetupLanguageMock( + ['de' => ['obj_id' => 1, 'status' => 'installed']], + ['de'], + ['de'] + ); + $setup_language->method('checkLanguageForInstallation')->willReturn(true); + $calls = []; + $setup_language->expects($this->once()) + ->method('insertLanguageForApplyingLocalChanges') + ->willReturnCallback(static function () use (&$calls): array { + $calls[] = func_get_args(); + return []; + }); + + $this->createActivity($setup_language)->perform([ + 'language_keys' => 'de', + 'mode' => InstallLanguage::MODE_INSTALL_LOCAL, + ]); + + $this->assertSame([['de']], $calls); + } + + /** + * "install_local" on an already installed language without a local file runs its write methods, but the result + * must say "already installed", since nothing observable changed. + */ + public function testInstallLocalModeOnAlreadyInstalledLanguageWithoutCustomFileIsReportedAsAlreadyInstalled(): void + { + $setup_language = $this->createSetupLanguageMock( + ['de' => ['obj_id' => 1, 'status' => 'installed']], + [], // no customizing/local file exists for 'de' + ['de'] + ); + $setup_language->expects($this->once())->method('checkLanguageForInstallation')->with('de')->willReturn(true); + $setup_language->expects($this->never())->method('flushLanguageForInstallation'); + $setup_language->expects($this->never())->method('insertLanguageForInstallation'); + $setup_language->expects($this->once()) + ->method('insertLanguageForApplyingLocalChanges') + ->with('de'); + $setup_language->expects($this->once())->method('registerInstalledLanguage'); + + $result = $this->createActivity($setup_language)->perform([ + 'language_keys' => 'de', + 'mode' => InstallLanguage::MODE_INSTALL_LOCAL, + ]); + + $this->assertSame([], $result['installed_language_keys']); + $this->assertSame([], $result['installed_with_local_language_keys']); + $this->assertSame(['de'], $result['already_installed_language_keys']); + $this->assertSame([], $result['not_installed_language_keys']); + } + + /** + * "install_local" on a language that is not installed at all is a complete no-op. + */ + public function testInstallLocalModeOnNotInstalledLanguageIsCompleteNoOp(): void + { + $setup_language = $this->createSetupLanguageMock([], [], []); + $setup_language->expects($this->never())->method('checkLanguageForInstallation'); + $setup_language->expects($this->never())->method('flushLanguageForInstallation'); + $setup_language->expects($this->never())->method('insertLanguageForInstallation'); + $setup_language->expects($this->never())->method('insertLanguageForApplyingLocalChanges'); + $setup_language->expects($this->never())->method('registerInstalledLanguage'); + + $result = $this->createActivity($setup_language)->perform([ + 'language_keys' => 'de', + 'mode' => InstallLanguage::MODE_INSTALL_LOCAL, + ]); + + $this->assertSame([], $result['installed_language_keys']); + $this->assertSame([], $result['installed_with_local_language_keys']); + $this->assertSame([], $result['already_installed_language_keys']); + $this->assertSame(['de'], $result['not_installed_language_keys']); + } + + /** + * If every requested language is a no-op, perform() must not read the available/local languages or scan for + * invalid local files. + */ + public function testAllRequestedLanguagesBeingNoOpsSkipsLanguageAndFileLookupsEntirely(): void + { + $setup_language = $this->createMock(ilSetupLanguage::class); + $setup_language->method('getInstalledLanguages')->willReturn(['de', 'en']); + $setup_language->expects($this->never())->method('getAvailableLanguagesForInstallation'); + $setup_language->expects($this->never())->method('getLocalLanguages'); + $setup_language->expects($this->never())->method('getInvalidLocalLanguageFiles'); + $setup_language->expects($this->never())->method('checkLanguageForInstallation'); + $setup_language->expects($this->never())->method('flushLanguageForInstallation'); + $setup_language->expects($this->never())->method('insertLanguageForInstallation'); + $setup_language->expects($this->never())->method('insertLanguageForApplyingLocalChanges'); + $setup_language->expects($this->never())->method('registerInstalledLanguage'); + + $result = $this->createActivity($setup_language)->perform([ + 'language_keys' => ['de', 'en'], + 'mode' => InstallLanguage::MODE_INSTALL, + ]); + + $this->assertSame([], $result['installed_language_keys']); + $this->assertSame([], $result['installed_with_local_language_keys']); + $this->assertSame(['de', 'en'], $result['already_installed_language_keys']); + $this->assertSame([], $result['not_installed_language_keys']); + $this->assertSame([], $result['invalid_local_language_files']); + } + + /** + * Languages in every state at once land in their own bucket; only affected ones trigger a write (mode "install"). + */ + public function testBulkRequestUnderInstallModePartitionsEachKeyIntoTheCorrectBucket(): void + { + $setup_language = $this->createSetupLanguageMock( + ['de' => ['obj_id' => 1, 'status' => 'installed']], + ['fr'], // only 'fr' has a pending customizing/local file + ['de'] + ); + $setup_language->expects($this->exactly(2)) + ->method('checkLanguageForInstallation') + ->willReturnMap([ + ['en', true], + ['fr', true], + ]); + $setup_language->expects($this->exactly(2))->method('flushLanguageForInstallation'); + $setup_language->expects($this->exactly(2))->method('insertLanguageForInstallation'); + $setup_language->expects($this->never())->method('insertLanguageForApplyingLocalChanges'); + $setup_language->expects($this->exactly(2))->method('registerInstalledLanguage'); + $setup_language->expects($this->once()) + ->method('getInvalidLocalLanguageFiles') + ->with(['en', 'fr']); + + $result = $this->createActivity($setup_language)->perform([ + 'language_keys' => ['de', 'en', 'fr'], + 'mode' => InstallLanguage::MODE_INSTALL, + ]); + + $this->assertSame(['en'], $result['installed_language_keys']); + $this->assertSame(['fr'], $result['installed_with_local_language_keys']); + $this->assertSame(['de'], $result['already_installed_language_keys']); + $this->assertSame([], $result['not_installed_language_keys']); + } + + /** + * Mode "install_local": only insertLanguageForApplyingLocalChanges, only for already installed keys. + */ + public function testBulkRequestUnderInstallLocalModePartitionsEachKeyIntoTheCorrectBucket(): void + { + $setup_language = $this->createSetupLanguageMock( + [ + 'de' => ['obj_id' => 1, 'status' => 'installed'], + 'en' => ['obj_id' => 2, 'status' => 'installed'], + ], + ['de'], // only 'de' has a pending customizing/local file + ['de', 'en'] + ); + $setup_language->expects($this->exactly(2))->method('checkLanguageForInstallation')->willReturn(true); + $setup_language->expects($this->never())->method('flushLanguageForInstallation'); + $setup_language->expects($this->never())->method('insertLanguageForInstallation'); + $setup_language->expects($this->exactly(2)) + ->method('insertLanguageForApplyingLocalChanges') + ->with($this->logicalOr('de', 'en')); + $setup_language->expects($this->exactly(2))->method('registerInstalledLanguage'); + $setup_language->expects($this->once()) + ->method('getInvalidLocalLanguageFiles') + ->with(['de', 'en']); + + $result = $this->createActivity($setup_language)->perform([ + 'language_keys' => ['de', 'en', 'fr'], + 'mode' => InstallLanguage::MODE_INSTALL_LOCAL, + ]); + + $this->assertSame([], $result['installed_language_keys']); + $this->assertSame(['de'], $result['installed_with_local_language_keys']); + $this->assertSame(['en'], $result['already_installed_language_keys']); + $this->assertSame(['fr'], $result['not_installed_language_keys']); + } + + public function testInstallingNewLanguageDoesNotUpdateAlreadyInstalledLanguages(): void + { + $setup_language = $this->createSetupLanguageMock( + [ + 'en' => ['obj_id' => 1, 'status' => 'installed'], + ], + [], + ['en'] + ); + $setup_language->expects($this->once()) + ->method('checkLanguageForInstallation') + ->with('de') + ->willReturn(true); + $setup_language->expects($this->once())->method('flushLanguageForInstallation'); + $setup_language->expects($this->once())->method('insertLanguageForInstallation'); + $setup_language->expects($this->once()) + ->method('registerInstalledLanguage') + ->with( + 'de', + ['en' => ['obj_id' => 1, 'status' => 'installed']], + [] + ); + + $result = $this->createActivity($setup_language)->perform([ + 'language_keys' => 'de', + 'mode' => InstallLanguage::MODE_INSTALL, + ]); + + $this->assertSame(['de'], $result['installed_language_keys']); + $this->assertSame([], $result['installed_with_local_language_keys']); + $this->assertSame([], $result['already_installed_language_keys']); + $this->assertSame([], $result['invalid_local_language_files']); + } +} diff --git a/components/ILIAS/Language/tests/Activities/InstallLanguageTest.php b/components/ILIAS/Language/tests/Activities/InstallLanguageTest.php new file mode 100644 index 000000000000..d24cd578ebd5 --- /dev/null +++ b/components/ILIAS/Language/tests/Activities/InstallLanguageTest.php @@ -0,0 +1,334 @@ +createSetupLanguageStub(['de'], [], []); + $setup_language->method('checkLanguageForInstallation')->willReturn(true); + + return $this->createActivity($setup_language); + } + + protected function validPerformParameters(): array + { + return ['language_keys' => 'de', 'mode' => InstallLanguage::MODE_INSTALL]; + } + + public function testMalformedLocalLanguageFileDoesNotPreventStandardInstallation(): void + { + $setup_language = $this->createSetupLanguageMock([], [], [], ['ilias_de.lang.locl']); + $setup_language->expects($this->once()) + ->method('getInvalidLocalLanguageFiles') + ->with(['de']) + ->willReturn(['ilias_de.lang.locl']); + $setup_language->expects($this->once()) + ->method('checkLanguageForInstallation') + ->with('de') + ->willReturn(true); + $setup_language->expects($this->once())->method('flushLanguageForInstallation'); + $setup_language->expects($this->once())->method('insertLanguageForInstallation'); + + $result = $this->createActivity($setup_language)->perform([ + 'language_keys' => 'de', + 'mode' => InstallLanguage::MODE_INSTALL, + ]); + + $this->assertSame(['de'], $result['installed_language_keys']); + $this->assertSame(['ilias_de.lang.locl'], $result['invalid_local_language_files']); + } + + public function testInvalidLanguageFileIsReportedAsActivityError(): void + { + $setup_language = $this->createSetupLanguageMock([], [], []); + $setup_language->expects($this->once()) + ->method('checkLanguageForInstallation') + ->with('xx') + ->willReturn(false); + $setup_language->method('getInstallableLanguagesForInstallation')->willReturn(['xx']); + $setup_language->expects($this->never())->method('flushLanguageForInstallation'); + $setup_language->expects($this->never())->method('insertLanguageForInstallation'); + + $this->expectException(InvalidLanguageFilesException::class); + $this->expectExceptionCode(409); + $this->createActivity($setup_language)->perform([ + 'language_keys' => 'xx', + 'mode' => InstallLanguage::MODE_INSTALL, + ]); + } + + public function testMixedValidAndInvalidLanguagesDoNotMutate(): void + { + $setup_language = $this->createSetupLanguageMock([], [], []); + $setup_language->expects($this->exactly(2)) + ->method('checkLanguageForInstallation') + ->willReturnMap([ + ['de', true], + ['xx', false], + ]); + $setup_language->method('getInstallableLanguagesForInstallation')->willReturn(['de', 'xx']); + $setup_language->expects($this->never())->method('flushLanguageForInstallation'); + $setup_language->expects($this->never())->method('insertLanguageForInstallation'); + + $this->expectException(InvalidLanguageFilesException::class); + $this->expectExceptionCode(409); + $this->createActivity($setup_language)->perform([ + 'language_keys' => 'de,xx', + 'mode' => InstallLanguage::MODE_INSTALL, + ]); + } + + public function testUnknownLanguageIsRejectedAsInvalidInputWithoutMutation(): void + { + $setup_language = $this->createSetupLanguageMock([], [], []); + $setup_language->method('checkLanguageForInstallation')->willReturn(false); + $setup_language->method('getInstallableLanguagesForInstallation')->willReturn(['de']); + $setup_language->expects($this->never())->method('flushLanguageForInstallation'); + $setup_language->expects($this->never())->method('insertLanguageForInstallation'); + + try { + $this->createActivity($setup_language)->perform([ + 'language_keys' => 'qq', + 'mode' => InstallLanguage::MODE_INSTALL, + ]); + $this->fail('InvalidInputException expected'); + } catch (InvalidInputException $e) { + $this->assertSame(400, $e->getCode()); + $this->assertSame('Unknown languages: qq', $e->getMessage()); + } + } + + /** The unknown language decides: the caller has to fix its input first. Only unknown keys are named. */ + public function testUnknownAndInvalidLanguagesTogetherAreRejectedAsInvalidInput(): void + { + $setup_language = $this->createSetupLanguageMock([], [], []); + $setup_language->method('checkLanguageForInstallation')->willReturnMap([ + ['de', true], + ['xx', false], + ['qq', false], + ]); + $setup_language->method('getInstallableLanguagesForInstallation')->willReturn(['de', 'xx']); + $setup_language->expects($this->never())->method('flushLanguageForInstallation'); + $setup_language->expects($this->never())->method('insertLanguageForInstallation'); + + try { + $this->createActivity($setup_language)->perform([ + 'language_keys' => 'de,xx,qq', + 'mode' => InstallLanguage::MODE_INSTALL, + ]); + $this->fail('InvalidInputException expected'); + } catch (InvalidInputException $e) { + $this->assertSame(400, $e->getCode()); + $this->assertSame('Unknown languages: qq', $e->getMessage()); + } + } + + /** + * "install_local" merges the shipped files too: an invalid one of an installed language rejects the request (409) + * before anything is written, languages that are not installed are not checked. + */ + public function testInstallLocalModeWithAnInvalidLanguageFileIsReportedAsActivityErrorWithoutWriting(): void + { + $setup_language = $this->createSetupLanguageMock([], [], ['de', 'fr']); + $setup_language->expects($this->exactly(2)) + ->method('checkLanguageForInstallation') + ->willReturnMap([ + ['de', false], + ['fr', true], + ]); + $setup_language->method('getInstallableLanguagesForInstallation')->willReturn(['fr']); + $setup_language->expects($this->never())->method('insertLanguageForApplyingLocalChanges'); + $setup_language->expects($this->never())->method('registerInstalledLanguage'); + + try { + $this->createActivity($setup_language)->perform([ + 'language_keys' => 'de,fr,qq', + 'mode' => InstallLanguage::MODE_INSTALL_LOCAL, + ]); + $this->fail('InvalidLanguageFilesException expected'); + } catch (InvalidLanguageFilesException $e) { + $this->assertSame(409, $e->getCode()); + $this->assertSame(['de'], $e->getLanguageKeys()); + } + } + + public function testMissingModeParameterIsRejected(): void + { + $this->expectException(InvalidInputException::class); + + $this->createActivity($this->createSetupLanguageStub([], [], []))->perform([ + 'language_keys' => 'de', + ]); + } + + public function testInvalidModeValueIsRejected(): void + { + $this->expectException(InvalidInputException::class); + + $this->createActivity($this->createSetupLanguageStub([], [], []))->perform([ + 'language_keys' => 'de', + 'mode' => 'foo', + ]); + } + + public function testInputDescriptionUsesNamedLanguageKeysAndModeFields(): void + { + $text = $this->createMock(Text::class); + $text->expects($this->once())->method('withRequired')->with(true)->willReturnSelf(); + $text->expects($this->once()) + ->method('withDedicatedName') + ->with('language_keys') + ->willReturnSelf(); + + $select = $this->createMock(Select::class); + $select->expects($this->once())->method('withRequired')->with(true)->willReturnSelf(); + $select->expects($this->once()) + ->method('withDedicatedName') + ->with('mode') + ->willReturnSelf(); + + $field = $this->createMock(\ILIAS\UI\Component\Input\Field\Factory::class); + $field->expects($this->once())->method('text')->with( + 'Language keys', + 'Comma-separated list of language keys, e.g. de, fr, it.' + )->willReturn($text); + $field->expects($this->once())->method('select')->with( + 'Mode', + [ + InstallLanguage::MODE_INSTALL => 'Install', + InstallLanguage::MODE_INSTALL_LOCAL => 'Install local', + ], + self::callback(static fn(mixed $value): bool => is_string($value)) + )->willReturn($select); + + $group = $this->createStub(\ILIAS\UI\Component\Input\Field\Section::class); + $field->expects($this->once()) + ->method('section') + ->with(['language_keys' => $text, 'mode' => $select], $this->anything()) + ->willReturn($group); + + $activity = $this->createActivity( + $this->createSetupLanguageStub([], [], []) + ); + + $this->assertSame($group, $activity->getInputDescription($field)); + } + + public static function invalidLanguageKeysProvider(): array + { + return [ + 'empty (only whitespace/commas)' => [ + ['language_keys' => ' , ', 'mode' => InstallLanguage::MODE_INSTALL], + ], + 'nested array value' => [ + ['language_keys' => ['de', ['fr']], 'mode' => InstallLanguage::MODE_INSTALL], + ], + // format validation of ParsesLanguageKeyList::toLanguageKeyList() + 'three letters' => [ + ['language_keys' => 'deu', 'mode' => InstallLanguage::MODE_INSTALL], + ], + 'one letter' => [ + ['language_keys' => 'd', 'mode' => InstallLanguage::MODE_INSTALL], + ], + 'uppercase' => [ + ['language_keys' => 'DE', 'mode' => InstallLanguage::MODE_INSTALL], + ], + 'contains a digit' => [ + ['language_keys' => 'de1', 'mode' => InstallLanguage::MODE_INSTALL], + ], + 'contains a hyphen' => [ + ['language_keys' => 'de-at', 'mode' => InstallLanguage::MODE_INSTALL], + ], + ]; + } + + #[DataProvider('invalidLanguageKeysProvider')] + public function testInvalidLanguageKeysAreRejected(array $parameters): void + { + $this->expectException(InvalidInputException::class); + + $this->createActivity($this->createSetupLanguageStub([], [], []))->perform($parameters); + } + + /** Pins InvalidInputException, not just its parent \InvalidArgumentException. */ + public function testNonArrayParametersAreRejected(): void + { + $this->expectException(InvalidInputException::class); + + $this->createActivity($this->createSetupLanguageStub([], [], []))->perform('not-an-array'); + } + + /** ilObjLanguageFolderGUI sends 'language_keys' as array of strings; the real grind() pipeline must join it. */ + public function testMaybePerformAsAcceptsAnArrayOfLanguageKeysAndInstallsEachOne(): void + { + $rbac = $this->createStub(\ilRbacSystem::class); + $rbac->method('checkAccessOfUser')->willReturn(true); + + $setup_language = $this->createSetupLanguageMock([], [], []); + $setup_language->method('checkLanguageForInstallation')->willReturn(true); + $setup_language->expects($this->exactly(2))->method('flushLanguageForInstallation'); + $setup_language->expects($this->exactly(2))->method('insertLanguageForInstallation'); + + $result = $this->createActivity($setup_language, $rbac)->maybePerformAs( + $this->createRealFieldsUiFactory()->input(), + 6, + ['language_keys' => ['de', 'fr'], 'mode' => InstallLanguage::MODE_INSTALL] + ); + + $this->assertTrue($result->isOk()); + $this->assertSame(['de', 'fr'], $result->value()['installed_language_keys']); + } + + public function testPermissionDeniedBeforePerform(): void + { + $rbac = $this->createMock(\ilRbacSystem::class); + $rbac->expects($this->once()) + ->method('checkAccessOfUser') + ->with( + 6, + 'write', + $this->anything() + ) + ->willReturn(false); + + $setup_language = $this->createSetupLanguageMock([], [], []); + $setup_language->expects($this->never())->method('getAvailableLanguagesForInstallation'); + $result = $this->createActivity( + $setup_language, + $rbac + )->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, ['language_keys' => 'de', 'mode' => InstallLanguage::MODE_INSTALL]); + + $this->assertTrue($result->isError()); + } +} diff --git a/components/ILIAS/Language/tests/Activities/InstallLanguageTestFixture.php b/components/ILIAS/Language/tests/Activities/InstallLanguageTestFixture.php new file mode 100644 index 000000000000..1c328cc08155 --- /dev/null +++ b/components/ILIAS/Language/tests/Activities/InstallLanguageTestFixture.php @@ -0,0 +1,90 @@ +rbacOf($rbac ?? $this->createStub(\ilRbacSystem::class)), + $setup_language, + $this->languageFolder() + ); + } + + protected function createSetupLanguageMock( + array $available_languages, + array $local_language_keys, + array $installed_language_keys, + array $invalid_local_language_files = [] + ): MockObject&ilSetupLanguage { + $setup_language = $this->createMock(ilSetupLanguage::class); + $this->configureSetupLanguage( + $setup_language, + $available_languages, + $local_language_keys, + $installed_language_keys, + $invalid_local_language_files + ); + + return $setup_language; + } + + /** For call sites without ->expects(): a plain mock there triggers PHPUnit's "no expectations" notice. */ + protected function createSetupLanguageStub( + array $available_languages, + array $local_language_keys, + array $installed_language_keys, + array $invalid_local_language_files = [] + ): Stub&ilSetupLanguage { + $setup_language = $this->createStub(ilSetupLanguage::class); + $this->configureSetupLanguage( + $setup_language, + $available_languages, + $local_language_keys, + $installed_language_keys, + $invalid_local_language_files + ); + + return $setup_language; + } + + private function configureSetupLanguage( + ilSetupLanguage&Stub $setup_language, + array $available_languages, + array $local_language_keys, + array $installed_language_keys, + array $invalid_local_language_files + ): void { + $setup_language->method('getAvailableLanguagesForInstallation')->willReturn($available_languages); + $setup_language->method('getLocalLanguages')->willReturn($local_language_keys); + $setup_language->method('getInstalledLanguages')->willReturn($installed_language_keys); + $setup_language->method('getInvalidLocalLanguageFiles')->willReturn($invalid_local_language_files); + } +} diff --git a/components/ILIAS/Language/tests/Activities/LanguageActivitySetupVariantTest.php b/components/ILIAS/Language/tests/Activities/LanguageActivitySetupVariantTest.php new file mode 100644 index 000000000000..0b207f1d550b --- /dev/null +++ b/components/ILIAS/Language/tests/Activities/LanguageActivitySetupVariantTest.php @@ -0,0 +1,91 @@ +}> + */ + public static function setupActivities(): array + { + return [ + 'install' => [InstallLanguage::class], + 'update' => [UpdateLanguage::class], + ]; + } + + /** + * @param class-string $class + */ + #[DataProvider('setupActivities')] + public function testForSetupActivityRefusesIsAllowedToPerform(string $class): void + { + $activity = $class::forSetup($this->createStub(\ilSetupLanguage::class)); + + $this->expectException(\LogicException::class); + $activity->isAllowedToPerform(6, []); + } + + public function testWebActivityAsksRbacSystemOnlyInIsAllowedToPerform(): void + { + $system = $this->createMock(\ilRbacSystem::class); + $system->expects(self::once())->method('checkAccessOfUser') + ->with(6, 'write', 77)->willReturn(true); + $rbac = $this->createMock(\ILIAS\AccessControl\PublicInterface\RBAC::class); + $rbac->expects(self::once())->method('system')->willReturn($system); + + $activity = new InstallLanguage( + $rbac, + $this->createStub(\ilSetupLanguage::class), + $this->languageFolder(77) + ); + + self::assertTrue($activity->isAllowedToPerform(6, [])); + } + + public function testForSetupActivityStillPerformsWithoutRbac(): void + { + $setup_language = $this->createStub(\ilSetupLanguage::class); + $setup_language->method('getInstalledLanguages')->willReturn(['de']); + + $result = UpdateLanguage::forSetup($setup_language)->perform(['language_keys' => ['fr']]); + + self::assertSame( + [ + 'updated_language_keys' => [], + 'not_installed_language_keys' => ['fr'], + 'overlay_write_failed_language_keys' => [], + 'invalid_markup_customizing_entries' => [], + 'duplicate_customizing_entries' => [], + ], + $result + ); + } +} diff --git a/components/ILIAS/Language/tests/Activities/LanguageActivityTest.php b/components/ILIAS/Language/tests/Activities/LanguageActivityTest.php new file mode 100644 index 000000000000..977d3cd11a60 --- /dev/null +++ b/components/ILIAS/Language/tests/Activities/LanguageActivityTest.php @@ -0,0 +1,345 @@ +createMock(\ilRbacSystem::class); + $rbac->expects($this->never())->method('checkAccessOfUser'); + + $activity = new LanguageActivityThrowingInputDescriptionTestDouble( + $this->rbacOf($rbac), + $this->languageFolder() + ); + + $result = $activity->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, []); + + $this->assertTrue($result->isError()); + $error = $result->error(); + $this->assertInstanceOf(\RuntimeException::class, $error); + $this->assertSame(500, $error->getCode()); + $this->assertSame('The activity could not be performed.', $error->getMessage()); + $this->assertInstanceOf(\RuntimeException::class, $error->getPrevious()); + $this->assertSame('simulated failure while building the input description', $error->getPrevious()->getMessage()); + } + + /** A non-\Exception \Throwable (\TypeError) is masked as well. */ + public function testATypeErrorWhileBuildingTheInputDescriptionIsMaskedAsA500ResultError(): void + { + $activity = new LanguageActivityThrowingInputDescriptionTestDouble( + $this->rbacOf($this->createMock(\ilRbacSystem::class)), + $this->languageFolder(), + throw_type_error: true, + ); + + $error = $activity->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, [])->error(); + + $this->assertInstanceOf(\RuntimeException::class, $error); + $this->assertSame(500, $error->getCode()); + $this->assertStringNotContainsString('TypeError', $error->getMessage()); + $this->assertInstanceOf(\TypeError::class, $error->getPrevious()); + } + + /** grind() throws on a defect (FormInput without InputInternal); maybePerformAs() must mask it as 500. */ + public function testADefectThrownByGrindIsMaskedAsA500ResultError(): void + { + $activity = new LanguageActivityPerformEchoTestDouble( + $this->rbacOf($this->createMock(\ilRbacSystem::class)), + $this->languageFolder(), + $this->createMock(FormInput::class), + ); + + $error = $activity->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, [])->error(); + + $this->assertSame(500, $error->getCode()); + $this->assertInstanceOf(\LogicException::class, $error->getPrevious()); + } + + /** @return array */ + public static function unknownUserIdProvider(): array + { + return ['zero' => [0], 'negative' => [-1], 'anonymous' => [null]]; + } + + /** No RBAC lookup for a non-user: the anonymous user (null: ANONYMOUS_USER_ID) must not pass on its roles. */ + #[DataProvider('unknownUserIdProvider')] + public function testIsAllowedToPerformRefusesNonUsersWithoutAskingRbac(?int $usr_id): void + { + if (!defined('ANONYMOUS_USER_ID')) { + define('ANONYMOUS_USER_ID', 13); + } + $usr_id ??= ANONYMOUS_USER_ID; + + $rbac_system = $this->createMock(\ilRbacSystem::class); + $rbac_system->expects($this->never())->method('checkAccessOfUser'); + + $activity = new LanguageActivityPerformEchoTestDouble( + $this->rbacOf($rbac_system), + $this->languageFolder() + ); + + $this->assertFalse($activity->isAllowedToPerform($usr_id, [])); + } + + public function testMaybePerformAsAnswers403ForANonUserAndNeverPerforms(): void + { + $rbac_system = $this->createMock(\ilRbacSystem::class); + $rbac_system->expects($this->never())->method('checkAccessOfUser'); + + $activity = new LanguageActivityPerformEchoTestDouble( + $this->rbacOf($rbac_system), + $this->languageFolder() + ); + + $error = $activity->maybePerformAs($this->createRealFieldsUiFactory()->input(), 0, [])->error(); + + $this->assertSame(403, $error->getCode()); + } + + /** + * perform() gets the usr_id of maybePerformAs(), not the spoofed one from normalizeParameters(). Needs a + * dedicated double, as no real Activity collects a 'usr_id' field. + */ + public function testMaybePerformAsPassesTheTrustedUsrIdToPerformOverASpoofedFormKey(): void + { + $rbac = $this->createStub(\ilRbacSystem::class); + $rbac->method('checkAccessOfUser')->willReturn(true); + + $activity = new LanguageActivityPerformEchoTestDouble( + $this->rbacOf($rbac), + $this->languageFolder() + ); + + $result = $activity->maybePerformAs($this->createRealFieldsUiFactory()->input(), 42, []); + + $this->assertFalse($result->isError()); + $parameters = $result->value(); + // the trusted usr_id (42) wins over the spoofed one from normalizeParameters() + $this->assertSame(42, $parameters['usr_id']); + // a non-colliding key survives the merge + $this->assertSame('form', $parameters['source']); + } + + /** + * Skipped entries are listed with their markup, language-neutral and without duplicates; only the requested + * languages appear, in requested order. + */ + public function testInvalidMarkupCustomizingEntriesAppendTheMarkupConcernedToEachEntry(): void + { + $policy = new TranslationMarkupPolicy(); + $skipped = [ + 'de' => [ + 'tos#:#x' => $policy->findViolations(''), + 'tos#:#plain' => [], + ], + 'en' => ['tos#:#y' => $policy->findViolations('')], + 'fr' => ['tos#:#z' => $policy->findViolations('')], + ]; + $activity = new LanguageActivityInvalidMarkupTestDouble( + $this->rbacOf($this->createStub(\ilRbacSystem::class)), + $this->languageFolder() + ); + + $this->assertSame( + ['en: tos#:#y: &"quoted"'; + + try { + $this->createActivity(repository: $repository) + ->perform(['language_key' => $dangerous_key, 'enabled' => true]); + $this->fail('Expected an InvalidInputException to be thrown.'); + } catch (InvalidInputException $e) { + $this->assertStringContainsString($dangerous_key, $e->getMessage()); + $this->assertStringNotContainsString('<script>', $e->getMessage()); + $this->assertStringNotContainsString('"', $e->getMessage()); + } + } + + /** Same rejection end-to-end: it passes grind() and the permission check, perform() rejects it. */ + public function testMaybePerformAsRejectsUnknownLanguageKeyAfterPermissionCheckAndNeverTouchesSettings(): void + { + $rbac = $this->createMock(\ilRbacSystem::class); + $rbac->expects($this->once())->method('checkAccessOfUser')->willReturn(true); + + $repository = $this->createMock(RepositoryProvider::class); + $repository->expects($this->never())->method('isPageTranslationEnabled'); + $repository->expects($this->never())->method('setPageTranslationEnabled'); + + $result = $this->createActivity(rbac_system: $rbac, repository: $repository) + ->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, ['language_key' => 'xx', 'enabled' => true]); + + $this->assertTrue($result->isError()); + $this->assertInstanceOf(InvalidInputException::class, $result->error()); + $this->assertSame(400, $result->error()->getCode()); + } + + /** A language_key with surrounding whitespace resolves to the same setting key as via perform(). */ + public function testMaybePerformAsTrimsLanguageKeyBeforeBuildingTheSettingKey(): void + { + $rbac = $this->createStub(\ilRbacSystem::class); + $rbac->method('checkAccessOfUser')->willReturn(true); + + $repository = $this->createMock(RepositoryProvider::class); + $repository->expects($this->once())->method('isPageTranslationEnabled')->with('de')->willReturn(false); + $repository->expects($this->once())->method('setPageTranslationEnabled')->with('de', true); + + $result = $this->createActivity(rbac_system: $rbac, repository: $repository) + ->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, ['language_key' => ' de ', 'enabled' => true]); + + $this->assertFalse($result->isError()); + $this->assertSame('de', $result->value()['language_key']); + } + + public function testInputDescriptionBuildsAGroupWithARequiredLanguageKeyTextFieldAndAnEnabledCheckbox(): void + { + $text = $this->createMock(Text::class); + $text->expects($this->once())->method('withRequired')->with(true)->willReturnSelf(); + $text->expects($this->once())->method('withDedicatedName')->with('language_key')->willReturnSelf(); + + $checkbox = $this->createMock(Checkbox::class); + $checkbox->expects($this->once()) + ->method('withDedicatedName') + ->with('enabled') + ->willReturnSelf(); + + $field = $this->createMock(\ILIAS\UI\Component\Input\Field\Factory::class); + $field->expects($this->once()) + ->method('text') + ->with( + 'Language key', + 'Language key the page translation setting applies to, e.g. de, fr, it.' + ) + ->willReturn($text); + $field->expects($this->once()) + ->method('checkbox') + ->with( + 'Enabled', + 'Whether page translation should be enabled for this language.' + ) + ->willReturn($checkbox); + + $group = $this->createMock(\ILIAS\UI\Component\Input\Field\Section::class); + $field->expects($this->once()) + ->method('section') + ->with(['language_key' => $text, 'enabled' => $checkbox], $this->anything()) + ->willReturn($group); + + $activity = $this->createActivity(); + + $this->assertSame($group, $activity->getInputDescription($field)); + } + + /** Real DescriptionFactory: a mocked with([...]) would accept the fields in any order. */ + public function testOutputDescriptionDescribesTheThreeDocumentedFieldsInOrder(): void + { + $activity = $this->createActivity(); + + $description = $activity->getOutputDescription(new DescriptionFactory()); + + $field_names = []; + foreach ($description->getFields() as $field) { + $field_names[] = $field->getName(); + } + + $this->assertSame(['language_key', 'enabled', 'changed'], $field_names); + } + + private function createActivity( + ?\ilRbacSystem $rbac_system = null, + (RepositoryProvider&MockObject)|null $repository = null, + int $language_folder_ref_id = 0, + array $installed_languages = ['de', 'fr'], + ): SetLanguageTranslationEnabled { + $repository ??= $this->createMock(RepositoryProvider::class); + $repository->method('getInstalledLanguages')->willReturn($installed_languages); + + return new SetLanguageTranslationEnabled( + $this->rbacOf($rbac_system ?? $this->createMock(\ilRbacSystem::class)), + $this->languageFolder($language_folder_ref_id), + $repository, + ); + } +} diff --git a/components/ILIAS/Language/tests/Activities/UninstallLanguageAmbiguityTest.php b/components/ILIAS/Language/tests/Activities/UninstallLanguageAmbiguityTest.php new file mode 100644 index 000000000000..f6637b353598 --- /dev/null +++ b/components/ILIAS/Language/tests/Activities/UninstallLanguageAmbiguityTest.php @@ -0,0 +1,203 @@ + [ + ['obj_id' => 1, 'title' => 'de'], + ['obj_id' => 2, 'title' => 'de'], + ]; + $factory_calls = []; + $obj_language_factory = static function (int $id) use (&$factory_calls): never { + $factory_calls[] = $id; + throw new \LogicException('must never be called for an ambiguous title'); + }; + + $activity = $this->createActivity($lng_objects, $obj_language_factory); + + $this->expectException(\RuntimeException::class); + $this->expectExceptionMessageMatches('/"de"/'); + + try { + $activity->perform(['language_keys' => 'de']); + } finally { + $this->assertSame([], $factory_calls); + } + } + + /** + * The exception message embeds the ambiguous title unescaped: escaping is + * RendersActivityErrors::activityErrorMessage()'s job. + */ + public function testAmbiguousTitleExceptionMessageContainsTheRawUnescapedTitle(): void + { + $ambiguous_title = 'de'; + $lng_objects = static fn(): array => [ + ['obj_id' => 1, 'title' => $ambiguous_title], + ['obj_id' => 2, 'title' => $ambiguous_title], + ]; + $obj_language_factory = static function (int $id): never { + throw new \LogicException('must never be called for an ambiguous title'); + }; + + $activity = $this->createActivity($lng_objects, $obj_language_factory); + + try { + $activity->perform(['language_keys' => $ambiguous_title]); + $this->fail('Expected an AmbiguousLanguageTitleException to be thrown.'); + } catch (AmbiguousLanguageTitleException $e) { + $this->assertStringContainsString($ambiguous_title, $e->getMessage()); + $this->assertStringNotContainsString('<script>', $e->getMessage()); + $this->assertStringNotContainsString('"', $e->getMessage()); + } + } + + /** + * Via maybePerformAs() the exception must surface as a Result\Error, and the object factory stays untouched. + */ + public function testAmbiguousTitleViaMaybePerformAsReturnsResultErrorAndNeverCallsTheObjectFactory(): void + { + $rbac = $this->createStub(\ilRbacSystem::class); + $rbac->method('checkAccessOfUser')->willReturn(true); + + $lng_objects = static fn(): array => [ + ['obj_id' => 1, 'title' => 'de'], + ['obj_id' => 2, 'title' => 'de'], + ]; + $factory_calls = []; + $obj_language_factory = static function (int $id) use (&$factory_calls): never { + $factory_calls[] = $id; + throw new \LogicException('must never be called for an ambiguous title'); + }; + + $result = $this->createActivity($lng_objects, $obj_language_factory, $rbac) + ->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, ['language_keys' => 'de']); + + $this->assertTrue($result->isError()); + $this->assertInstanceOf(\RuntimeException::class, $result->error()); + $this->assertSame([], $factory_calls); + } + + /** + * An ambiguous title must not affect a unique language key in the same request. + */ + public function testUnambiguousLanguageKeyStillWorksAlongsideAnAmbiguousOneInTheSameLngObjectsList(): void + { + $lng_objects = static fn(): array => [ + ['obj_id' => 1, 'title' => 'de'], + ['obj_id' => 2, 'title' => 'de'], + ['obj_id' => 3, 'title' => 'fr'], + ]; + $fr = new FakeLanguageObject(is_system_language: false, is_user_language: false, is_installed: true); + $obj_language_factory = static function (int $id) use ($fr): FakeLanguageObject { + if ($id === 3) { + return $fr; + } + + throw new \LogicException('must never be called for the ambiguous "de" title'); + }; + + $activity = $this->createActivity($lng_objects, $obj_language_factory); + + $result = $activity->perform(['language_keys' => 'fr']); + + $this->assertSame(['fr'], $result['uninstalled_language_keys']); + $this->assertSame(1, $fr->uninstallCallCount()); + } + + /** + * The ambiguity check runs for all requested keys before any uninstall() call. + */ + public function testAnUnambiguousKeyBeforeAnAmbiguousOneIsNeverUninstalledOnceTheWholeRequestIsRejected(): void + { + $de = new FakeLanguageObject(is_system_language: false, is_user_language: false, is_installed: true); + + $lng_objects = static fn(): array => [ + ['obj_id' => 1, 'title' => 'de'], + ['obj_id' => 2, 'title' => 'fr'], + ['obj_id' => 3, 'title' => 'fr'], + ]; + $factory_calls = []; + $obj_language_factory = static function (int $id) use (&$factory_calls, $de): FakeLanguageObject { + $factory_calls[] = $id; + if ($id === 1) { + return $de; + } + + throw new \LogicException('must never be called for the ambiguous "fr" title'); + }; + + $activity = $this->createActivity($lng_objects, $obj_language_factory); + + try { + // 'de' is listed before the ambiguous 'fr' on purpose: an inline check would uninstall 'de' first + $activity->perform(['language_keys' => 'de,fr']); + $this->fail('Expected an AmbiguousLanguageTitleException to be thrown.'); + } catch (AmbiguousLanguageTitleException $e) { + $this->assertStringContainsString('"fr"', $e->getMessage()); + // 'de' was never resolved, let alone uninstalled + $this->assertSame([], $factory_calls); + $this->assertSame(0, $de->uninstallCallCount()); + } + } + + /** + * Same, end-to-end through maybePerformAs(). + */ + public function testMaybePerformAsNeverUninstallsAnUnambiguousKeyWhenAnotherRequestedKeyIsAmbiguous(): void + { + $rbac = $this->createStub(\ilRbacSystem::class); + $rbac->method('checkAccessOfUser')->willReturn(true); + + $de = new FakeLanguageObject(is_system_language: false, is_user_language: false, is_installed: true); + + $lng_objects = static fn(): array => [ + ['obj_id' => 1, 'title' => 'de'], + ['obj_id' => 2, 'title' => 'fr'], + ['obj_id' => 3, 'title' => 'fr'], + ]; + $obj_language_factory = static function (int $id) use ($de): FakeLanguageObject { + if ($id === 1) { + return $de; + } + + throw new \LogicException('must never be called for the ambiguous "fr" title'); + }; + + $result = $this->createActivity($lng_objects, $obj_language_factory, $rbac) + ->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, ['language_keys' => ['de', 'fr']]); + + $this->assertTrue($result->isError()); + $this->assertInstanceOf(AmbiguousLanguageTitleException::class, $result->error()); + $this->assertSame(0, $de->uninstallCallCount()); + } +} diff --git a/components/ILIAS/Language/tests/Activities/UninstallLanguageTest.php b/components/ILIAS/Language/tests/Activities/UninstallLanguageTest.php new file mode 100644 index 000000000000..2153a3a876ae --- /dev/null +++ b/components/ILIAS/Language/tests/Activities/UninstallLanguageTest.php @@ -0,0 +1,412 @@ +buildFakeLanguageWorld(['de' => []]); + + return $this->createActivity($lng_objects, $obj_language_factory); + } + + protected function validPerformParameters(): array + { + return ['language_keys' => 'de']; + } + + public function testThrowableFromWithinPerformIsTurnedIntoAResultErrorByMaybePerformAs(): void + { + $rbac = $this->createStub(\ilRbacSystem::class); + $rbac->method('checkAccessOfUser')->willReturn(true); + + $lng_objects = static fn(): array => [ + ['obj_id' => 1, 'title' => 'de'], + ['obj_id' => 2, 'title' => 'de'], + ]; + $obj_language_factory = static function (int $id): never { + throw new \LogicException('must never be called for an ambiguous title'); + }; + + $result = $this->createActivity($lng_objects, $obj_language_factory, $rbac) + ->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, ['language_keys' => 'de']); + + $this->assertTrue($result->isError()); + $this->assertInstanceOf(\RuntimeException::class, $result->error()); + } + + /** + * @param array}> $language_objects keyed by language key + * @return array{0: array, 1: \Closure, 2: \Closure} + * [obj id => fake object, lng_objects closure, obj_language_factory closure] + */ + private function buildFakeLanguageWorld(array $language_objects): array + { + $lng_objects_list = []; + $fakes_by_obj_id = []; + $obj_id = 1; + + foreach ($language_objects as $language_key => $flags) { + $lng_objects_list[] = ['obj_id' => $obj_id, 'title' => $language_key]; + $fakes_by_obj_id[$obj_id] = new FakeLanguageObject( + is_system_language: $flags['system'] ?? false, + is_user_language: $flags['user'] ?? false, + is_installed: $flags['installed'] ?? true, + uninstall_return_value: $flags['uninstall_return'] ?? 'uninstalled', + unwritten_overlay_modules: $flags['unwritten_overlay_modules'] ?? [], + ); + $obj_id++; + } + + $lng_objects = static fn(): array => $lng_objects_list; + $obj_language_factory = static fn(int $id): FakeLanguageObject => $fakes_by_obj_id[$id]; + + return [$fakes_by_obj_id, $lng_objects, $obj_language_factory]; + } + + public function testInstalledOrdinaryLanguageIsUninstalled(): void + { + [$fakes, $lng_objects, $obj_language_factory] = $this->buildFakeLanguageWorld([ + 'de' => [], + ]); + + $result = $this->createActivity($lng_objects, $obj_language_factory)->perform([ + 'language_keys' => 'de', + ]); + + $this->assertSame(['de'], $result['uninstalled_language_keys']); + $this->assertSame([], $result['system_language_keys']); + $this->assertSame([], $result['user_language_keys']); + $this->assertSame([], $result['not_installed_language_keys']); + $this->assertSame([], $result['overlay_write_failed_language_keys']); + $this->assertSame(1, $fakes[1]->uninstallCallCount()); + } + + public function testSystemLanguageIsNeverUninstalled(): void + { + [$fakes, $lng_objects, $obj_language_factory] = $this->buildFakeLanguageWorld([ + 'de' => ['system' => true], + ]); + + $result = $this->createActivity($lng_objects, $obj_language_factory)->perform([ + 'language_keys' => 'de', + ]); + + $this->assertSame([], $result['uninstalled_language_keys']); + $this->assertSame(['de'], $result['system_language_keys']); + $this->assertSame([], $result['user_language_keys']); + $this->assertSame([], $result['not_installed_language_keys']); + $this->assertSame(0, $fakes[1]->uninstallCallCount()); + } + + public function testLanguageCurrentlyInUseIsNeverUninstalled(): void + { + [$fakes, $lng_objects, $obj_language_factory] = $this->buildFakeLanguageWorld([ + 'de' => ['user' => true], + ]); + + $result = $this->createActivity($lng_objects, $obj_language_factory)->perform([ + 'language_keys' => 'de', + ]); + + $this->assertSame([], $result['uninstalled_language_keys']); + $this->assertSame([], $result['system_language_keys']); + $this->assertSame(['de'], $result['user_language_keys']); + $this->assertSame([], $result['not_installed_language_keys']); + $this->assertSame(0, $fakes[1]->uninstallCallCount()); + } + + /** isSystemLanguage() takes priority over "in use" when both flags are set. */ + public function testSystemLanguageTakesPriorityOverUserLanguage(): void + { + [$fakes, $lng_objects, $obj_language_factory] = $this->buildFakeLanguageWorld([ + 'de' => ['system' => true, 'user' => true], + ]); + + $result = $this->createActivity($lng_objects, $obj_language_factory)->perform([ + 'language_keys' => 'de', + ]); + + $this->assertSame(['de'], $result['system_language_keys']); + $this->assertSame([], $result['user_language_keys']); + } + + public function testExistingButNotInstalledLanguageObjectIsReportedAsNotInstalled(): void + { + [$fakes, $lng_objects, $obj_language_factory] = $this->buildFakeLanguageWorld([ + 'de' => ['installed' => false], + ]); + + $result = $this->createActivity($lng_objects, $obj_language_factory)->perform([ + 'language_keys' => 'de', + ]); + + $this->assertSame([], $result['uninstalled_language_keys']); + $this->assertSame([], $result['system_language_keys']); + $this->assertSame([], $result['user_language_keys']); + $this->assertSame(['de'], $result['not_installed_language_keys']); + $this->assertSame(0, $fakes[1]->uninstallCallCount()); + } + + /** uninstall() returning '' is the authority: reported as not_installed_language_keys, never as uninstalled. */ + public function testLanguageWhereUninstallItselfRejectsIsReportedAsNotInstalled(): void + { + [$fakes, $lng_objects, $obj_language_factory] = $this->buildFakeLanguageWorld([ + 'de' => ['uninstall_return' => ''], + ]); + + $result = $this->createActivity($lng_objects, $obj_language_factory)->perform([ + 'language_keys' => 'de', + ]); + + $this->assertSame([], $result['uninstalled_language_keys']); + $this->assertSame([], $result['system_language_keys']); + $this->assertSame([], $result['user_language_keys']); + $this->assertSame(['de'], $result['not_installed_language_keys']); + // uninstall() must still have been attempted + $this->assertSame(1, $fakes[1]->uninstallCallCount()); + } + + /** A module whose PO/MO overlay could not be removed is reported in addition to the successful uninstall. */ + public function testOverlayWriteFailureIsReportedAlongsideTheSuccessfulUninstall(): void + { + [$fakes, $lng_objects, $obj_language_factory] = $this->buildFakeLanguageWorld([ + 'de' => ['unwritten_overlay_modules' => ['pilot']], + 'fr' => [], + ]); + + $result = $this->createActivity($lng_objects, $obj_language_factory)->perform(['language_keys' => 'de,fr']); + + $this->assertSame(['de', 'fr'], $result['uninstalled_language_keys']); + $this->assertSame(['de'], $result['overlay_write_failed_language_keys']); + $this->assertSame(1, $fakes[1]->uninstallCallCount()); + } + + /** A language the guards of uninstall() rejected has no overlay state to report. */ + public function testNoOverlayWriteFailureIsReportedForALanguageUninstallRejected(): void + { + [, $lng_objects, $obj_language_factory] = $this->buildFakeLanguageWorld([ + 'de' => ['uninstall_return' => '', 'unwritten_overlay_modules' => ['pilot']], + ]); + + $result = $this->createActivity($lng_objects, $obj_language_factory)->perform(['language_keys' => 'de']); + + $this->assertSame(['de'], $result['not_installed_language_keys']); + $this->assertSame([], $result['overlay_write_failed_language_keys']); + } + + /** A key without a "lng" object is not installed, and the object factory is never invoked for it. */ + public function testUnknownLanguageKeyIsReportedAsNotInstalledWithoutTouchingTheObjectFactory(): void + { + $lng_objects = static fn(): array => []; + $factory_calls = []; + $obj_language_factory = static function (int $id) use (&$factory_calls): FakeLanguageObject { + $factory_calls[] = $id; + throw new \LogicException('must never be called for an unknown language key'); + }; + + $result = $this->createActivity($lng_objects, $obj_language_factory)->perform([ + 'language_keys' => 'xx', + ]); + + $this->assertSame([], $result['uninstalled_language_keys']); + $this->assertSame([], $result['system_language_keys']); + $this->assertSame([], $result['user_language_keys']); + $this->assertSame(['xx'], $result['not_installed_language_keys']); + $this->assertSame([], $factory_calls); + } + + /** + * Languages in every state at once land in their own bucket; only the uninstalled one calls uninstall(). + */ + public function testMixedBulkRequestPartitionsEachKeyIntoTheCorrectBucket(): void + { + [$fakes, $lng_objects, $obj_language_factory] = $this->buildFakeLanguageWorld([ + 'de' => [], + 'en' => ['system' => true], + 'fr' => ['user' => true], + 'it' => ['installed' => false], + ]); + + $result = $this->createActivity($lng_objects, $obj_language_factory)->perform([ + 'language_keys' => ['de', 'en', 'fr', 'it', 'xx'], + ]); + + $this->assertSame(['de'], $result['uninstalled_language_keys']); + $this->assertSame(['en'], $result['system_language_keys']); + $this->assertSame(['fr'], $result['user_language_keys']); + $this->assertSame(['it', 'xx'], $result['not_installed_language_keys']); + + $this->assertSame(1, $fakes[1]->uninstallCallCount(), 'de must be uninstalled'); + $this->assertSame(0, $fakes[2]->uninstallCallCount(), 'system language must never be uninstalled'); + $this->assertSame(0, $fakes[3]->uninstallCallCount(), 'in-use language must never be uninstalled'); + $this->assertSame(0, $fakes[4]->uninstallCallCount(), 'not-installed language must never be uninstalled'); + } + + public function testDuplicateLanguageKeysAcrossStringAndArrayAreDeduplicated(): void + { + [$fakes, $lng_objects, $obj_language_factory] = $this->buildFakeLanguageWorld([ + 'de' => [], + ]); + + $result = $this->createActivity($lng_objects, $obj_language_factory)->perform([ + 'language_keys' => [' de, de ', 'de'], + ]); + + $this->assertSame(['de'], $result['uninstalled_language_keys']); + $this->assertSame(1, $fakes[1]->uninstallCallCount()); + } + + public static function invalidLanguageKeysProvider(): array + { + return [ + 'missing language_keys key' => [[]], + 'empty (only whitespace/commas)' => [['language_keys' => ' , ']], + 'nested array value' => [['language_keys' => ['de', ['fr']]]], + 'three letters' => [['language_keys' => 'deu']], + 'one letter' => [['language_keys' => 'd']], + 'uppercase' => [['language_keys' => 'DE']], + 'contains a digit' => [['language_keys' => 'de1']], + 'contains a hyphen' => [['language_keys' => 'de-at']], + ]; + } + + #[DataProvider('invalidLanguageKeysProvider')] + public function testInvalidLanguageKeysAreRejected(array $parameters): void + { + $this->expectException(InvalidInputException::class); + + $this->createActivity(static fn(): array => [], static fn(int $id) => null)->perform($parameters); + } + + /** Pins InvalidInputException, not just its parent \InvalidArgumentException. */ + public function testNonArrayParametersAreRejected(): void + { + $this->expectException(InvalidInputException::class); + + $this->createActivity(static fn(): array => [], static fn(int $id) => null)->perform('not-an-array'); + } + + public function testInputDescriptionUsesOnlyTheLanguageKeysFieldWithNoModeField(): void + { + $text = $this->createMock(Text::class); + $text->expects($this->once())->method('withRequired')->with(true)->willReturnSelf(); + $text->expects($this->once()) + ->method('withDedicatedName') + ->with('language_keys') + ->willReturnSelf(); + + $field = $this->createMock(\ILIAS\UI\Component\Input\Field\Factory::class); + $field->expects($this->once())->method('text')->with( + 'Language keys', + 'Comma-separated list of language keys, e.g. de, fr, it.' + )->willReturn($text); + // no mode parameter: the select field must never be built + $field->expects($this->never())->method('select'); + + $group = $this->createMock(\ILIAS\UI\Component\Input\Field\Section::class); + $field->expects($this->once()) + ->method('section') + ->with(['language_keys' => $text], $this->anything()) + ->willReturn($group); + + $activity = $this->createActivity( + static fn(): array => [], + static fn(int $id) => null + ); + + $this->assertSame($group, $activity->getInputDescription($field)); + } + + public function testPermissionDeniedBeforePerformNeverCallsObjectFactoryOrUninstall(): void + { + $rbac = $this->createMock(\ilRbacSystem::class); + $rbac->expects($this->once()) + ->method('checkAccessOfUser') + ->with(6, 'write', $this->anything()) + ->willReturn(false); + + [$fakes, $lng_objects, $obj_language_factory] = $this->buildFakeLanguageWorld([ + 'de' => [], + ]); + $result = $this->createActivity( + $lng_objects, + $obj_language_factory, + $rbac + )->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, ['language_keys' => 'de']); + + $this->assertTrue($result->isError()); + $this->assertSame(0, $fakes[1]->uninstallCallCount()); + } + + public function testPermissionGrantedPerformsAndReturnsOkResult(): void + { + $rbac = $this->createStub(\ilRbacSystem::class); + $rbac->method('checkAccessOfUser')->willReturn(true); + + [$fakes, $lng_objects, $obj_language_factory] = $this->buildFakeLanguageWorld([ + 'de' => [], + ]); + + $result = $this->createActivity( + $lng_objects, + $obj_language_factory, + $rbac + )->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, ['language_keys' => 'de']); + + $this->assertFalse($result->isError()); + $this->assertSame(['de'], $result->value()['uninstalled_language_keys']); + $this->assertSame(1, $fakes[1]->uninstallCallCount()); + } + + /** ilObjLanguageFolderGUI sends 'language_keys' as array of strings; the real grind() pipeline must join it. */ + public function testMaybePerformAsAcceptsAnArrayOfLanguageKeysAndUninstallsEachOne(): void + { + $rbac = $this->createStub(\ilRbacSystem::class); + $rbac->method('checkAccessOfUser')->willReturn(true); + + [$fakes, $lng_objects, $obj_language_factory] = $this->buildFakeLanguageWorld([ + 'de' => [], + 'fr' => [], + ]); + + $result = $this->createActivity($lng_objects, $obj_language_factory, $rbac) + ->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, ['language_keys' => ['de', 'fr']]); + + $this->assertFalse($result->isError()); + $this->assertSame(['de', 'fr'], $result->value()['uninstalled_language_keys']); + $this->assertSame(1, $fakes[1]->uninstallCallCount()); + $this->assertSame(1, $fakes[2]->uninstallCallCount()); + } +} diff --git a/components/ILIAS/Language/tests/Activities/UninstallLanguageTestFixture.php b/components/ILIAS/Language/tests/Activities/UninstallLanguageTestFixture.php new file mode 100644 index 000000000000..a0e4821b171a --- /dev/null +++ b/components/ILIAS/Language/tests/Activities/UninstallLanguageTestFixture.php @@ -0,0 +1,43 @@ +rbacOf($rbac ?? $this->createStub(\ilRbacSystem::class)), + $this->languageFolder(), + $repository ?? $this->languageObjectProvider($lng_objects, $obj_language_factory) + ); + } +} diff --git a/components/ILIAS/Language/tests/Activities/UpdateLanguageTest.php b/components/ILIAS/Language/tests/Activities/UpdateLanguageTest.php new file mode 100644 index 000000000000..5b5667b1ba75 --- /dev/null +++ b/components/ILIAS/Language/tests/Activities/UpdateLanguageTest.php @@ -0,0 +1,493 @@ +createSetupLanguageStub([], [], ['de']); + $setup_language->method('checkLanguageForInstallation')->willReturn(true); + + return $this->createActivity($setup_language); + } + + protected function validPerformParameters(): array + { + return ['language_keys' => 'de']; + } + + /** + * UpdateLanguage passes exactly the language key. Captures the raw arguments, as ->with('de') would also + * accept an additional one. + */ + public function testPassesOnlyTheLanguageKeyToInsertLanguageForInstallation(): void + { + $setup_language = $this->createSetupLanguageStub([], [], ['de']); + $setup_language->method('checkLanguageForInstallation')->willReturn(true); + $calls = []; + $setup_language->method('insertLanguageForInstallation')->willReturnCallback( + static function () use (&$calls): array { + $calls[] = func_get_args(); + return []; + } + ); + + $this->createActivity($setup_language)->perform(['language_keys' => 'de']); + + $this->assertSame([['de']], $calls); + } + + /** + * A non-empty return of insertLanguageForInstallation() (migrated modules whose overlay could not be written) + * lists the language, which still counts as updated. + */ + public function testListsOnlyTheLanguagesWhoseOverlayCouldNotBeWritten(): void + { + $setup_language = $this->createSetupLanguageMock([], [], ['de', 'fr']); + $setup_language->method('checkLanguageForInstallation')->willReturn(true); + $setup_language->expects($this->exactly(2))->method('insertLanguageForInstallation')->willReturnMap([ + ['de', []], + ['fr', ['pilot']], + ]); + + $result = $this->createActivity($setup_language)->perform(['language_keys' => 'de,fr,it']); + + $this->assertSame(['de', 'fr'], $result['updated_language_keys']); + $this->assertSame(['it'], $result['not_installed_language_keys']); + $this->assertSame(['fr'], $result['overlay_write_failed_language_keys']); + } + + public function testListsTheDuplicateCustomizingEntriesOfTheUpdatedLanguagesOnly(): void + { + $setup_language = $this->createSetupLanguageStub([], [], ['de', 'fr']); + $setup_language->method('checkLanguageForInstallation')->willReturn(true); + $setup_language->method('insertLanguageForInstallation')->willReturn([]); + $setup_language->method('getSkippedDuplicateEntries')->willReturn([ + 'de' => ['common#:#dup' => ['mme: dup']], + 'fr' => ['common#:#dup' => ['mme: dup']], + ]); + + $result = $this->createActivity($setup_language)->perform(['language_keys' => 'de']); + + $this->assertSame(['de: common#:#dup (mme: dup)'], $result['duplicate_customizing_entries']); + } + + public function testNothingIsListedWhenEveryOverlayWasWritten(): void + { + $setup_language = $this->createSetupLanguageMock([], [], ['de']); + $setup_language->method('checkLanguageForInstallation')->willReturn(true); + $setup_language->expects($this->once())->method('insertLanguageForInstallation')->with('de')->willReturn([]); + + $result = $this->createActivity($setup_language)->perform(['language_keys' => 'de']); + + $this->assertSame([], $result['overlay_write_failed_language_keys']); + } + + /** + * The update also re-applies the plugin language files, once and only for languages actually updated. + */ + public function testReappliesThePluginLanguageFilesForTheUpdatedLanguagesOnly(): void + { + $setup_language = $this->createSetupLanguageStub([], [], ['de', 'fr']); + $setup_language->method('checkLanguageForInstallation')->willReturn(true); + $repository = $this->createMock(RepositoryProvider::class); + $repository->expects($this->once())->method('refreshPlugins')->with(['de', 'fr']); + + $this->createActivity($setup_language, null, $repository)->perform(['language_keys' => 'de,fr,it']); + } + + public function testNothingUpdatedNothingToReapply(): void + { + $repository = $this->createMock(RepositoryProvider::class); + $repository->expects($this->never())->method('refreshPlugins'); + + $this->createActivity($this->createSetupLanguageStub([], [], []), null, $repository) + ->perform(['language_keys' => 'de']); + } + + /** The Setup instance has no provider: the plugin objectives apply the plugin language files there. */ + public function testTheSetupInstanceUpdatesWithoutRefreshingPlugins(): void + { + $setup_language = $this->createSetupLanguageStub([], [], ['de']); + $setup_language->method('checkLanguageForInstallation')->willReturn(true); + + $result = UpdateLanguage::forSetup($setup_language)->perform(['language_keys' => 'de']); + + $this->assertSame(['de'], $result['updated_language_keys']); + } + + public function testSingleAlreadyInstalledLanguageIsRefreshed(): void + { + $setup_language = $this->createSetupLanguageMock([], [], ['de']); + $setup_language->expects($this->once()) + ->method('checkLanguageForInstallation') + ->with('de') + ->willReturn(true); + $setup_language->expects($this->once())->method('flushLanguageForInstallation')->with('de'); + $setup_language->expects($this->once())->method('insertLanguageForInstallation')->with('de'); + $setup_language->expects($this->once())->method('registerInstalledLanguage')->with( + 'de', + [], + [] + ); + + $result = $this->createActivity($setup_language)->perform([ + 'language_keys' => ' de ', + ]); + + $this->assertSame(['de'], $result['updated_language_keys']); + $this->assertSame([], $result['not_installed_language_keys']); + } + + /** + * A language that is not installed is a complete no-op, not even checkLanguageForInstallation may run; + * InstallLanguage installs it. + */ + public function testSingleNotInstalledLanguageIsCompleteNoOp(): void + { + $setup_language = $this->createSetupLanguageMock([], [], []); + $setup_language->expects($this->never())->method('checkLanguageForInstallation'); + $setup_language->expects($this->never())->method('flushLanguageForInstallation'); + $setup_language->expects($this->never())->method('insertLanguageForInstallation'); + $setup_language->expects($this->never())->method('registerInstalledLanguage'); + + $result = $this->createActivity($setup_language)->perform([ + 'language_keys' => 'de', + ]); + + $this->assertSame([], $result['updated_language_keys']); + $this->assertSame(['de'], $result['not_installed_language_keys']); + } + + /** + * Installed and not installed languages at once land in their own bucket; only the installed one triggers a write. + */ + public function testMixedListPartitionsEachKeyIntoTheCorrectBucket(): void + { + $setup_language = $this->createSetupLanguageMock([], [], ['de']); + $setup_language->expects($this->once()) + ->method('checkLanguageForInstallation') + ->with('de') + ->willReturn(true); + $setup_language->expects($this->once())->method('flushLanguageForInstallation')->with('de'); + $setup_language->expects($this->once())->method('insertLanguageForInstallation')->with('de'); + $setup_language->expects($this->once())->method('registerInstalledLanguage')->with('de', [], []); + + $result = $this->createActivity($setup_language)->perform([ + 'language_keys' => ['de', 'fr'], + ]); + + $this->assertSame(['de'], $result['updated_language_keys']); + $this->assertSame(['fr'], $result['not_installed_language_keys']); + } + + /** registerInstalledLanguage() gets the available and the local languages in this order; distinguishable shapes expose a swap. */ + public function testRegisterInstalledLanguageReceivesKnownLanguagesAndLocalLanguageKeysInTheCorrectOrder(): void + { + $setup_language = $this->createSetupLanguageMock( + ['en' => ['obj_id' => 1, 'status' => 'installed']], // $db_languages + ['fr'], // $local_language_keys + ['de'] // installed + ); + $setup_language->method('checkLanguageForInstallation')->willReturn(true); + $setup_language->expects($this->once()) + ->method('registerInstalledLanguage') + ->with( + 'de', + ['en' => ['obj_id' => 1, 'status' => 'installed']], + ['fr'] + ); + + $this->createActivity($setup_language)->perform([ + 'language_keys' => 'de', + ]); + } + + public function testInvalidLanguageFileOfAnAlreadyInstalledLanguagePreventsRefreshAndThrows(): void + { + $setup_language = $this->createSetupLanguageMock([], [], ['de']); + $setup_language->expects($this->once()) + ->method('checkLanguageForInstallation') + ->with('de') + ->willReturn(false); + $setup_language->expects($this->never())->method('flushLanguageForInstallation'); + $setup_language->expects($this->never())->method('insertLanguageForInstallation'); + $setup_language->expects($this->never())->method('registerInstalledLanguage'); + + $this->expectException(InvalidLanguageFilesException::class); + $this->expectExceptionCode(409); + $this->expectExceptionMessage('Invalid language files: de'); + + $this->createActivity($setup_language)->perform([ + 'language_keys' => 'de', + ]); + } + + /** + * All invalid keys among the refreshed ones are collected into one error; the not-installed key is never validated. + */ + public function testMultipleInvalidLanguageFilesAreAllReportedTogether(): void + { + $setup_language = $this->createSetupLanguageMock([], [], ['de', 'xx']); + $setup_language->expects($this->exactly(2)) + ->method('checkLanguageForInstallation') + ->willReturnMap([ + ['de', false], + ['xx', false], + ]); + $setup_language->expects($this->never())->method('flushLanguageForInstallation'); + $setup_language->expects($this->never())->method('insertLanguageForInstallation'); + $setup_language->expects($this->never())->method('registerInstalledLanguage'); + + $this->expectException(InvalidLanguageFilesException::class); + $this->expectExceptionCode(409); + $this->expectExceptionMessage('Invalid language files: de, xx'); + + $this->createActivity($setup_language)->perform([ + 'language_keys' => ['de', 'xx', 'fr'], // 'fr' is not installed - untouched + ]); + } + + /** + * If every requested language is not installed, perform() must not read the available/local languages. + */ + public function testAllRequestedLanguagesNotInstalledSkipsLanguageLookupsEntirely(): void + { + $setup_language = $this->createMock(ilSetupLanguage::class); + $setup_language->method('getInstalledLanguages')->willReturn([]); + $setup_language->expects($this->never())->method('getAvailableLanguagesForInstallation'); + $setup_language->expects($this->never())->method('getLocalLanguages'); + $setup_language->expects($this->never())->method('checkLanguageForInstallation'); + $setup_language->expects($this->never())->method('flushLanguageForInstallation'); + $setup_language->expects($this->never())->method('insertLanguageForInstallation'); + $setup_language->expects($this->never())->method('registerInstalledLanguage'); + + $result = $this->createActivity($setup_language)->perform([ + 'language_keys' => ['de', 'en'], + ]); + + $this->assertSame([], $result['updated_language_keys']); + $this->assertSame(['de', 'en'], $result['not_installed_language_keys']); + } + + /** + * UpdateLanguage must never look at whether a local file is invalid (InstallLanguage mode "install_local" does). + */ + public function testNeverInspectsInvalidLocalLanguageFiles(): void + { + $setup_language = $this->createSetupLanguageMock([], [], ['de']); + $setup_language->method('checkLanguageForInstallation')->willReturn(true); + $setup_language->expects($this->never())->method('getInvalidLocalLanguageFiles'); + + $this->createActivity($setup_language)->perform([ + 'language_keys' => 'de', + ]); + } + + public function testDuplicateLanguageKeysAcrossStringAndArrayAreDeduplicated(): void + { + $setup_language = $this->createSetupLanguageMock([], [], ['de']); + $setup_language->expects($this->once()) + ->method('checkLanguageForInstallation') + ->with('de') + ->willReturn(true); + $setup_language->expects($this->once())->method('flushLanguageForInstallation')->with('de'); + $setup_language->expects($this->once())->method('insertLanguageForInstallation')->with('de'); + $setup_language->expects($this->once())->method('registerInstalledLanguage'); + + $result = $this->createActivity($setup_language)->perform([ + 'language_keys' => [' de, de ', 'de'], + ]); + + $this->assertSame(['de'], $result['updated_language_keys']); + } + + public static function invalidLanguageKeysProvider(): array + { + return [ + 'missing language_keys key' => [[]], + 'empty (only whitespace/commas)' => [['language_keys' => ' , ']], + 'nested array value' => [['language_keys' => ['de', ['fr']]]], + 'three letters' => [['language_keys' => 'deu']], + 'one letter' => [['language_keys' => 'd']], + 'uppercase' => [['language_keys' => 'DE']], + 'contains a digit' => [['language_keys' => 'de1']], + 'contains a hyphen' => [['language_keys' => 'de-at']], + ]; + } + + #[DataProvider('invalidLanguageKeysProvider')] + public function testInvalidLanguageKeysAreRejected(array $parameters): void + { + $this->expectException(InvalidInputException::class); + + $this->createActivity($this->createSetupLanguageStub([], [], []))->perform($parameters); + } + + /** Pins InvalidInputException, not just its parent \InvalidArgumentException. */ + public function testNonArrayParametersAreRejected(): void + { + $this->expectException(InvalidInputException::class); + + $this->createActivity($this->createSetupLanguageStub([], [], []))->perform('not-an-array'); + } + + public function testInputDescriptionUsesOnlyTheLanguageKeysFieldWithNoModeField(): void + { + $text = $this->createMock(Text::class); + $text->expects($this->once())->method('withRequired')->with(true)->willReturnSelf(); + $text->expects($this->once()) + ->method('withDedicatedName') + ->with('language_keys') + ->willReturnSelf(); + + $field = $this->createMock(\ILIAS\UI\Component\Input\Field\Factory::class); + $field->expects($this->once())->method('text')->with( + 'Language keys', + 'Comma-separated list of language keys, e.g. de, fr, it.' + )->willReturn($text); + // no mode parameter: the select field must never be built + $field->expects($this->never())->method('select'); + + $group = $this->createMock(\ILIAS\UI\Component\Input\Field\Section::class); + $field->expects($this->once()) + ->method('section') + ->with(['language_keys' => $text], $this->anything()) + ->willReturn($group); + + $activity = $this->createActivity( + $this->createSetupLanguageStub([], [], []) + ); + + $this->assertSame($group, $activity->getInputDescription($field)); + } + + public function testPermissionDeniedBeforePerform(): void + { + $rbac = $this->createMock(\ilRbacSystem::class); + $rbac->expects($this->once()) + ->method('checkAccessOfUser') + ->with( + 6, + 'write', + $this->anything() + ) + ->willReturn(false); + + $setup_language = $this->createSetupLanguageMock([], [], ['de']); + $setup_language->expects($this->never())->method('getInstalledLanguages'); + $setup_language->expects($this->never())->method('flushLanguageForInstallation'); + $result = $this->createActivity( + $setup_language, + $rbac + )->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, ['language_keys' => 'de']); + + $this->assertTrue($result->isError()); + } + + public function testPermissionGrantedPerformsAndReturnsOkResult(): void + { + $rbac = $this->createStub(\ilRbacSystem::class); + $rbac->method('checkAccessOfUser')->willReturn(true); + + $setup_language = $this->createSetupLanguageStub([], [], ['de']); + $setup_language->method('checkLanguageForInstallation')->willReturn(true); + + $result = $this->createActivity( + $setup_language, + $rbac + )->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, ['language_keys' => 'de']); + + $this->assertFalse($result->isError()); + $this->assertSame(['de'], $result->value()['updated_language_keys']); + } + + /** ilObjLanguageFolderGUI sends 'language_keys' as array of strings; the real grind() pipeline must join it. */ + public function testMaybePerformAsAcceptsAnArrayOfLanguageKeysAndUpdatesEachOne(): void + { + $rbac = $this->createStub(\ilRbacSystem::class); + $rbac->method('checkAccessOfUser')->willReturn(true); + + $setup_language = $this->createSetupLanguageStub([], [], ['de', 'fr']); + $setup_language->method('checkLanguageForInstallation')->willReturn(true); + + $result = $this->createActivity($setup_language, $rbac) + ->maybePerformAs($this->createRealFieldsUiFactory()->input(), 6, ['language_keys' => ['de', 'fr']]); + + $this->assertFalse($result->isError()); + $this->assertSame(['de', 'fr'], $result->value()['updated_language_keys']); + } + + private function createActivity( + ilSetupLanguage $setup_language, + ?\ilRbacSystem $rbac = null, + ?RepositoryProvider $repository = null, + ): UpdateLanguage { + return new UpdateLanguage( + $this->rbacOf($rbac ?? $this->createMock(\ilRbacSystem::class)), + $setup_language, + $this->languageFolder(), + $repository + ); + } + + private function createSetupLanguageMock( + array $available_languages, + array $local_language_keys, + array $installed_language_keys + ): MockObject&ilSetupLanguage { + $setup_language = $this->createMock(ilSetupLanguage::class); + $setup_language->method('getAvailableLanguagesForInstallation')->willReturn($available_languages); + $setup_language->method('getLocalLanguages')->willReturn($local_language_keys); + $setup_language->method('getInstalledLanguages')->willReturn($installed_language_keys); + + return $setup_language; + } + + /** + * Stub variant of createSetupLanguageMock() for call sites without ->expects(): a plain createMock() there + * triggers PHPUnit's "no expectations configured" notice. + * + * @param array $available_languages + * @param array $local_language_keys + * @param array $installed_language_keys + */ + private function createSetupLanguageStub( + array $available_languages, + array $local_language_keys, + array $installed_language_keys + ): Stub&ilSetupLanguage { + $setup_language = $this->createStub(ilSetupLanguage::class); + $setup_language->method('getAvailableLanguagesForInstallation')->willReturn($available_languages); + $setup_language->method('getLocalLanguages')->willReturn($local_language_keys); + $setup_language->method('getInstalledLanguages')->willReturn($installed_language_keys); + + return $setup_language; + } +} diff --git a/components/ILIAS/Language/tests/AdminGuiReadsValuesFromMigratedFileTest.php b/components/ILIAS/Language/tests/AdminGuiReadsValuesFromMigratedFileTest.php new file mode 100644 index 000000000000..0cfc598be465 --- /dev/null +++ b/components/ILIAS/Language/tests/AdminGuiReadsValuesFromMigratedFileTest.php @@ -0,0 +1,608 @@ + the modules of every `in("module", …, negate: true)`, which the query stub applies to its rows */ + private array $excluded_modules = []; + + protected function setUp(): void + { + parent::setUp(); + + if (!defined('ILIAS_ABSOLUTE_PATH')) { + define('ILIAS_ABSOLUTE_PATH', realpath(__DIR__ . '/../../../../')); + } + // CLIENT_DATA_DIR is deliberately not defined here: seedFixtureModule() defines it, and + // testRefusesToWriteIntoAClientDataDirOutsideSysTempDir() needs it still undefined. + } + + protected function tearDown(): void + { + if (isset($this->fixture_directory)) { + MigratedPoFixture::removeDirectory(rtrim(CLIENT_DATA_DIR, '/') . '/lang'); + MigratedPoFixture::removeShippedDirectory('components/ILIAS/Language/tests/' . $this->fixture_directory); + } + // never remove a foreign CLIENT_DATA_DIR + if ($this->created_client_data_dir_root && defined('CLIENT_DATA_DIR') && is_dir(CLIENT_DATA_DIR)) { + MigratedPoFixture::removeDirectory(CLIENT_DATA_DIR); + } + + parent::tearDown(); + } + + /** + * Writes a .po/.mo pair for a throwaway module at the overlay location (the only one the read side uses). + * + * @param array $entries keyed by identifier; + * 'original' seeds LocalChangeComments::setOriginal() so a value change counts as local change. + * @param list $changed_identifiers identifiers whose value differs from 'original' and need a + * local_change comment. + */ + private function seedFixtureModule( + string $module, + string $lang_key, + array $entries, + array $changed_identifiers = [] + ): LanguageFileDirectory { + $created = MigratedPoFixture::ensureClientDataDirDefinedOrSkip($this); + $this->created_client_data_dir_root = $this->created_client_data_dir_root || $created; + $this->fixture_directory ??= 'tmp-admingui-values-fixtures-' . bin2hex(random_bytes(4)); + $overlay_dir = rtrim(CLIENT_DATA_DIR, '/') . '/lang/' . $module . '/' . $lang_key; + if (!is_dir($overlay_dir)) { + mkdir($overlay_dir, 0775, true); + } + + $now = new DateTimeImmutable('2026-01-02T03:04:05Z', new DateTimeZone('UTC')); + $translations = new \ILIAS\Language\ComponentTranslation\Catalog\TranslationCatalog(); + foreach ($entries as $identifier => $entry) { + $translation = MigratedPoFixture::entry($module, $identifier, $entry['value']); + if (isset($entry['original'])) { + LocalChangeComments::setOriginal($translation, $entry['original']); + } + if (in_array($identifier, $changed_identifiers, true)) { + $previous = $entry['original'] ?? ''; + LocalChangeComments::refresh( + $translation, + $previous === $entry['value'] ? $previous . ' (old)' : $previous, + $entry['value'], + $now + ); + } + $translations->add($translation); + } + + $base_path = $overlay_dir . '/' . $module . '_' . $lang_key; + MigratedPoFixture::writePo($base_path . '.po', $translations); + MigratedPoFixture::writeOverlayRevision($base_path, $translations); + + $relative_path = 'components/ILIAS/Language/tests/' . $this->fixture_directory . '/'; + MigratedPoFixture::writeShippedPo($relative_path, $module, $lang_key, $translations); + + return new class ($module, $relative_path) implements LanguageFileDirectory { + public function __construct(private string $prefix, private string $path) + { + } + + public function getPrefix(): string + { + return $this->prefix; + } + + public function getPath(): string + { + return $this->path; + } + + public function getSuffix(): string + { + return ''; + } + + public function isLocal(): bool + { + return false; + } + }; + } + + private function overlayFile(string $module, string $lang_key, string $extension): string + { + $base = rtrim(CLIENT_DATA_DIR, '/') . '/lang/' . $module . '/' . $lang_key . '/' . $module . '_' . $lang_key; + + return $extension === 'mo' ? MigratedPoFixture::overlayCurrent($base) : $base . '.' . $extension; + } + + private function registerDirectoryManager(LanguageFileDirectory ...$contributed): void + { + $this->setGlobalVariable( + LanguageFileDirectoryManager::class, + new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), ...$contributed) + ); + } + + /** + * query() returns a fresh statement per call, so repeated _getValues()/_getModules() calls each see all rows. + * + * @param list $db_rows rows lng_data would return + */ + private function stubDatabase(array $db_rows): void + { + $db = $this->createStub(ilDBInterface::class); + $db->method('quote')->willReturnCallback( + static fn(mixed $value, string $type = ''): string => "'" . (string) $value . "'" + ); + $db->method('in')->willReturnCallback(function (string $field, array $values, bool $negate = false): string { + if ($negate && $field === 'module') { + $this->excluded_modules = [...$this->excluded_modules, ...array_map('strval', $values)]; + } + + return "module IN ('placeholder')"; + }); + $db->method('like')->willReturnCallback(function (string $column, string $type, string $value = '?'): string { + $this->like_calls[] = [$column, $value]; + return "value LIKE '%placeholder%'"; + }); + $db->method('query')->willReturnCallback(function (string $query) use ($db_rows): ilDBStatement { + $this->sent_queries[] = $query; + $statement = $this->createStub(ilDBStatement::class); + $calls = array_values(array_filter( + $db_rows, + fn(array $row): bool => !in_array($row['module'], $this->excluded_modules, true) + )); + $calls[] = false; + $statement->method('fetchRow')->willReturnOnConsecutiveCalls(...$calls); + + return $statement; + }); + + $this->setGlobalVariable('ilDB', $db); + + // _getValues() builds its keys from $lng->separator, whose default needs no constructor + $this->setGlobalVariable('lng', (new ReflectionClass(ilLanguage::class))->newInstanceWithoutConstructor()); + } + + public function testLoadModuleTranslationsReturnsValueAndLocalChangeFlagPerIdentifier(): void + { + $directory = $this->seedFixtureModule( + 'mtest', + 'de', + [ + 'greeting' => ['value' => 'Hallo, geändert', 'original' => 'Hallo'], + 'farewell' => ['value' => 'Tschüss', 'original' => 'Tschüss'], + ], + ['greeting'] + ); + $manager = new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), $directory); + + $result = MigratedLanguageFileSync::loadModuleTranslations($manager, 'de', 'mtest', CLIENT_DATA_DIR); + + $this->assertSame( + [ + 'greeting' => [ + 'value' => 'Hallo, geändert', + 'local_change' => true, + 'local_change_date' => '2026-01-02 03:04:05', + 'original' => 'Hallo', + ], + 'farewell' => [ + 'value' => 'Tschüss', + 'local_change' => false, + 'local_change_date' => null, + 'original' => 'Tschüss', + ], + ], + $result + ); + } + + public function testLoadModuleTranslationsReturnsNullWhenTheModuleHasNoContributedDirectory(): void + { + $this->created_client_data_dir_root = MigratedPoFixture::ensureClientDataDirDefinedOrSkip($this); + $manager = new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory()); + + $this->assertNull( + MigratedLanguageFileSync::loadModuleTranslations($manager, 'de', 'mtest', CLIENT_DATA_DIR) + ); + } + + public function testLoadModuleTranslationsReturnsTheShippedStateWithoutOverlay(): void + { + $directory = $this->seedFixtureModule('mtest', 'de', ['greeting' => ['value' => 'Hallo']]); + unlink($this->overlayFile('mtest', 'de', 'mo')); + unlink($this->overlayFile('mtest', 'de', 'po')); + $manager = new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), $directory); + + $this->assertSame( + ['greeting' => ['value' => 'Hallo', 'local_change' => false, 'local_change_date' => null, 'original' => 'Hallo']], + MigratedLanguageFileSync::loadModuleTranslations($manager, 'de', 'mtest', CLIENT_DATA_DIR) + ); + } + + public function testGetMigratedModulesListsEveryContributedModuleWithAShippedPo(): void + { + $with_mo = $this->seedFixtureModule('mone', 'de', ['greeting' => ['value' => 'Hallo']]); + $without_mo = $this->seedFixtureModule('mtwo', 'de', ['greeting' => ['value' => 'Hallo']]); + unlink($this->overlayFile('mtwo', 'de', 'mo')); + $manager = new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), $with_mo, $without_mo); + + $this->assertSame(['mone', 'mtwo'], MigratedLanguageFileSync::getMigratedModules($manager, 'de', CLIENT_DATA_DIR)); + $this->assertSame([], MigratedLanguageFileSync::getMigratedModules($manager, 'en', CLIENT_DATA_DIR)); + } + + public function testValueForAMigratedModuleComesFromThePoFileNotFromTheStaleDbRow(): void + { + $directory = $this->seedFixtureModule('mtest', 'de', ['greeting' => ['value' => 'Aktuell']]); + $this->registerDirectoryManager($directory); + $this->stubDatabase([['module' => 'mtest', 'identifier' => 'greeting', 'value' => 'VERALTET']]); + + $values = ilObjLanguageExt::_getValues('de'); + + $this->assertSame(['mtest#:#greeting' => 'Aktuell'], $values); + } + + public function testValuesForANonMigratedModuleStillComeFromLngData(): void + { + $this->stubDatabase([['module' => 'rep_robj_xtst', 'identifier' => 'hello', 'value' => 'Welt']]); + + $values = ilObjLanguageExt::_getValues('de'); + + $this->assertSame(['rep_robj_xtst#:#hello' => 'Welt'], $values); + } + + public function testMergesAMigratedModuleWithANonMigratedOne(): void + { + $directory = $this->seedFixtureModule('mtest', 'de', ['greeting' => ['value' => 'Aktuell']]); + $this->registerDirectoryManager($directory); + $this->stubDatabase([['module' => 'common', 'identifier' => 'hello', 'value' => 'Welt']]); + + $values = ilObjLanguageExt::_getValues('de'); + + $this->assertSame( + ['common#:#hello' => 'Welt', 'mtest#:#greeting' => 'Aktuell'], + $values + ); + } + + public function testAppliesThePatternFilterToTheMigratedModulesValues(): void + { + $directory = $this->seedFixtureModule('mtest', 'de', [ + 'greeting' => ['value' => 'Hallo Welt'], + 'farewell' => ['value' => 'Tschüss'], + ]); + $this->registerDirectoryManager($directory); + $this->stubDatabase([]); + + $values = ilObjLanguageExt::_getValues('de', [], [], 'Welt'); + + $this->assertSame(['mtest#:#greeting' => 'Hallo Welt'], $values); + } + + /** + * Search in a migrated module behaves like `UPPER(value) LIKE UPPER('%pattern%')` on lng_data: case-insensitive + * (also non-ASCII), "%" any sequence, "_" one character, "\" escapes, other regex characters literal. + * + * @param list $expected identifiers expected to match + */ + #[DataProvider('likePatterns')] + public function testThePatternFilterOfAMigratedModuleFollowsSqlLikeSemantics(string $pattern, array $expected): void + { + $directory = $this->seedFixtureModule('mtest', 'de', array_map(static fn(string $v): array => ['value' => $v], self::likeValues())); + $this->registerDirectoryManager($directory); + $this->stubDatabase([]); + + $found = array_map( + static fn(string $key): string => substr($key, strlen('mtest#:#')), + array_keys(ilObjLanguageExt::_getValues('de', [], [], $pattern)) + ); + + sort($found); + sort($expected); + $this->assertSame($expected, $found); + } + + /** @return array identifier => value the LIKE patterns are matched against */ + private static function likeValues(): array + { + return [ + 'plain' => 'Hallo Welt', + 'umlaut' => 'ÄRGER über Öl', + 'percent' => 'Rabatt 50% heute', + 'fifty' => 'Rabatt 50 heute', + 'underscore' => 'snake_case', + 'snakeXcase' => 'snakeXcase', + 'regex' => 'a.b*c (d) [e] $f ^g |h /i', + 'backslash' => 'C:\\temp', + 'multiline' => "erste Zeile\nzweite Zeile", + ]; + } + + public static function likePatterns(): array + { + return [ + 'case-insensitive ascii' => ['hallo WELT', ['plain']], + 'case-insensitive umlaut' => ['ärger ÜBER öl', ['umlaut']], + 'substring anywhere' => ['lo We', ['plain']], + 'percent is a wildcard' => ['Hallo%Welt', ['plain']], + 'percent wildcard across the value' => ['Rabatt%heute', ['fifty', 'percent']], + 'escaped percent is literal' => ['50\\%', ['percent']], + 'underscore is exactly one character' => ['snake_case', ['snakeXcase', 'underscore']], + 'underscore does not match zero characters' => ['Hallo_Welt', ['plain']], + 'escaped underscore is literal' => ['snake\\_case', ['underscore']], + 'two underscores need two characters' => ['Hallo__Welt', []], + 'two underscores match exactly two characters' => ['Hall__Welt', ['plain']], + 'regex meta characters are literal' => ['a.b*c (d) [e] $f ^g |h /i', ['regex']], + 'a dot is not a wildcard' => ['Hallo.Welt', []], + 'escaped backslash' => ['C:\\\\temp', ['backslash']], + 'wildcard spans a newline' => ['erste%zweite', ['multiline']], + 'consecutive percent signs match like one' => ['Hallo%%Welt', ['plain']], + 'only percent signs match everything' => ['%%', array_keys(self::likeValues())], + 'escaped percent followed by a wildcard' => ['50\\%%heute', ['percent']], + 'no match' => ['gibt es nicht', []], + ]; + } + + #[DataProvider('consecutivePercentPatterns')] + public function testConsecutivePercentSignsMatchLikeASinglePercentSign(string $value, string $pattern, bool $expected): void + { + $matches = new ReflectionMethod(ilObjLanguageExt::class, 'matchesLikePattern'); + + $this->assertSame($expected, $matches->invoke(null, $value, $pattern)); + if (!str_contains($pattern, '\\')) { + $this->assertSame( + $expected, + $matches->invoke(null, $value, (string) preg_replace('/%+/', '%', $pattern)), + 'same result as with single percent signs' + ); + } + } + + public static function consecutivePercentPatterns(): array + { + return [ + '%% matches an empty value' => ['', '%%', true], + '%% matches any value' => ['beliebig', '%%', true], + 'a%%%b: nothing in between' => ['ab', 'a%%%b', true], + 'a%%%b: something in between' => ['aXYZb', 'a%%%b', true], + 'a%%%b: order matters' => ['ba', 'a%%%b', false], + 'a%%%b: across a line break' => ["a\nb", 'a%%%b', true], + '%%a%% anywhere' => ['xxaxx', '%%a%%', true], + '%%a%% not contained' => ['xxbxx', '%%a%%', false], + 'escaped percent then wildcard' => ['50% Rabatt', '50\\%%Rabatt', true], + 'escaped percent is still required' => ['50 Rabatt', '50\\%%Rabatt', false], + 'underscore between percent runs' => ['ab', 'a%%_%%b', false], + 'underscore between percent runs, one char' => ['axb', 'a%%_%%b', true], + ]; + } + + /** Merged-in migrated modules are sorted like lng_data's ORDER BY under *_unicode_ci (a plain ksort() is case-sensitive). */ + public function testValuesAreSortedCaseInsensitivelyByModuleAndIdentifier(): void + { + $directory = $this->seedFixtureModule('mtest', 'de', [ + 'beta' => ['value' => 'b'], + 'Alpha' => ['value' => 'A'], + 'gamma' => ['value' => 'g'], + 'Delta' => ['value' => 'D'], + ]); + $this->registerDirectoryManager($directory); + $this->stubDatabase([ + ['module' => 'aaa', 'identifier' => 'Zeta', 'value' => 'z'], + ['module' => 'zzz', 'identifier' => 'eta', 'value' => 'e'], + ]); + + $this->assertSame( + ['aaa#:#Zeta', 'mtest#:#Alpha', 'mtest#:#beta', 'mtest#:#Delta', 'mtest#:#gamma', 'zzz#:#eta'], + array_keys(ilObjLanguageExt::_getValues('de')) + ); + } + + /** The SQL branch used to check the pattern for truthiness, so "0" returned every row. */ + public function testTheSearchPatternZeroIsAppliedToLngDataAndToMigratedModules(): void + { + $directory = $this->seedFixtureModule('mtest', 'de', [ + 'with_zero' => ['value' => 'Version 10'], + 'without_zero' => ['value' => 'Version eins'], + ]); + $this->registerDirectoryManager($directory); + $this->stubDatabase([]); + + $values = ilObjLanguageExt::_getValues('de', [], [], '0'); + + $this->assertSame(['mtest#:#with_zero' => 'Version 10'], $values); + $this->assertSame([['value', '%0%']], $this->like_calls); + $this->assertStringContainsString("value LIKE '%placeholder%'", $this->sent_queries[0]); + } + + public function testAnEmptySearchPatternDoesNotFilter(): void + { + $this->stubDatabase([['module' => 'rep_robj_xtst', 'identifier' => 'hello', 'value' => 'Welt']]); + + $this->assertSame(['rep_robj_xtst#:#hello' => 'Welt'], ilObjLanguageExt::_getValues('de', [], [], '')); + $this->assertSame([], $this->like_calls); + } + + public function testAnUnreadableOverlayShowsTheShippedValuesNeverLngDataWithAWarning(): void + { + $directory = $this->seedFixtureModule('mtest', 'de', ['greeting' => ['value' => 'Aus dem Overlay']]); + file_put_contents($this->overlayFile('mtest', 'de', 'po'), "msgid \"kaputt\n"); + $this->registerDirectoryManager($directory); + $this->stubDatabase([['module' => 'mtest', 'identifier' => 'greeting', 'value' => 'Aus lng_data']]); + $logger = $this->createMock(ilLogger::class); + $logger->expects($this->once())->method('warning')->with($this->stringContains('"mtest"')); + $logger_factory = $this->createStub(ilLoggerFactory::class); + $logger_factory->method('getComponentLogger')->willReturn($logger); + $this->setGlobalVariable('ilLoggerFactory', $logger_factory); + + // the shipped values (the fixture ships the overlay's values), never lng_data + $this->assertSame(['mtest#:#greeting' => 'Aus dem Overlay'], ilObjLanguageExt::_getValues('de')); + } + + public function testAppliesTheTopicsFilterToTheMigratedModulesValues(): void + { + $directory = $this->seedFixtureModule('mtest', 'de', [ + 'greeting' => ['value' => 'Hallo'], + 'farewell' => ['value' => 'Tschüss'], + ]); + $this->registerDirectoryManager($directory); + $this->stubDatabase([]); + + $values = ilObjLanguageExt::_getValues('de', [], ['farewell']); + + $this->assertSame(['mtest#:#farewell' => 'Tschüss'], $values); + } + + public function testAppliesTheChangedStateFilterToTheMigratedModulesValues(): void + { + $directory = $this->seedFixtureModule( + 'mtest', + 'de', + [ + 'greeting' => ['value' => 'Hallo, geändert', 'original' => 'Hallo'], + 'farewell' => ['value' => 'Tschüss', 'original' => 'Tschüss'], + ], + ['greeting'] + ); + $this->registerDirectoryManager($directory); + $this->stubDatabase([]); + + $this->assertSame( + ['mtest#:#greeting' => 'Hallo, geändert'], + ilObjLanguageExt::_getValues('de', [], [], '', 'changed') + ); + $this->assertSame( + ['mtest#:#farewell' => 'Tschüss'], + ilObjLanguageExt::_getValues('de', [], [], '', 'unchanged') + ); + } + + public function testWhenSpecificModulesAreRequestedAMigratedOneAmongThemStillComesFromThePoFile(): void + { + $directory = $this->seedFixtureModule('mtest', 'de', ['greeting' => ['value' => 'Aktuell']]); + $this->registerDirectoryManager($directory); + $this->stubDatabase([['module' => 'common', 'identifier' => 'hello', 'value' => 'Welt']]); + + $values = ilObjLanguageExt::_getValues('de', ['mtest', 'common']); + + $this->assertSame( + ['common#:#hello' => 'Welt', 'mtest#:#greeting' => 'Aktuell'], + $values + ); + } + + /** Without the directories nothing says which `.po` to read: the rows of a shipped module are dropped (reported), others stay. */ + public function testWithoutDirectoryManagerOnlyTheRowsOfModulesOfNoComponentAreShown(): void + { + $this->stubDatabase([ + ['module' => 'poll', 'identifier' => 'hello', 'value' => 'Aus lng_data'], + ['module' => 'rep_robj_xtst', 'identifier' => 'hello', 'value' => 'Welt'], + ]); + + $this->expectOutputRegex('/Without the language file directories the values of module "poll" are not shown/'); + $values = ilObjLanguageExt::_getValues('de'); + + $this->assertSame(['rep_robj_xtst#:#hello' => 'Welt'], $values); + } + + /** A shipped `.po` that cannot be read: the module is missing (reported), its lng_data rows are not shown instead. */ + public function testAnUnreadableShippedPoHidesTheModuleAndNeverShowsItsLngDataRows(): void + { + $directory = $this->seedFixtureModule('mtest', 'de', ['greeting' => ['value' => 'Hallo']]); + file_put_contents( + constant('ILIAS_ABSOLUTE_PATH') . '/components/ILIAS/Language/tests/' . $this->fixture_directory . '/mtest_de.po', + "msgid \"kaputt\n" + ); + $this->registerDirectoryManager($directory); + $this->stubDatabase([ + ['module' => 'mtest', 'identifier' => 'greeting', 'value' => 'Aus lng_data'], + ['module' => 'rep_robj_xtst', 'identifier' => 'hello', 'value' => 'Welt'], + ]); + + $this->expectOutputRegex('/The language file of module "mtest" for "de" cannot be read, its values are not shown/'); + $this->assertSame(['rep_robj_xtst#:#hello' => 'Welt'], ilObjLanguageExt::_getValues('de')); + } + + public function testGetModulesIncludesAMigratedModuleEvenWithoutAnyLngDataRow(): void + { + $directory = $this->seedFixtureModule('mtest', 'de', ['greeting' => ['value' => 'Hallo']]); + $this->registerDirectoryManager($directory); + $this->stubDatabase([['module' => 'common']]); + + $modules = ilObjLanguageExt::_getModules('de'); + + $this->assertSame(['common', 'mtest'], $modules); + } + + public function testGetModulesFallsBackToDbOnlyBehaviorWhenNoDirectoryManagerIsRegisteredAtAll(): void + { + $this->stubDatabase([['module' => 'common']]); + + $this->assertSame(['common'], ilObjLanguageExt::_getModules('de')); + } + + /** Must skip instead of writing into a foreign CLIENT_DATA_DIR (e.g. /var/iliasdata); needs its own process so setUp() has not defined it. */ + #[RunInSeparateProcess] + public function testRefusesToWriteIntoAClientDataDirOutsideSysTempDir(): void + { + $foreign_dir = __DIR__ . '/tmp-not-a-temp-dir-' . bin2hex(random_bytes(4)); + $this->assertFalse(str_starts_with($foreign_dir, sys_get_temp_dir() . '/')); + mkdir($foreign_dir, 0775, true); + define('CLIENT_DATA_DIR', $foreign_dir); + + try { + try { + $this->seedFixtureModule('mtest', 'de', ['greeting' => ['value' => 'Hallo']]); + $this->fail('seedFixtureModule() must refuse to write into a CLIENT_DATA_DIR outside sys_get_temp_dir().'); + } catch (SkippedWithMessageException $e) { + $this->assertStringContainsString($foreign_dir, $e->getMessage()); + } + + $this->assertSame([], array_diff(scandir($foreign_dir) ?: [], ['.', '..'])); + } finally { + if (is_dir($foreign_dir)) { + array_map('unlink', glob($foreign_dir . '/*') ?: []); + rmdir($foreign_dir); + } + } + } +} diff --git a/components/ILIAS/Language/tests/ChildPhp.php b/components/ILIAS/Language/tests/ChildPhp.php new file mode 100644 index 000000000000..03f3643f80a5 --- /dev/null +++ b/components/ILIAS/Language/tests/ChildPhp.php @@ -0,0 +1,74 @@ + $arguments everything after the PHP binary + * @return list + */ + public static function command(array $arguments): array + { + return [PHP_BINARY, '-d', 'xdebug.mode=off', ...$arguments]; + } + + /** @return array */ + public static function environment(): array + { + return [...getenv(), 'XDEBUG_MODE' => 'off']; + } + + /** + * @param list $arguments see command() + * @return array{resource, array}|null process and pipes (1 = stdout, 2 = stderr) + */ + public static function open(array $arguments, ?string $working_directory = null): ?array + { + $process = proc_open( + self::command($arguments), + [1 => ['pipe', 'w'], 2 => ['pipe', 'w']], + $pipes, + $working_directory, + self::environment() + ); + + return is_resource($process) ? [$process, $pipes] : null; + } + + /** + * @param list $arguments see command() + * @return array{int, string, string}|null exit code, stdout, stderr; null if the process did not start + */ + public static function run(array $arguments, ?string $working_directory = null): ?array + { + $started = self::open($arguments, $working_directory); + if ($started === null) { + return null; + } + [$process, $pipes] = $started; + $stdout = (string) stream_get_contents($pipes[1]); + $stderr = (string) stream_get_contents($pipes[2]); + fclose($pipes[1]); + fclose($pipes[2]); + + return [proc_close($process), $stdout, $stderr]; + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/AtomicFileWriterTest.php b/components/ILIAS/Language/tests/ComponentTranslation/AtomicFileWriterTest.php new file mode 100644 index 000000000000..75cb866dbcc6 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/AtomicFileWriterTest.php @@ -0,0 +1,312 @@ +directory = sys_get_temp_dir() . '/ilias_atomic_' . bin2hex(random_bytes(4)); + mkdir($this->directory, 0775); + } + + protected function tearDown(): void + { + \MigratedPoFixture::removeDirectory($this->directory); + } + + /** + * @return list + */ + private function directoryListing(): array + { + return array_values(array_diff(scandir($this->directory) ?: [], ['.', '..'])); + } + + public function testWritesANewFileAndLeavesNoTemporaryFileBehind(): void + { + AtomicFileWriter::write($this->directory . '/target.po', "inhalt\n"); + + $this->assertSame("inhalt\n", file_get_contents($this->directory . '/target.po')); + $this->assertSame(['target.po'], $this->directoryListing()); + } + + public function testReplacesAnExistingFile(): void + { + file_put_contents($this->directory . '/target.po', 'alt'); + + AtomicFileWriter::write($this->directory . '/target.po', 'neu'); + + $this->assertSame('neu', file_get_contents($this->directory . '/target.po')); + $this->assertSame(['target.po'], $this->directoryListing()); + } + + public function testWritesEmptyContent(): void + { + AtomicFileWriter::write($this->directory . '/empty.mo', ''); + + $this->assertSame('', file_get_contents($this->directory . '/empty.mo')); + } + + /** + * $flush_to_disk = false (used by ShippedLanguageFilesCompiledObjective for the build artifacts) + * skips fsync() but must still write the complete, correct content and leave no temporary file + * behind - only the durability-after-a-crash guarantee is dropped, nothing about the result. + */ + public function testWritesCompleteContentWithFlushToDiskDisabled(): void + { + AtomicFileWriter::write($this->directory . '/target.mo', 'inhalt', null, false); + + $this->assertSame('inhalt', file_get_contents($this->directory . '/target.mo')); + $this->assertSame(['target.mo'], $this->directoryListing()); + } + + /** + * $flush_to_disk = false must not disable the $confine_to_directory guard - both parameters are + * independent. + */ + public function testFlushToDiskDisabledStillHonoursConfineToDirectory(): void + { + $outside = dirname($this->directory) . '/ilias_atomic_outside_' . bin2hex(random_bytes(4)); + mkdir($outside, 0775); + try { + $this->expectException(RuntimeException::class); + AtomicFileWriter::write($outside . '/target.po', 'x', $this->directory, false); + } finally { + \MigratedPoFixture::removeDirectory($outside); + } + } + + /** + * tempnam() creates 0600 files; the result must have the permissions a plain + * file_put_contents() would give (0666 & ~umask) so e.g. the web server can read what the CLI + * Setup wrote. + */ + public function testTheWrittenFileDoesNotKeepTheRestrictiveTempnamPermissions(): void + { + $previous = umask(0022); + try { + AtomicFileWriter::write($this->directory . '/target.mo', 'x'); + } finally { + umask($previous); + } + + clearstatcache(); + $this->assertSame('0644', sprintf('%04o', fileperms($this->directory . '/target.mo') & 0777)); + } + + /** + * An existing target keeps its own mode - not the "new file" mode from testTheWrittenFileDoesNotKeepTheRestrictiveTempnamPermissions() + * above, and not whatever tempnam() or umask would otherwise produce. + * + * Mutation: the `is_file($file) ? @fileperms($file) : ...` branch being dropped or inverted, or + * the `& 07777` mask being wrong (e.g. dropping the setuid/setgid/sticky bits it must preserve). + */ + public function testAnExistingTargetKeepsItsOwnModeInsteadOfANewFilesMode(): void + { + file_put_contents($this->directory . '/target.po', 'alt'); + chmod($this->directory . '/target.po', 0600); + $previous_umask = umask(0022); // would produce 0644 for a NEW file - must not leak in here + try { + AtomicFileWriter::write($this->directory . '/target.po', 'neu'); + } finally { + umask($previous_umask); + } + + clearstatcache(); + $this->assertSame('0600', sprintf('%04o', fileperms($this->directory . '/target.po') & 0777)); + } + + /** + * grantsAtLeast() is the pure decision acceptUnchangeableMode() delegates to: whether every + * permission bit $intended_mode grants is also granted by $effective_mode. + */ + #[DataProvider('grantsAtLeastProvider')] + public function testGrantsAtLeast(int $effective_mode, int $intended_mode, bool $expected): void + { + $this->assertSame($expected, AtomicFileWriter::grantsAtLeast($effective_mode, $intended_mode)); + } + + /** + * @return array + */ + public static function grantsAtLeastProvider(): array + { + return [ + '0600 lacks group/other read the intended 0644 needs' => [0600, 0644, false], + '0777 grants everything, including 0644' => [0777, 0644, true], + '0644 grants exactly the identical 0644 it is compared against' => [0644, 0644, true], + '0640 lacks group-write and other-read the intended 0664 needs' => [0640, 0664, false], + '0664 grants everything the less permissive 0644 needs' => [0664, 0644, true], + ]; + } + + /** + * The happy path of $confine_to_directory: a target resolving inside it is written normally - both the pre-write + * check and the post-rename re-check pass. + */ + public function testConfineToDirectoryAllowsAWriteWhoseTargetResolvesInsideIt(): void + { + AtomicFileWriter::write($this->directory . '/target.po', 'x', $this->directory); + + $this->assertSame('x', file_get_contents($this->directory . '/target.po')); + $this->assertSame(['target.po'], $this->directoryListing()); + } + + /** + * Mutation: the pre-write confinement check dropped, inverted or applied after writing - a target whose directory + * resolves OUTSIDE $confine_to_directory must be refused before any temporary file is created. + */ + public function testConfineToDirectoryThrowsWhenTheTargetResolvesOutsideIt(): void + { + $outside = dirname($this->directory) . '/ilias_atomic_outside_' . bin2hex(random_bytes(4)); + mkdir($outside, 0775); + $confine_to = $this->directory . '/allowed'; + mkdir($confine_to, 0775); + + try { + try { + AtomicFileWriter::write($outside . '/target.po', 'x', $confine_to); + $this->fail('Expected a RuntimeException'); + } catch (RuntimeException $e) { + $this->assertStringContainsString('does not resolve to a path below', $e->getMessage()); + } + + $this->assertSame([], array_values(array_diff(scandir($outside) ?: [], ['.', '..'])), 'nothing must be written outside the confined directory'); + $this->assertSame([], array_values(array_diff(scandir($confine_to) ?: [], ['.', '..'])), 'no temporary file must leak into the confined directory either'); + } finally { + \MigratedPoFixture::removeDirectory($outside); + } + } + + // NOT COVERED: the post-rename confinement re-check in write(). It fires only if a symlink below the confined + // directory is swapped while the single synchronous write() runs (the accepted TOCTOU risk of the class comment). + // write() is final and static with no injectable seam and no blocking primitive (flock()) to synchronize a racing + // process against, so it cannot be reproduced deterministically. + + // NOT COVERED: acceptUnchangeableMode()'s branching on a failed chmod() (effective mode still grants enough vs. + // RuntimeException). There is no injectable seam, and a chmod() failure that leaves the write intact cannot be + // simulated: `chattr +i` is refused on both the host and the container filesystem. + + public function testThrowsWhenTheTargetDirectoryDoesNotExist(): void + { + set_error_handler(static fn(): bool => true, E_NOTICE | E_WARNING); + try { + $this->expectException(RuntimeException::class); + $this->expectExceptionMessageMatches('/Could not create a temporary file/'); + AtomicFileWriter::write($this->directory . '/missing/target.po', 'x'); + } finally { + restore_error_handler(); + } + } + + /** + * Root-proof failure of the final rename(): the target is a directory. The temporary file must be + * removed again. + */ + public function testThrowsWhenTheTargetCannotBeReplacedAndRemovesTheTemporaryFile(): void + { + mkdir($this->directory . '/target.po'); + + set_error_handler(static fn(): bool => true, E_WARNING); + try { + AtomicFileWriter::write($this->directory . '/target.po', 'x'); + $this->fail('Expected a RuntimeException'); + } catch (RuntimeException $e) { + $this->assertStringContainsString('Could not replace', $e->getMessage()); + } finally { + restore_error_handler(); + } + + $this->assertSame(['target.po'], $this->directoryListing()); + $this->assertDirectoryExists($this->directory . '/target.po'); + } + + /** + * Regression: tempnam() returns the resolved directory; comparing it with the unresolved one + * rejected every target below a symlinked directory, a "//" or a relative path. + */ + public function testWritesIntoASymlinkedDirectory(): void + { + $real = $this->directory . '/real'; + mkdir($real); + symlink($real, $this->directory . '/link'); + + AtomicFileWriter::write($this->directory . '/link/target.po', 'x'); + + $this->assertSame('x', file_get_contents($real . '/target.po')); + $this->assertSame(['target.po'], array_values(array_diff(scandir($real), ['.', '..']))); + } + + public function testWritesWithADoubleSlashInThePath(): void + { + mkdir($this->directory . '/sub'); + + AtomicFileWriter::write($this->directory . '//sub//target.po', 'x'); + + $this->assertSame('x', file_get_contents($this->directory . '/sub/target.po')); + $this->assertSame(['target.po'], array_values(array_diff(scandir($this->directory . '/sub'), ['.', '..']))); + } + + public function testWritesToARelativePath(): void + { + $cwd = getcwd(); + chdir($this->directory); + try { + AtomicFileWriter::write('relative.po', 'x'); + mkdir('nested'); + AtomicFileWriter::write('nested/../nested/target.po', 'y'); + } finally { + chdir($cwd); + } + + $this->assertSame('x', file_get_contents($this->directory . '/relative.po')); + $this->assertSame('y', file_get_contents($this->directory . '/nested/target.po')); + $this->assertSame(['nested', 'relative.po'], $this->directoryListing()); + } + + /** + * Writing below a regular file (not a directory) must fail cleanly - also as root. + */ + public function testThrowsWhenAPathComponentIsARegularFile(): void + { + file_put_contents($this->directory . '/file', 'x'); + + set_error_handler(static fn(): bool => true, E_NOTICE | E_WARNING); + try { + $this->expectException(RuntimeException::class); + AtomicFileWriter::write($this->directory . '/file/target.po', 'x'); + } finally { + restore_error_handler(); + } + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/Catalog/TranslationCatalogMoTest.php b/components/ILIAS/Language/tests/ComponentTranslation/Catalog/TranslationCatalogMoTest.php new file mode 100644 index 000000000000..5ff907cb0643 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/Catalog/TranslationCatalogMoTest.php @@ -0,0 +1,561 @@ +directory = sys_get_temp_dir() . '/ilias_translation_catalog_mo_' . bin2hex(random_bytes(4)); + mkdir($this->directory, 0775); + } + + protected function tearDown(): void + { + \MigratedPoFixture::removeDirectory($this->directory); + } + + private static function entry(?string $context, string $id, string $translation): TranslationEntry + { + $entry = new TranslationEntry($context, $id); + $entry->translate($translation); + + return $entry; + } + + private static function sampleCatalog(): TranslationCatalog + { + $catalog = new TranslationCatalog(); + $catalog->setHeader('Language', 'de'); + $catalog->setHeader('Plural-Forms', 'nplurals=2; plural=(n != 1);'); + $catalog->add(self::entry('mod', 'zeta', 'Z')); + $catalog->add(self::entry('mod', 'alpha', "Mehr\nzeilig")); + $catalog->add(self::entry(null, 'no_context', 'ohne Kontext')); + $catalog->add(self::entry('mod', 'zero', '0')); + $fuzzy = self::entry('mod', 'fuzzy', 'Hello'); + $fuzzy->addFlag('fuzzy'); + $catalog->add($fuzzy); + $catalog->add(self::entry('mod', 'untranslated', '')); + + return $catalog; + } + + /** + * @return array + */ + private function read(string $mo): array + { + return \MigratedPoFixture::readMoTranslations($mo); + } + + /** + * The originals of a little endian `.mo`, in file order (independent of the code under test). + * + * @return list + */ + private static function originals(string $mo): array + { + ['count' => $count, 'offset' => $table] = unpack('Vcount/Voffset', $mo, 8); + $originals = []; + for ($i = 0; $i < $count; $i++) { + ['length' => $length, 'offset' => $offset] = unpack('Vlength/Voffset', $mo, $table + $i * 8); + $originals[] = substr($mo, $offset, $length); + } + + return $originals; + } + + /** + * Fuzzy messages are compiled (unlike msgfmt's default - "fuzzy" marks an unreviewed legacy + * value, leaving it out would show "-identifier-"), untranslated ones are left out, the context + * is dropped and "0" is served as "0". + */ + public function testReadMoTranslationsServesEveryTranslatedMessageByIdentifier(): void + { + $this->assertSame( + [ + 'alpha' => "Mehr\nzeilig", + 'fuzzy' => 'Hello', + 'zero' => '0', + 'zeta' => 'Z', + 'no_context' => 'ohne Kontext', + ], + $this->read(self::sampleCatalog()->toMoString()) + ); + } + + /** + * msgfmt-compatible layout: the header message ("" => headers) comes first, the originals are + * sorted byte-wise (C gettext looks them up by binary search), untranslated messages are absent. + */ + public function testTheOriginalsAreTheHeaderAndTheTranslatedMessagesSortedByteWise(): void + { + $catalog = new TranslationCatalog(); + foreach (['b', 'B', 'a', '10', '9'] as $id) { + $catalog->add(self::entry(null, $id, 'x')); + } + $catalog->add(self::entry('mod', 'a', 'x')); + $catalog->add(self::entry('mod', 'empty', '')); + + $this->assertSame(['', '10', '9', 'B', 'a', 'b', "mod\x04a"], self::originals($catalog->toMoString())); + } + + /** + * The "0" workaround stores "0" plus its NUL; C gettext and readMoTranslations() end the string + * there. The next message must not be affected. + */ + public function testTheValueZeroDoesNotAffectTheFollowingMessage(): void + { + $catalog = new TranslationCatalog(); + $catalog->add(self::entry('mod', 'a', '0')); + $catalog->add(self::entry('mod', 'b', 'bee')); + + $this->assertSame(['a' => '0', 'b' => 'bee'], $this->read($catalog->toMoString())); + } + + public function testNumericIdentifiersAreServed(): void + { + $catalog = new TranslationCatalog(); + $catalog->add(self::entry('mod', '0', 'null')); + $catalog->add(self::entry('mod', '10', 'zehn')); + + $translations = $this->read($catalog->toMoString()); + + $this->assertSame('null', $translations['0'] ?? null); + $this->assertSame('zehn', $translations['10'] ?? null); + $this->assertCount(2, $translations); + } + + /** + * A plural message is served with its default form (msgstr[1] with at least two forms, see PluralForms); every form + * is available through readMoMessages(). + */ + public function testReadMoTranslationsServesTheDefaultFormOfAPluralMessage(): void + { + $catalog = TranslationCatalog::fromPoString( + "msgid \"\"\nmsgstr \"\"\n\"Plural-Forms: nplurals=2; plural=(n != 1);\\n\"\n\n" + . "msgctxt \"mod\"\nmsgid \"item\"\nmsgid_plural \"items\"\nmsgstr[0] \"Eintrag\"\nmsgstr[1] \"Einträge\"\n" + ); + + $mo = $catalog->toMoString(); + + $this->assertSame(['item' => 'Einträge'], $this->read($mo)); + $this->assertSame(['item' => ['Eintrag', 'Einträge']], \MigratedPoFixture::readMoPluralForms($mo)); + $this->assertSame(['', "mod\x04item\x00items"], self::originals($mo)); + $this->assertStringContainsString("Eintrag\x00Einträge\x00", $mo); + } + + /** + * A language with a single plural form (nplurals=1, e.g. Japanese) writes only msgstr[0] to the + * `.mo` (prepareMoPluralForms() pads/cuts to "as many forms as the header declares") - with no + * form left after it, the message is compiled as an ordinary singular one (see toMoString()'s + * docblock), so it is served as a plain translation, not through getPluralTranslations(). + */ + public function testAPluralMessageOfALanguageWithASingleFormIsCompiledAsSingular(): void + { + $catalog = TranslationCatalog::fromPoString( + "msgid \"\"\nmsgstr \"\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\n" + . "msgctxt \"mod\"\nmsgid \"item\"\nmsgid_plural \"items\"\nmsgstr[0] \"Eintrag\"\nmsgstr[1] \"Einträge\"\n" + ); + + $mo = $catalog->toMoString(); + + $this->assertSame(['item' => 'Eintrag'], $this->read($mo)); + $this->assertSame([], \MigratedPoFixture::readMoPluralForms($mo)); + } + + /** + * An empty form between two non-empty ones (e.g. Russian's msgstr[1] left blank while msgstr[0] + * and msgstr[2] are set) must roundtrip as an empty string at that index, not shift the later + * forms or get treated as "message ends here". + */ + public function testAnEmptyIntermediateFormOfAPluralMessageRoundTrips(): void + { + $catalog = TranslationCatalog::fromPoString( + "msgid \"\"\nmsgstr \"\"\n" + . "\"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4" + . " && (n%100<10 || n%100>=20) ? 1 : 2);\\n\"\n\n" + . "msgctxt \"mod\"\nmsgid \"item\"\nmsgid_plural \"items\"\n" + . "msgstr[0] \"eins\"\nmsgstr[1] \"\"\nmsgstr[2] \"viele\"\n" + ); + + $mo = $catalog->toMoString(); + + $this->assertSame( + ['item' => ['eins', '', 'viele']], + \MigratedPoFixture::readMoPluralForms($mo) + ); + // the default form is the last one (index 2, count 3) - it is not empty here, so no fallback + // search is even needed (see PluralFormsTest for that) + $this->assertSame(['item' => 'viele'], $this->read($mo)); + } + + /** + * The LAST form (not msgstr[1]) is the default - and when it is itself empty, the search falls + * back downwards to the closest non-empty one before it (here: msgstr[1], skipping the always- + * empty msgstr[2] slot of this fixture's Czech-shaped rule). + */ + public function testReadMoTranslationsFallsBackDownwardsWhenTheLastFormIsEmpty(): void + { + $catalog = TranslationCatalog::fromPoString( + "msgid \"\"\nmsgstr \"\"\n" + . "\"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\\n\"\n\n" + . "msgctxt \"mod\"\nmsgid \"item\"\nmsgid_plural \"items\"\n" + . "msgstr[0] \"jeden\"\nmsgstr[1] \"dva\"\nmsgstr[2] \"\"\n" + ); + + $mo = $catalog->toMoString(); + + $this->assertSame(['item' => 'dva'], $this->read($mo)); + } + + /** + * An invalid "Plural-Forms" header (here: nplurals=999, far beyond PluralForms::MAX_COUNT of 10 - + * the gettext/gettext library itself does not enforce that bound) must not make toMoString() + * compile 999 forms: prepareMoPluralForms() falls back to the same Germanic rule PluralForms + * itself falls back to, both for how many forms are actually written (surplus ones dropped) and + * for the "Plural-Forms" header the `.mo` ends up with. + */ + public function testAnInvalidNpluralsHeaderIsCappedToTheGermanicFallbackWhenCompiling(): void + { + $catalog = TranslationCatalog::fromPoString( + "msgid \"\"\nmsgstr \"\"\n\"Plural-Forms: nplurals=999; plural=n%999;\\n\"\n\n" + . "msgid \"item\"\nmsgid_plural \"items\"\nmsgstr[0] \"A\"\nmsgstr[1] \"B\"\nmsgstr[2] \"C\"\n" + ); + + $mo = $catalog->toMoString(); + $this->assertSame('nplurals=2; plural=(n != 1);', \MigratedPoFixture::moPluralFormsHeader($mo)); + $this->assertSame(['item' => ['A', 'B']], \MigratedPoFixture::readMoPluralForms($mo), 'the surplus form C is dropped'); + $this->assertSame(['item' => 'B'], $this->read($mo)); + } + + /** + * In a plural message the NUL of the "0" workaround would become an additional, empty plural + * form - compiling it throws instead (ILIAS itself uses no plurals). + */ + public function testASingularTranslationZeroOfAPluralMessageCannotBeCompiled(): void + { + $catalog = TranslationCatalog::fromPoString("msgid \"a\"\nmsgid_plural \"as\"\nmsgstr[0] \"0\"\nmsgstr[1] \"1\"\n"); + + $this->expectException(RuntimeException::class); + $catalog->toMoString(); + } + + public function testAnEmptyCatalogCompilesToAValidMoWithoutMessages(): void + { + $mo = (new TranslationCatalog())->toMoString(); + + $this->assertSame([''], self::originals($mo), 'only the (empty) header'); + $this->assertSame([], $this->read($mo)); + } + + /** + * MigratedLanguageFileSync::sync() decides by byte comparison whether the `.mo` is current - so + * the same content must always compile to the same bytes, independent of the insertion order + * and of how often it was compiled. + */ + public function testToMoStringIsDeterministic(): void + { + $build = static function (array $ids): TranslationCatalog { + $catalog = new TranslationCatalog(); + $catalog->setHeader('Language', 'de'); + foreach ($ids as $id) { + $catalog->add(self::entry('mod', $id, $id === 'zero' ? '0' : 'Wert ' . $id)); + } + return $catalog; + }; + $catalog = $build(['b', 'zero', 'a', '10', '9', 'B']); + + $mo = $catalog->toMoString(); + + $this->assertSame($mo, $catalog->toMoString()); + $this->assertSame($mo, $build(['b', 'zero', 'a', '10', '9', 'B'])->toMoString()); + $this->assertSame($mo, $build(['9', 'B', 'zero', '10', 'a', 'b'])->toMoString()); + $this->assertSame($mo, TranslationCatalog::fromPoString($catalog->toPoString())->toMoString()); + $this->assertNotSame($mo, $build(['b', 'zero', 'a', '10', '9'])->toMoString()); + } + + /** + * The `.mo` content depends on everything ilLanguage serves - a changed value must produce + * different bytes, or the self-healing byte comparison of sync() would keep a stale `.mo`. + */ + public function testAChangedValueChangesTheMo(): void + { + $catalog = self::sampleCatalog(); + $mo = $catalog->toMoString(); + + $catalog->find('mod', 'zeta')?->translate('Y'); + + $this->assertNotSame($mo, $catalog->toMoString()); + } + + /** + * The library's PHP warnings/notices say "this file is broken" and become a RuntimeException. + * The adapter's structural pre-checks keep MoLoader from ever raising one for a real file, so + * this is exercised directly on the private helper. + */ + #[DataProvider('libraryWarnings')] + public function testLibraryWarningsAndNoticesBecomeRuntimeExceptions(int $level): void + { + $helper = new ReflectionMethod(TranslationCatalog::class, 'withLibraryErrorsAsExceptions'); + + $this->expectException(RuntimeException::class); + $this->expectExceptionMessage('library message'); + $helper->invoke(null, static function () use ($level): Translations { + trigger_error('library message', $level); + return Translations::create(); + }); + } + + public static function libraryWarnings(): array + { + return [ + 'warning' => [E_USER_WARNING], + 'notice' => [E_USER_NOTICE], + ]; + } + + /** + * A deprecation only says something about the library on this PHP version, not about the file: + * the load succeeds and the deprecation goes to the error handler registered before (ILIAS' own + * or, in a test run, PHPUnit's) - which is active again afterward. + */ + public function testLibraryDeprecationsArePassedOnToThePreviousHandlerAndDoNotFailTheLoad(): void + { + $helper = new ReflectionMethod(TranslationCatalog::class, 'withLibraryErrorsAsExceptions'); + $received = []; + $previous_handler = static function (int $severity, string $message, string $file, int $line) use (&$received): bool { + $received[] = [$severity, $message, $file, $line]; + return true; + }; + set_error_handler($previous_handler); + try { + $result = $helper->invoke(null, static function (): Translations { + trigger_error('library deprecation', E_USER_DEPRECATED); + return Translations::create()->setDomain('loaded'); + }); + $trigger_line = __LINE__ - 3; + + $current = set_error_handler(null); + restore_error_handler(); + } finally { + restore_error_handler(); + } + + $this->assertInstanceOf(Translations::class, $result); + $this->assertSame('loaded', $result->getDomain()); + $this->assertSame([[E_USER_DEPRECATED, 'library deprecation', __FILE__, $trigger_line]], $received); + $this->assertSame($previous_handler, $current, 'the previous handler is restored'); + } + + /** + * A previous handler that declines (returns false) leaves the deprecation to PHP's standard + * handling (here: the error log) - still without failing the load. + */ + public function testALibraryDeprecationDeclinedByThePreviousHandlerGoesToPhpsStandardHandling(): void + { + $helper = new ReflectionMethod(TranslationCatalog::class, 'withLibraryErrorsAsExceptions'); + $log = $this->directory . '/error.log'; + $ini = ['error_log' => $log, 'log_errors' => '1', 'display_errors' => '0']; + $previous = []; + foreach ($ini as $name => $value) { + $previous[$name] = ini_set($name, $value); + } + $previous_level = error_reporting(E_ALL); + $calls = 0; + set_error_handler(static function () use (&$calls): bool { + $calls++; + return false; + }); + try { + $result = $helper->invoke(null, static function (): Translations { + trigger_error('declined library deprecation', E_USER_DEPRECATED); + return Translations::create()->setDomain('loaded'); + }); + } finally { + restore_error_handler(); + error_reporting($previous_level); + foreach ($previous as $name => $value) { + ini_set($name, (string) $value); + } + } + + $this->assertSame('loaded', $result->getDomain()); + $this->assertSame(1, $calls); + $this->assertStringContainsString('declined library deprecation', (string) @file_get_contents($log)); + } + + /** + * Passing deprecations on must not pass on warnings: those still become a RuntimeException and + * never reach the previous handler. + */ + public function testLibraryWarningsDoNotReachThePreviousHandler(): void + { + $helper = new ReflectionMethod(TranslationCatalog::class, 'withLibraryErrorsAsExceptions'); + $calls = 0; + set_error_handler(static function () use (&$calls): bool { + $calls++; + return true; + }); + try { + $helper->invoke(null, static function (): Translations { + trigger_error('library warning', E_USER_WARNING); + return Translations::create(); + }); + $this->fail('Expected a RuntimeException'); + } catch (RuntimeException $e) { + $this->assertSame('library warning', $e->getMessage()); + } finally { + restore_error_handler(); + } + + $this->assertSame(0, $calls); + } + + public function testThrowablesOfTheLibraryBecomeRuntimeExceptions(): void + { + $helper = new ReflectionMethod(TranslationCatalog::class, 'withLibraryErrorsAsExceptions'); + + $this->expectException(RuntimeException::class); + $this->expectExceptionMessage('type error'); + $helper->invoke(null, static function (): Translations { + throw new \TypeError('type error'); + }); + } + + /** + * fromMoString() reads back what toMoString() wrote: values incl. "0" and multi-line, context, plural forms, headers. + */ + public function testFromMoStringReadsBackWhatToMoStringWrote(): void + { + $catalog = self::sampleCatalog(); + $plural = new TranslationEntry('mod', 'item'); + $plural->setPlural('items', ['Eintrag', 'Einträge']); + $catalog->add($plural); + + $read = TranslationCatalog::fromMoString($catalog->toMoString()); + + $this->assertSame('de', $read->getHeader('Language')); + $this->assertSame('nplurals=2; plural=(n != 1);', $read->getHeader('Plural-Forms')); + $this->assertSame('0', $read->find('mod', 'zero')?->getTranslation(), 'the value "0" is not "0" plus its NUL'); + $this->assertSame("Mehr\nzeilig", $read->find('mod', 'alpha')?->getTranslation()); + $this->assertSame('Z', $read->find('mod', 'zeta')?->getTranslation()); + $this->assertSame('Hello', $read->find('mod', 'fuzzy')?->getTranslation(), 'fuzzy messages are compiled'); + $this->assertSame('ohne Kontext', $read->find(null, 'no_context')?->getTranslation()); + $this->assertNull($read->find('mod', 'untranslated'), 'left out of the .mo'); + $item = $read->find('mod', 'item'); + $this->assertNotNull($item); + $this->assertTrue($item->isPlural()); + $this->assertSame('items', $item->getPluralId()); + $this->assertSame(['Eintrag', 'Einträge'], $item->getPluralTranslations()); + $this->assertCount(6, $read->getEntries()); + } + + /** For singular messages (also "0") and plurals without empty or "0" forms the read catalog compiles to the same values. */ + public function testAReadMoWithoutEmptyOrZeroPluralFormsCompilesToTheSameValuesAgain(): void + { + $catalog = self::sampleCatalog(); + $plural = new TranslationEntry('mod', 'item'); + $plural->setPlural('items', ['Eintrag', 'Einträge']); + $catalog->add($plural); + $mo = $catalog->toMoString(); + + $this->assertSame( + $this->read($mo), + $this->read(TranslationCatalog::fromMoString($mo)->toMoString()) + ); + $this->assertSame( + \MigratedPoFixture::readMoPluralForms($mo), + \MigratedPoFixture::readMoPluralForms(TranslationCatalog::fromMoString($mo)->toMoString()) + ); + } + + /** + * @return array, list}> forms written, forms read back + */ + public static function pluralFormsTheLibraryDrops(): array + { + return [ + 'empty intermediate form' => [['eins', '', 'viele'], ['eins', 'viele']], + 'form "0"' => [['eins', 'zwei', '0'], ['eins', 'zwei']], + ]; + } + + /** + * Documents why fromMoString() is for reading only: the library drops empty plural forms and forms "0". + * + * @param list $written + * @param list $read + */ + #[DataProvider('pluralFormsTheLibraryDrops')] + public function testFromMoStringLosesEmptyAndZeroPluralForms(array $written, array $read): void + { + $catalog = new TranslationCatalog(); + $catalog->setHeader('Plural-Forms', 'nplurals=3; plural=(n==1 ? 0 : n>=2 && n<=4 ? 1 : 2);'); + $entry = new TranslationEntry('mod', 'item'); + $entry->setPlural('items', $written); + $catalog->add($entry); + $mo = $catalog->toMoString(); + $this->assertSame(['item' => $written], \MigratedPoFixture::readMoPluralForms($mo), 'precondition: the .mo holds every form'); + + $item = TranslationCatalog::fromMoString($mo)->find('mod', 'item'); + + $this->assertSame($read, $item?->getPluralTranslations()); + } + + /** + * @return array + */ + public static function invalidMoData(): array + { + $mo = self::sampleCatalog()->toMoString(); + + return [ + 'empty' => [''], + 'no .mo' => ['this is no gettext catalog'], + 'cut in the header' => [substr($mo, 0, 20)], + 'cut in the tables' => [substr($mo, 0, 30)], + ]; + } + + #[DataProvider('invalidMoData')] + public function testFromMoStringRejectsInvalidOrTruncatedData(string $content): void + { + $this->expectException(RuntimeException::class); + + TranslationCatalog::fromMoString($content); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/Catalog/TranslationCatalogPoTest.php b/components/ILIAS/Language/tests/ComponentTranslation/Catalog/TranslationCatalogPoTest.php new file mode 100644 index 000000000000..101796d4baea --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/Catalog/TranslationCatalogPoTest.php @@ -0,0 +1,863 @@ +directory !== null) { + \MigratedPoFixture::removeDirectory($this->directory); + } + } + + private function temporaryDirectory(): string + { + if ($this->directory === null) { + $this->directory = sys_get_temp_dir() . '/ilias_translation_catalog_' . bin2hex(random_bytes(4)); + mkdir($this->directory, 0775); + } + + return $this->directory; + } + + private static function roundTrip(TranslationCatalog $catalog): TranslationCatalog + { + return TranslationCatalog::fromPoString($catalog->toPoString()); + } + + private static function singleEntryCatalog(TranslationEntry $entry): TranslationCatalog + { + $catalog = new TranslationCatalog(); + $catalog->add($entry); + + return $catalog; + } + + private static function entry(?string $context, string $id, string $translation): TranslationEntry + { + $entry = new TranslationEntry($context, $id); + $entry->translate($translation); + + return $entry; + } + + #[DataProvider('values')] + public function testValuesRoundTripExactly(string $value): void + { + $read = self::roundTrip(self::singleEntryCatalog(self::entry('mod', 'id', $value)))->find('mod', 'id'); + + $this->assertNotNull($read); + $this->assertSame($value, $read->getTranslation()); + } + + public static function values(): array + { + return [ + 'empty' => [''], + 'zero' => ['0'], + 'zero with a line break' => ["0\n"], + 'double zero' => ['00'], + 'plain' => ['Hallo'], + 'double quote' => ['Klick "hier"'], + 'backslash' => ['C:\\temp\\'], + 'backslash before quote' => ['a\\"b'], + 'only a backslash' => ['\\'], + 'tab and carriage return' => ["a\tb\rc"], + 'multiline' => ["Zeile 1\nZeile 2\nZeile 3"], + 'trailing newline' => ["Zeile\n"], + 'only newlines' => ["\n\n"], + 'leading and trailing spaces' => [' Hallo '], + 'unicode' => ['Ünïcödé – 日本語 🙂'], + 'placeholder and html' => ['%s'], + 'literal escape sequence text' => ['\\n is not a newline'], + 'hash at start' => ['# not a comment'], + 'msgid-like text' => ["msgid \"x\"\nmsgstr \"y\""], + ]; + } + + /** + * PoGenerator treats a falsy translation as absent - without the adapter's workaround "0" (it + * occurs in the legacy ilias_fr.lang/ilias_pl.lang) would be written as an empty msgstr. + */ + public function testTheValueZeroIsWrittenAsExactlyZero(): void + { + $po = self::singleEntryCatalog(self::entry('mod', 'zero', '0'))->toPoString(); + + $this->assertStringContainsString("msgctxt \"mod\"\nmsgid \"zero\"\nmsgstr \"0\"\n", $po); + $this->assertStringNotContainsString("\0", $po); + } + + /** + * The workaround works on a copy: generating must not change the catalog it was called on (a + * leaked "0\0" would, e.g., make the next toPoString()/toMoString() or a value comparison differ). + */ + public function testGeneratingDoesNotChangeTheCatalog(): void + { + $entry = self::entry('mod', 'zero', '0'); + $catalog = self::singleEntryCatalog($entry); + + $first_po = $catalog->toPoString(); + $first_mo = $catalog->toMoString(); + + $this->assertSame('0', $entry->getTranslation()); + $this->assertSame('0', $catalog->find('mod', 'zero')?->getTranslation()); + $this->assertSame($first_po, $catalog->toPoString()); + $this->assertSame($first_mo, $catalog->toMoString()); + } + + public function testIdentifierAndContextRoundTripIncludingSpecialCharacters(): void + { + $catalog = self::singleEntryCatalog(self::entry("ctx \"q\"", "id\\with\nnewline", 'v')); + + $this->assertSame('v', self::roundTrip($catalog)->find("ctx \"q\"", "id\\with\nnewline")?->getTranslation()); + } + + /** + * Boundary of the "falsy" workaround: an identifier "0" is not special. + */ + public function testAnIdentifierZeroRoundTrips(): void + { + $catalog = self::singleEntryCatalog(self::entry('mod', '0', 'null')); + + $this->assertSame('null', self::roundTrip($catalog)->find('mod', '0')?->getTranslation()); + } + + /** + * The library cannot represent a context or msgid_plural of "" or "0" (PoGenerator/MoGenerator + * skip falsy ones, which would silently merge the message into the context-less one). Generating + * such a catalog throws instead of writing a different catalog. + */ + #[DataProvider('unrepresentableMessages')] + public function testAnUnrepresentableContextOrPluralIdThrowsWhenGenerating(string $po, bool $mo): void + { + $catalog = TranslationCatalog::fromPoString($po); + + $this->expectException(RuntimeException::class); + $mo ? $catalog->toMoString() : $catalog->toPoString(); + } + + public static function unrepresentableMessages(): array + { + $cases = [ + 'empty context' => "msgctxt \"\"\nmsgid \"a\"\nmsgstr \"b\"\n", + 'context zero' => "msgctxt \"0\"\nmsgid \"a\"\nmsgstr \"b\"\n", + 'empty plural id' => "msgid \"a\"\nmsgid_plural \"\"\nmsgstr[0] \"b\"\nmsgstr[1] \"c\"\n", + 'plural id zero' => "msgid \"a\"\nmsgid_plural \"0\"\nmsgstr[0] \"b\"\nmsgstr[1] \"c\"\n", + ]; + $data = []; + foreach ($cases as $name => $po) { + $data[$name . ', .po'] = [$po, false]; + $data[$name . ', .mo'] = [$po, true]; + } + + return $data; + } + + public function testAnEntryCreatedWithAContextZeroThrowsWhenGenerating(): void + { + $catalog = self::singleEntryCatalog(self::entry('0', 'a', 'b')); + + $this->expectException(RuntimeException::class); + $catalog->toPoString(); + } + + /** + * "original: ..." comments are compared with the value byte for byte - surrounding whitespace + * must survive; the loader must strip exactly the one space after the comment marker. + */ + public function testCommentsAndFlagsRoundTripWithoutTrimming(): void + { + $entry = self::entry('mod', 'id', 'v'); + $entry->addTranslatorComment('original: Hallo '); + $entry->addTranslatorComment(''); + $entry->addTranslatorComment(' leading space'); + $entry->addTranslatorComment('trailing space '); + $entry->addTranslatorComment('.looks like an extracted marker'); + $entry->addExtractedComment(' extracted '); + $entry->addFlag('php-format'); + $entry->addFlag('fuzzy'); + + $read = self::roundTrip(self::singleEntryCatalog($entry))->find('mod', 'id'); + + $this->assertNotNull($read); + $this->assertSame( + ['original: Hallo ', '', ' leading space', 'trailing space ', '.looks like an extracted marker'], + $read->getTranslatorComments() + ); + $this->assertSame([' extracted '], $read->getExtractedComments()); + $this->assertSame(['fuzzy', 'php-format'], $read->getFlags()); + $this->assertTrue($read->hasFlag('fuzzy')); + } + + /** + * Layout of comments and flags as the library writes them (characterization): an empty comment + * is "# " (the old writer wrote "#"), flags are sorted and joined by "," without a space. + */ + public function testTheCommentAndFlagLayout(): void + { + $entry = self::entry('mod', 'id', 'v'); + $entry->addTranslatorComment(''); + $entry->addTranslatorComment(' note '); + $entry->addExtractedComment('ext'); + $entry->addFlag('php-format'); + $entry->addFlag('fuzzy'); + + $this->assertStringContainsString( + "# \n# note \n#. ext\n#, fuzzy,php-format\nmsgctxt \"mod\"\nmsgid \"id\"\nmsgstr \"v\"\n", + self::singleEntryCatalog($entry)->toPoString() + ); + } + + public function testCommentsWrittenWithoutASpaceAfterTheMarkerAreReadAsIs(): void + { + $entry = TranslationCatalog::fromPoString("#note\n#.ext\n#\nmsgid \"id\"\nmsgstr \"v\"\n")->find(null, 'id'); + + $this->assertNotNull($entry); + $this->assertSame(['note', ''], $entry->getTranslatorComments()); + $this->assertSame(['ext'], $entry->getExtractedComments()); + } + + /** + * A comment is a single `.po` line: a line break inside it would end the comment and corrupt + * the file, so it is replaced by a space when added. + */ + public function testALineBreakInACommentIsReplacedByASpace(): void + { + $entry = self::entry('mod', 'id', 'v'); + $entry->addTranslatorComment("eins\nzwei\r\ndrei\rvier"); + $entry->addExtractedComment("a\nb"); + + $read = self::roundTrip(self::singleEntryCatalog($entry))->find('mod', 'id'); + + $this->assertSame(['eins zwei drei vier'], $entry->getTranslatorComments()); + $this->assertNotNull($read); + $this->assertSame(['eins zwei drei vier'], $read->getTranslatorComments()); + $this->assertSame(['a b'], $read->getExtractedComments()); + } + + /** + * ILIAS itself has no plural API any more, but a loaded plural message is carried along and + * written back unchanged - also after its singular translation or comments were changed. + */ + public function testALoadedPluralMessageRoundTripsByteIdentically(): void + { + $po = "msgid \"\"\nmsgstr \"\"\n\"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 ? 1 : 2);\\n\"\n\n" + . "msgctxt \"mod\"\nmsgid \"item\"\nmsgid_plural \"items\"\nmsgstr[0] \"%d Eintrag\"\nmsgstr[1] \"%d Einträge\"\n" + . "msgstr[2] \"%d Einträgen\"\n"; + + $catalog = TranslationCatalog::fromPoString($po); + + $this->assertSame($po, $catalog->toPoString()); + $entry = $catalog->find('mod', 'item'); + $this->assertNotNull($entry); + $this->assertSame('%d Eintrag', $entry->getTranslation()); + + $entry->translate('%d Stück'); + $entry->addTranslatorComment('note'); + + $this->assertSame( + str_replace("msgctxt \"mod\"\nmsgid \"item\"", "# note\nmsgctxt \"mod\"\nmsgid \"item\"", str_replace('"%d Eintrag"', '"%d Stück"', $po)), + $catalog->toPoString() + ); + } + + /** + * Documented deviation from the GNU tools: the number of msgstr[n] written follows the + * Plural-Forms header - missing forms are written empty, surplus ones are dropped. + */ + #[DataProvider('pluralFormCounts')] + public function testTheNumberOfWrittenPluralFormsFollowsThePluralFormsHeader(string $header, string $forms, string $expected): void + { + $po = "msgid \"\"\nmsgstr \"\"\n" . $header . "\n" + . "msgid \"item\"\nmsgid_plural \"items\"\n" . $forms; + + $this->assertSame( + "msgid \"\"\nmsgstr \"\"\n" . $header . "\nmsgid \"item\"\nmsgid_plural \"items\"\n" . $expected, + TranslationCatalog::fromPoString($po)->toPoString() + ); + } + + public static function pluralFormCounts(): array + { + $two = "msgstr[0] \"a\"\nmsgstr[1] \"b\"\n"; + $three = $two . "msgstr[2] \"c\"\n"; + + return [ + 'as many as declared' => ["\"Plural-Forms: nplurals=3; plural=(n != 1);\\n\"\n", $three, $three], + 'fewer than declared' => ["\"Plural-Forms: nplurals=3; plural=(n != 1);\\n\"\n", $two, $two . "msgstr[2] \"\"\n"], + 'more than declared' => ["\"Plural-Forms: nplurals=2; plural=(n != 1);\\n\"\n", $three, $two], + 'no header' => ['', $two, $two], + ]; + } + + public function testASingularTranslationZeroOfAPluralMessageIsWrittenToThePo(): void + { + $po = "msgid \"\"\nmsgstr \"\"\n\nmsgid \"a\"\nmsgid_plural \"as\"\nmsgstr[0] \"0\"\nmsgstr[1] \"0\"\n"; + + $this->assertSame($po, TranslationCatalog::fromPoString($po)->toPoString()); + } + + public function testHeadersAreSortedByNameRegardlessOfTheOrderTheyWereSetIn(): void + { + $catalog = new TranslationCatalog(); + $catalog->setHeader('X-Domain', 'tos'); + $catalog->setHeader('Plural-Forms', 'nplurals=2; plural=(n != 1);'); + $catalog->setHeader('Content-Type', 'text/plain; charset=UTF-8'); + $catalog->setHeader('Language', 'de'); + + $expected = [ + 'Content-Type' => 'text/plain; charset=UTF-8', + 'Language' => 'de', + 'Plural-Forms' => 'nplurals=2; plural=(n != 1);', + 'X-Domain' => 'tos', + ]; + $this->assertSame($expected, $catalog->getHeaders()); + $this->assertSame( + "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Language: de\\n\"\n" + . "\"Plural-Forms: nplurals=2; plural=(n != 1);\\n\"\n\"X-Domain: tos\\n\"\n", + $catalog->toPoString() + ); + $read = self::roundTrip($catalog); + $this->assertSame($expected, $read->getHeaders()); + $this->assertSame([], $read->getEntries(), 'the header is not an entry'); + } + + public function testSetHeaderReplacesAValueTrimsItAndGetHeaderReturnsNullForAMissingOne(): void + { + $catalog = new TranslationCatalog(); + $catalog->setHeader('Language', 'fr'); + $catalog->setHeader('Language', " \t de "); + + $this->assertSame('de', $catalog->getHeader('Language')); + $this->assertSame(['Language' => 'de'], $catalog->getHeaders()); + $this->assertNull($catalog->getHeader('X-Domain')); + } + + /** + * The `.po` header block is split at line breaks when read - a value containing one could not + * be read back unchanged, so it is refused (and the header keeps its previous value). + */ + #[DataProvider('headerValuesWithALineBreak')] + public function testSetHeaderRefusesAValueWithALineBreak(string $value): void + { + $catalog = new TranslationCatalog(); + $catalog->setHeader('X-Note', 'bisher'); + + try { + $catalog->setHeader('X-Note', $value); + $this->fail('Expected an InvalidArgumentException'); + } catch (InvalidArgumentException $e) { + $this->assertStringContainsString('X-Note', $e->getMessage()); + } + + $this->assertSame(['X-Note' => 'bisher'], $catalog->getHeaders()); + } + + public static function headerValuesWithALineBreak(): array + { + return [ + 'LF inside' => ["a\nb"], + 'CR inside' => ["a\rb"], + 'CRLF inside' => ["a\r\nb"], + 'trailing LF' => ["a\n"], + 'leading CR' => ["\ra"], + 'only CRLF' => ["\r\n"], + ]; + } + + /** + * PoGenerator writes header values verbatim - a quote or backslash would end the string early + * and corrupt the whole file. + */ + public function testHeaderValuesWithQuotesAndBackslashesAreEscaped(): void + { + $catalog = new TranslationCatalog(); + $catalog->setHeader('X-Note', 'a "quoted" C:\\pfad\\'); + $catalog->setHeader('X-Zero', '0'); + + $po = $catalog->toPoString(); + + $this->assertStringContainsString("\"X-Note: a \\\"quoted\\\" C:\\\\pfad\\\\\\n\"\n", $po); + $this->assertSame( + ['X-Note' => 'a "quoted" C:\\pfad\\', 'X-Zero' => '0'], + TranslationCatalog::fromPoString($po)->getHeaders() + ); + } + + /** + * An escaped CR that stays inside a header value after loading could be read but never written + * back (setHeader() refuses it) - such a file counts as broken. + */ + #[DataProvider('headersWithALineBreakAfterLoading')] + public function testAHeaderValueKeepingALineBreakAfterLoadingIsRejected(string $po): void + { + $this->expectException(RuntimeException::class); + $this->expectExceptionMessage('The value of header "X-A" contains a line break.'); + TranslationCatalog::fromPoString($po); + } + + public static function headersWithALineBreakAfterLoading(): array + { + return [ + 'CR inside' => ["msgid \"\"\nmsgstr \"\"\n\"X-A: a\\rb\\n\"\n"], + 'CR inside, last header without a trailing \\n' => ["msgid \"\"\nmsgstr \"\"\n\"X-A: a\\rb\"\n"], + 'CR inside, after a valid header' => [ + "msgid \"\"\nmsgstr \"\"\n\"Language: de\\n\"\n\"X-A: a\\r\\rb\\n\"\n\nmsgid \"id\"\nmsgstr \"v\"\n", + ], + ]; + } + + public function testFromPoFileNamesTheFileOfAHeaderWithALineBreak(): void + { + $file = $this->temporaryDirectory() . '/header_de.po'; + file_put_contents($file, "msgid \"\"\nmsgstr \"\"\n\"X-A: a\\rb\\n\"\n"); + + $this->expectException(RuntimeException::class); + $this->expectExceptionMessageMatches('/^Invalid PO file ".*header_de\.po": The value of header "X-A" contains a line break\.$/'); + TranslationCatalog::fromPoFile($file); + } + + /** + * Boundary: line breaks the loader removes itself leave a valid header - a CR at either end is + * trimmed, and an escaped LF inside a value cannot survive loading at all, because the header + * block is split at LF and a line without "Name:" is appended to the previous header + * (characterization of gettext/gettext: "a\nb" is read as "ab"). + */ + #[DataProvider('headersLosingTheirLineBreakWhenLoaded')] + public function testAHeaderWhoseLineBreakIsRemovedWhenLoadedStaysValid(string $header_line, string $expected): void + { + $catalog = TranslationCatalog::fromPoString("msgid \"\"\r\nmsgstr \"\"\r\n" . $header_line . "\r\n"); + + $this->assertSame(['X-A' => $expected], $catalog->getHeaders()); + $this->assertSame("msgid \"\"\nmsgstr \"\"\n\"X-A: " . $expected . "\\n\"\n", $catalog->toPoString()); + } + + public static function headersLosingTheirLineBreakWhenLoaded(): array + { + return [ + 'trailing CR' => ['"X-A: tail\\r\\n"', 'tail'], + 'leading CR' => ['"X-A: \\rhead\\n"', 'head'], + 'escaped LF inside' => ['"X-A: a\\nb\\n"', 'ab'], + 'no line break' => ['"X-A: v\\n"', 'v'], + ]; + } + + public function testTheWriterLayoutMatchesTheShippedFiles(): void + { + $catalog = new TranslationCatalog(); + $catalog->setHeader('Language', 'de'); + $catalog->add(self::entry('tos', 'tos_agreement', "Zeile 1\nZeile 2")); + $catalog->add(self::entry('tos', 'tos_empty', '')); + + $this->assertSame( + "msgid \"\"\nmsgstr \"\"\n\"Language: de\\n\"\n\n" + . "msgctxt \"tos\"\nmsgid \"tos_agreement\"\nmsgstr \"\"\n\"Zeile 1\\n\"\n\"Zeile 2\"\n\n" + . "msgctxt \"tos\"\nmsgid \"tos_empty\"\nmsgstr \"\"\n", + $catalog->toPoString() + ); + } + + /** + * Property: every shipped `.po`/`.pot` of the migrated tos module is read by fromPoFile() and + * re-serialized byte-identically (convert_module_to_po.php and the overlay rely on that), and + * its `.mo` serves exactly the non-empty translations of the `.po`. + */ + public function testEveryShippedTosFileRoundTripsByteIdentically(): void + { + $files = glob(self::TOS_LANG_DIRECTORY . '/*.{po,pot}', GLOB_BRACE) ?: []; + $this->assertNotSame([], $files, 'the shipped tos files were not found'); + + foreach ($files as $file) { + $catalog = TranslationCatalog::fromPoFile($file); + $this->assertSame(file_get_contents($file), $catalog->toPoString(), basename($file)); + + $expected = []; + foreach ($catalog->getEntries() as $entry) { + // written without msgctxt by convert_module_to_po.php (the module is the directory's) + $this->assertNull($entry->getContext(), basename($file)); + if ($entry->getTranslation() !== '') { + $expected[$entry->getId()] = $entry->getTranslation(); + } + } + $actual = \MigratedPoFixture::readMoTranslations($catalog->toMoString()); + ksort($expected, SORT_STRING); + ksort($actual, SORT_STRING); + $this->assertSame($expected, $actual, basename($file)); + } + } + + public function testReadsMultilineStringsCrLfLineEndingsAndABom(): void + { + $po = "\xEF\xBB\xBFmsgid \"\"\r\nmsgstr \"\"\r\n\"Language: de\\n\"\r\n\r\n" + . "msgctxt \"mod\"\r\nmsgid \"id\"\r\nmsgstr \"\"\r\n\"eins \"\r\n\"zwei\"\r\n"; + + $catalog = TranslationCatalog::fromPoString($po); + + $this->assertSame('de', $catalog->getHeader('Language')); + $this->assertSame('eins zwei', $catalog->find('mod', 'id')?->getTranslation()); + $this->assertStringStartsWith("msgid \"\"\nmsgstr \"\"\n", $catalog->toPoString(), 'no BOM, LF only'); + } + + /** + * A BOM that is not at the very start is not skipped - it is data, i.e. a syntax error here. + */ + public function testOnlyALeadingBomIsSkipped(): void + { + $this->expectException(RuntimeException::class); + TranslationCatalog::fromPoString("msgid \"a\"\nmsgstr \"b\"\n\xEF\xBB\xBFmsgid \"c\"\nmsgstr \"d\"\n"); + } + + /** + * Every value is used as UTF-8 as it is - no charset conversion takes place anywhere. Content + * that is not valid UTF-8 at all (e.g. Latin-1 encoded bytes carrying a translation) must + * therefore be rejected outright, before the underlying loader even attempts to parse it. + */ + public function testRejectsContentThatIsNotValidUtf8(): void + { + $this->expectException(RuntimeException::class); + $this->expectExceptionMessage('not valid UTF-8'); + // "\xE4" (a bare Latin-1 "ä") is not a valid UTF-8 byte sequence on its own. + TranslationCatalog::fromPoString("msgid \"id\"\nmsgstr \"caf\xE4\"\n"); + } + + /** + * A `.po` can be valid UTF-8 while its "Content-Type" header declares another charset (e.g. copied from a + * Latin-1-era file). Values are read and written as UTF-8 verbatim, so honoring that declaration would mislabel the + * content: any charset other than UTF-8 is rejected. + */ + public function testRejectsAContentTypeHeaderDeclaringAnyCharsetOtherThanUtf8(): void + { + $this->expectException(RuntimeException::class); + $this->expectExceptionMessage('Unsupported charset "ISO-8859-1"'); + TranslationCatalog::fromPoString( + "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=ISO-8859-1\\n\"\n\n" + . "msgid \"id\"\nmsgstr \"value\"\n" + ); + } + + public function testDecodesControlEscapes(): void + { + $catalog = TranslationCatalog::fromPoString("msgid \"id\"\nmsgstr \"\\101\\x42\\a\\b\\f\\v\\t\\r\\n\"\n"); + + $this->assertSame("AB\x07\x08\x0c\x0b\t\r\n", $catalog->find(null, 'id')?->getTranslation()); + } + + /** + * Obsolete messages are dropped on load - and therefore never written back. + */ + public function testDropsObsoleteMessages(): void + { + $catalog = TranslationCatalog::fromPoString( + "msgid \"id\"\nmsgstr \"v\"\n\n#~ msgctxt \"mod\"\n#~ msgid \"gone\"\n#~ msgstr \"weg\"\n" + ); + + $this->assertCount(1, $catalog->getEntries()); + $this->assertNull($catalog->find('mod', 'gone')); + $this->assertNull($catalog->find(null, 'gone')); + $this->assertStringNotContainsString('gone', $catalog->toPoString()); + } + + /** + * References and previous-message lines have no API any more, but are carried along untouched. + */ + public function testReferencesAndPreviousMessageLinesAreWrittenBackAsLoaded(): void + { + $po = "msgid \"\"\nmsgstr \"\"\n\n#: file.php:12\n#: other.php\n#, fuzzy\n#| msgid \"old\"\nmsgid \"id\"\nmsgstr \"v\"\n"; + + $catalog = TranslationCatalog::fromPoString($po); + + $this->assertSame([], $catalog->find(null, 'id')?->getTranslatorComments()); + $this->assertSame($po, $catalog->toPoString()); + } + + public function testTheSameIdInDifferentContextsIsNoDuplicate(): void + { + $catalog = TranslationCatalog::fromPoString( + "msgctxt \"a\"\nmsgid \"id\"\nmsgstr \"A\"\n\nmsgctxt \"b\"\nmsgid \"id\"\nmsgstr \"B\"\n\nmsgid \"id\"\nmsgstr \"ohne\"\n" + ); + + $this->assertSame('A', $catalog->find('a', 'id')?->getTranslation()); + $this->assertSame('B', $catalog->find('b', 'id')?->getTranslation()); + $this->assertSame('ohne', $catalog->find(null, 'id')?->getTranslation()); + $this->assertSame(['A', 'B', 'ohne'], array_map( + static fn(TranslationEntry $entry): string => $entry->getTranslation(), + $catalog->getEntries() + )); + } + + /** + * An empty file or one without a header block is a valid (empty or header-less) catalog. + */ + #[DataProvider('validButEmptyPo')] + public function testAnEmptyOrHeaderlessPoIsNoError(string $po, int $expected_entries): void + { + $catalog = TranslationCatalog::fromPoString($po); + + $this->assertCount($expected_entries, $catalog->getEntries()); + $this->assertSame([], $catalog->getHeaders()); + } + + public static function validButEmptyPo(): array + { + return [ + 'empty' => ['', 0], + 'only a BOM' => ["\xEF\xBB\xBF", 0], + 'only blank lines' => ["\n\r\n\n", 0], + 'only a comment' => ["# just a comment\n", 0], + 'no header' => ["msgid \"a\"\nmsgstr \"b\"\n", 1], + 'empty header' => ["msgid \"\"\nmsgstr \"\"\n", 0], + ]; + } + + /** + * Everything StrictPoLoader rejects - and all of it as RuntimeException (the library's own + * exceptions are plain \Exception, which no caller would catch). + */ + #[DataProvider('brokenPo')] + public function testThrowsARuntimeExceptionForBrokenContent(string $po): void + { + $this->expectException(RuntimeException::class); + TranslationCatalog::fromPoString($po); + } + + public static function brokenPo(): array + { + $mo_catalog = new TranslationCatalog(); + $mo_catalog->add(self::entry('mod', 'id', 'v')); + + return [ + 'unterminated string' => ["msgid \"abc\nmsgstr \"\"\n"], + 'escaped closing quote' => ["msgid \"abc\\\"\nmsgstr \"\"\n"], + 'unquoted value' => ["msgid abc\nmsgstr \"\"\n"], + 'unknown keyword' => ["msgfoo \"abc\"\n"], + 'keyword without value' => ["msgid\n"], + 'continuation without keyword' => ["\"dangling\"\n"], + 'text after the closing quote' => ["msgid \"a\" trailing\nmsgstr \"\"\n"], + 'invalid escape sequence' => ["msgid \"a\\q\"\nmsgstr \"\"\n"], + 'octal escape above 127' => ["msgid \"a\"\nmsgstr \"\\303\\244\"\n"], + 'missing msgstr before the next message' => ["msgid \"a\"\n\nmsgid \"b\"\nmsgstr \"B\"\n"], + 'missing msgstr at the end' => ["msgid \"a\"\nmsgstr \"A\"\n\nmsgid \"b\"\n"], + 'msgstr without msgid' => ["msgstr \"A\"\n"], + 'duplicate message' => ["msgid \"a\"\nmsgstr \"first\"\n\nmsgid \"a\"\nmsgstr \"second\"\n"], + 'duplicate message with context' => ["msgctxt \"m\"\nmsgid \"a\"\nmsgstr \"1\"\n\nmsgctxt \"m\"\nmsgid \"a\"\nmsgstr \"2\"\n"], + 'gap in the plural forms' => ["msgid \"a\"\nmsgid_plural \"as\"\nmsgstr[0] \"x\"\nmsgstr[2] \"z\"\n"], + 'plural forms not starting at 0' => ["msgid \"a\"\nmsgid_plural \"as\"\nmsgstr[1] \"y\"\n"], + 'binary data' => ["\x00\x01\x02\xff\xfe binary"], + 'a .mo file' => [$mo_catalog->toMoString()], + 'truncated inside a string' => ["msgctxt \"mod\"\nmsgid \"id\"\nmsgstr \"Hal"], + 'truncated inside a keyword' => ["msgctxt \"mod\"\nmsgid \"id\"\nmsg"], + 'truncated after msgctxt' => ["msgctxt \"mod\"\n"], + ]; + } + + public function testTheLineOfTheErrorIsReported(): void + { + $this->expectException(RuntimeException::class); + $this->expectExceptionMessageMatches('/line 3\b/'); + TranslationCatalog::fromPoString("msgid \"a\"\nmsgstr \"A\"\nbroken\n"); + } + + /** + * The adapter's temporary error handler must be removed again on success and on failure - + * otherwise every later warning of the request would be turned into an exception. + */ + public function testTheErrorHandlerIsRestoredAfterReading(): void + { + $handler = static fn(): bool => false; + set_error_handler($handler); + try { + TranslationCatalog::fromPoString("msgid \"a\"\nmsgstr \"b\"\n"); + try { + TranslationCatalog::fromPoString('broken'); + $this->fail('Expected a RuntimeException'); + } catch (RuntimeException) { + } + + $current = set_error_handler(null); + restore_error_handler(); + $this->assertSame($handler, $current); + } finally { + restore_error_handler(); + } + } + + public function testFromPoFileReadsAFile(): void + { + $file = $this->temporaryDirectory() . '/mod_de.po'; + file_put_contents($file, "msgid \"\"\nmsgstr \"\"\n\"Language: de\\n\"\n\nmsgctxt \"mod\"\nmsgid \"id\"\nmsgstr \"v\"\n"); + + $catalog = TranslationCatalog::fromPoFile($file); + + $this->assertSame('de', $catalog->getHeader('Language')); + $this->assertSame('v', $catalog->find('mod', 'id')?->getTranslation()); + } + + public function testFromPoFileNamesTheFileOfABrokenPo(): void + { + $file = $this->temporaryDirectory() . '/broken_de.po'; + file_put_contents($file, "msgid \"a\"\nmsgstr \"A\"\nbroken\n"); + + $this->expectException(RuntimeException::class); + $this->expectExceptionMessageMatches('/^Invalid PO file ".*broken_de\.po": .*line 3\b/'); + TranslationCatalog::fromPoFile($file); + } + + public function testFromPoFileThrowsForAMissingFile(): void + { + $this->expectException(RuntimeException::class); + $this->expectExceptionMessageMatches('/Could not read PO file/'); + TranslationCatalog::fromPoFile($this->temporaryDirectory() . '/missing.po'); + } + + public function testFromPoFileThrowsForADirectory(): void + { + $this->expectException(RuntimeException::class); + $this->expectExceptionMessageMatches('/Could not read PO file/'); + TranslationCatalog::fromPoFile($this->temporaryDirectory()); + } + + public function testFromPoFileThrowsForAnUnreadableFile(): void + { + $file = $this->temporaryDirectory() . '/unreadable.po'; + file_put_contents($file, "msgid \"a\"\nmsgstr \"b\"\n"); + chmod($file, 0000); + if (is_readable($file)) { + $this->markTestSkipped('File permissions are not enforced for this user (root).'); + } + + $this->expectException(RuntimeException::class); + $this->expectExceptionMessageMatches('/Could not read PO file/'); + TranslationCatalog::fromPoFile($file); + } + + /** + * MigratedLanguageFileSync seeds a new overlay from a clone of the shipped catalog and relies on + * the shipped one keeping its values; a shallow clone would share the messages. + */ + public function testCloneIsIndependentOfTheOriginal(): void + { + $original = self::singleEntryCatalog(self::entry('common', 'save', 'Speichern')); + $original->setHeader('Language', 'de'); + $original_po = $original->toPoString(); + + $clone = clone $original; + $cloned_entry = $clone->find('common', 'save'); + $cloned_entry->translate('Sichern'); + $cloned_entry->addFlag('fuzzy'); + $cloned_entry->setExtractedComments(['changed']); + $clone->add($cloned_entry); + $clone->add(self::entry('common', 'cancel', 'Abbrechen')); + $clone->setHeader('Language', 'en'); + + $this->assertSame($original_po, $original->toPoString()); + $this->assertSame('Speichern', $original->find('common', 'save')->getTranslation()); + $this->assertNull($original->find('common', 'cancel')); + $this->assertSame('Sichern', $clone->find('common', 'save')->getTranslation()); + $this->assertSame('en', $clone->getHeader('Language')); + } + + /** + * @return list the ids in the order the catalog holds them + */ + private static function idsOf(TranslationCatalog $catalog): array + { + return array_map(static fn(TranslationEntry $entry): string => $entry->getId(), $catalog->getEntries()); + } + + private static function catalogOfIds(string ...$ids): TranslationCatalog + { + $catalog = new TranslationCatalog(); + foreach ($ids as $id) { + $catalog->add(self::entry('common', $id, $id)); + } + + return $catalog; + } + + public function testAddInIdOrderInsertsAtTheFront(): void + { + $catalog = self::catalogOfIds('m', 'z'); + + $catalog->addInIdOrder(self::entry('common', 'a', 'A')); + + $this->assertSame(['a', 'm', 'z'], self::idsOf($catalog)); + } + + public function testAddInIdOrderInsertsInTheMiddle(): void + { + $catalog = self::catalogOfIds('a', 'z'); + + $catalog->addInIdOrder(self::entry('common', 'm', 'M')); + + $this->assertSame(['a', 'm', 'z'], self::idsOf($catalog)); + } + + public function testAddInIdOrderInsertsAtTheEnd(): void + { + $catalog = self::catalogOfIds('a', 'm'); + + $catalog->addInIdOrder(self::entry('common', 'z', 'Z')); + + $this->assertSame(['a', 'm', 'z'], self::idsOf($catalog)); + } + + /** + * An entry with an id (and context) the catalog already has is replaced in place, like add() - + * neither removed and re-appended nor duplicated. + */ + public function testAddInIdOrderReplacesAnExistingEntryInPlace(): void + { + $catalog = self::catalogOfIds('a', 'm', 'z'); + + $catalog->addInIdOrder(self::entry('common', 'm', 'replaced')); + + $this->assertSame(['a', 'm', 'z'], self::idsOf($catalog)); + $this->assertSame('replaced', $catalog->find('common', 'm')->getTranslation()); + } + + public function testAddInIdOrderOnAnEmptyCatalogAddsTheOnlyEntry(): void + { + $catalog = new TranslationCatalog(); + + $catalog->addInIdOrder(self::entry('common', 'a', 'A')); + + $this->assertSame(['a'], self::idsOf($catalog)); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/Catalog/TranslationEntryTest.php b/components/ILIAS/Language/tests/ComponentTranslation/Catalog/TranslationEntryTest.php new file mode 100644 index 000000000000..cc3f266906d8 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/Catalog/TranslationEntryTest.php @@ -0,0 +1,286 @@ +translate($translation); + + return $entry; + } + + /** + * @return list + */ + private static function describe(TranslationCatalog $catalog): array + { + return array_map( + static fn(TranslationEntry $entry): array => [$entry->getContext(), $entry->getId(), $entry->getTranslation()], + $catalog->getEntries() + ); + } + + public function testANewEntryIsEmpty(): void + { + $entry = new TranslationEntry(null, 'id'); + + $this->assertNull($entry->getContext()); + $this->assertSame('id', $entry->getId()); + $this->assertSame('', $entry->getTranslation()); + $this->assertSame([], $entry->getTranslatorComments()); + $this->assertSame([], $entry->getExtractedComments()); + $this->assertSame([], $entry->getFlags()); + } + + public function testTranslateReplacesTheTranslation(): void + { + $entry = self::entry('mod', 'id', 'alt'); + $entry->translate('0'); + + $this->assertSame('mod', $entry->getContext()); + $this->assertSame('0', $entry->getTranslation()); + } + + /** + * Flags are deduplicated, kept sorted by the library, an empty flag is ignored and removing an + * absent one is a no-op. + */ + public function testFlagsAreSortedDeduplicatedEmptyOnesIgnoredAndRemovable(): void + { + $entry = new TranslationEntry('mod', 'id'); + $entry->addFlag('php-format'); + $entry->addFlag('fuzzy'); + $entry->addFlag('fuzzy'); + $entry->addFlag(''); + + $this->assertSame(['fuzzy', 'php-format'], $entry->getFlags()); + + $entry->removeFlag('fuzzy'); + $entry->removeFlag('not-set'); + + $this->assertSame(['php-format'], $entry->getFlags()); + $this->assertFalse($entry->hasFlag('fuzzy')); + $this->assertTrue($entry->hasFlag('php-format')); + } + + public function testRemoveTranslatorCommentsStartingWithOnlyRemovesMatchingCommentsAndKeepsTheOrder(): void + { + $entry = new TranslationEntry('mod', 'id'); + $entry->addTranslatorComment('original: a'); + $entry->addTranslatorComment('note'); + $entry->addTranslatorComment('original: b'); + $entry->addTranslatorComment(' original: indented'); + $entry->addTranslatorComment('original:no space'); + $entry->addTranslatorComment('last'); + + $entry->removeTranslatorCommentsStartingWith('original: '); + + $this->assertSame(['note', ' original: indented', 'original:no space', 'last'], $entry->getTranslatorComments()); + } + + /** + * Characterization of gettext/gettext: comments are a set compared loosely - an equal comment, + * but also a numerically equal one ("1" == "01" == "1.0"), is not added a second time. The + * component's own comments ("original: ...", "local_change: ...") are never numeric. + */ + public function testAnEqualCommentIsNotStoredTwice(): void + { + $entry = new TranslationEntry('mod', 'id'); + $entry->addTranslatorComment('note'); + $entry->addTranslatorComment('note'); + $entry->addTranslatorComment('1'); + $entry->addTranslatorComment('01'); + $entry->addTranslatorComment('1.0'); + $entry->addExtractedComment('ext'); + $entry->addExtractedComment('ext'); + + $this->assertSame(['note', '1'], $entry->getTranslatorComments()); + $this->assertSame(['ext'], $entry->getExtractedComments()); + } + + public function testSetExtractedCommentsReplacesAllOfThemAsSingleLines(): void + { + $entry = new TranslationEntry('mod', 'id'); + $entry->addExtractedComment('old'); + $entry->addTranslatorComment('translator'); + + $entry->setExtractedComments(['b', "c\nd", 'a']); + + $this->assertSame(['b', 'c d', 'a'], $entry->getExtractedComments()); + $this->assertSame(['translator'], $entry->getTranslatorComments(), 'translator comments are separate'); + + $entry->setExtractedComments([]); + + $this->assertSame([], $entry->getExtractedComments()); + } + + /** + * An extracted comment (`#.`) may come from an admin remark (see ShippedPoMerger): control characters and bidi + * override/embedding/isolate characters become a space, not just the line breaks singleLine() handles; a translator + * comment ("original: ...") is only normalised to a single line. + */ + public function testAddExtractedCommentReplacesControlAndBidiCharactersWithASpace(): void + { + $entry = new TranslationEntry('mod', 'id'); + + $entry->addExtractedComment("a\tb\u{202E}c\u{2066}d"); + + $this->assertSame(['a b c d'], $entry->getExtractedComments()); + } + + public function testAddTranslatorCommentKeepsControlCharactersOtherThanLineBreaks(): void + { + $entry = new TranslationEntry('mod', 'id'); + + $entry->addTranslatorComment("original: a\tb"); + + $this->assertSame(["original: a\tb"], $entry->getTranslatorComments()); + } + + public function testFindDistinguishesContexts(): void + { + $catalog = new TranslationCatalog(); + $catalog->add(self::entry(null, 'id', 'ohne')); + $catalog->add(self::entry('mod', 'id', 'mod')); + + $this->assertSame('ohne', $catalog->find(null, 'id')?->getTranslation()); + $this->assertSame('mod', $catalog->find('mod', 'id')?->getTranslation()); + $this->assertNull($catalog->find('other', 'id')); + $this->assertNull($catalog->find('mod', 'ID')); + } + + public function testGetEntriesKeepsTheInsertionOrder(): void + { + $catalog = new TranslationCatalog(); + $catalog->add(self::entry('mod', 'b', 'B')); + $catalog->add(self::entry('mod', '10', 'zehn')); + $catalog->add(self::entry('mod', 'a', 'A')); + + $this->assertSame([['mod', 'b', 'B'], ['mod', '10', 'zehn'], ['mod', 'a', 'A']], self::describe($catalog)); + } + + public function testAddReplacesAnEntryWithTheSameContextAndIdKeepingItsPosition(): void + { + $catalog = new TranslationCatalog(); + $catalog->add(self::entry('mod', 'a', 'alt')); + $catalog->add(self::entry('mod', 'b', 'B')); + $catalog->add(self::entry('other', 'a', 'fremd')); + + $catalog->add(self::entry('mod', 'a', 'neu')); + + $this->assertSame([['mod', 'a', 'neu'], ['mod', 'b', 'B'], ['other', 'a', 'fremd']], self::describe($catalog)); + } + + /** + * add() does not copy: MigratedLanguageFileSync takes entries of one catalog, changes and adds + * them to another one - and relies on find() returning the message itself. + */ + public function testAnAddedEntryIsSharedNotCopied(): void + { + $first = new TranslationCatalog(); + $second = new TranslationCatalog(); + $entry = self::entry('mod', 'a', 'alt'); + $first->add($entry); + $second->add($entry); + + $entry->translate('nach add'); + $first->find('mod', 'a')?->addFlag('fuzzy'); + + $this->assertSame('nach add', $first->find('mod', 'a')?->getTranslation()); + $this->assertSame('nach add', $second->find('mod', 'a')?->getTranslation()); + $this->assertTrue($entry->hasFlag('fuzzy')); + $this->assertTrue($second->find('mod', 'a')?->hasFlag('fuzzy')); + } + + /** + * Two catalogs read from the same file are independent (sync() reads the shipped file twice + * for exactly that reason: one copy is modified, the other one is the comparison baseline). + */ + public function testCatalogsReadFromTheSameContentAreIndependent(): void + { + $po = "msgctxt \"mod\"\nmsgid \"a\"\nmsgstr \"shipped\"\n"; + $baseline = TranslationCatalog::fromPoString($po); + $modified = TranslationCatalog::fromPoString($po); + + $modified->find('mod', 'a')?->translate('changed'); + + $this->assertSame('shipped', $baseline->find('mod', 'a')?->getTranslation()); + } + + /** + * withContext() returns an independent COPY with the new context - the original entry itself + * (context, id) is left completely unchanged. + */ + public function testWithContextReturnsACopyLeavingTheOriginalEntryUnchanged(): void + { + $original = self::entry('mod', 'greeting', 'Hallo'); + + $copy = $original->withContext(null); + + $this->assertSame('mod', $original->getContext()); + $this->assertSame('greeting', $original->getId()); + $this->assertNull($copy->getContext()); + $this->assertSame('greeting', $copy->getId()); + } + + /** + * Everything besides the context - the translation, comments, extracted comments and flags - + * survives withContext() untouched (see MigratedLanguageFileSync::syncLocked(), which relies on + * this to migrate a legacy overlay entry that carried the module as msgctxt onto the new, + * msgctxt-less shape without losing its bookkeeping). + */ + public function testWithContextPreservesTranslationCommentsAndFlags(): void + { + $original = self::entry('mod', 'greeting', 'Hallo'); + $original->addTranslatorComment('original: Hello'); + $original->addExtractedComment('shown on the login page'); + $original->addFlag('fuzzy'); + + $copy = $original->withContext(null); + + $this->assertSame('Hallo', $copy->getTranslation()); + $this->assertSame(['original: Hello'], $copy->getTranslatorComments()); + $this->assertSame(['shown on the login page'], $copy->getExtractedComments()); + $this->assertTrue($copy->hasFlag('fuzzy')); + } + + public function testWithContextCanSetAContextOnAContextlessEntry(): void + { + $original = self::entry(null, 'greeting', 'Hallo'); + + $copy = $original->withContext('mod'); + + $this->assertNull($original->getContext()); + $this->assertSame('mod', $copy->getContext()); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/ComponentLanguageFileDirectoryTest.php b/components/ILIAS/Language/tests/ComponentTranslation/ComponentLanguageFileDirectoryTest.php new file mode 100644 index 000000000000..f721ee6b4329 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/ComponentLanguageFileDirectoryTest.php @@ -0,0 +1,125 @@ +getPath(); + $second_call = $directory->getPath(); + $third_call = $directory->getPath(); + + self::assertSame($expected_path, $first_call); + self::assertSame($first_call, $second_call); + self::assertSame($first_call, $third_call); + } + + public function testGetPathAppendsTheConfiguredPathInsideComponentToTheBaseDirectory(): void + { + $component = new class () implements Component { + public function init( + array|\ArrayAccess &$define, + array|\ArrayAccess &$implement, + array|\ArrayAccess &$use, + array|\ArrayAccess &$contribute, + array|\ArrayAccess &$seek, + array|\ArrayAccess &$provide, + array|\ArrayAccess &$pull, + array|\ArrayAccess &$internal, + ): void { + } + }; + + $directory = new ComponentLanguageFileDirectory($component, 'tst', 'custom/lang/path/'); + + self::assertStringEndsWith('/custom/lang/path/', $directory->getPath()); + } + + private function anyComponent(): Component + { + return new class () implements Component { + public function init( + array|\ArrayAccess &$define, + array|\ArrayAccess &$implement, + array|\ArrayAccess &$use, + array|\ArrayAccess &$contribute, + array|\ArrayAccess &$seek, + array|\ArrayAccess &$provide, + array|\ArrayAccess &$pull, + array|\ArrayAccess &$internal, + ): void { + } + }; + } + + public function testDefaultShippedFileNamePatternIsPrefixUnderscore(): void + { + $directory = new ComponentLanguageFileDirectory($this->anyComponent(), 'tos'); + + self::assertSame('tos_%s', $directory->getShippedFileNamePattern()); + } + + public function testACustomShippedFileNamePatternIsUsedAsGiven(): void + { + $directory = new ComponentLanguageFileDirectory($this->anyComponent(), 'tos', 'lang/', 'ilias_%s'); + + self::assertSame('ilias_%s', $directory->getShippedFileNamePattern()); + } + + public function testAnInvalidCustomShippedFileNamePatternIsRejectedByTheConstructor(): void + { + $this->expectException(\InvalidArgumentException::class); + + new ComponentLanguageFileDirectory($this->anyComponent(), 'tos', 'lang/', 'no-placeholder-at-all'); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/DuplicateIdentifierMessageTest.php b/components/ILIAS/Language/tests/ComponentTranslation/DuplicateIdentifierMessageTest.php new file mode 100644 index 000000000000..79d028b18211 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/DuplicateIdentifierMessageTest.php @@ -0,0 +1,118 @@ +createStub(Language::class); + $lng->method('txt')->willReturn($text); + + return $lng; + } + + private function refinery(): Refinery + { + return new Refinery($this->createStub(DataFactory::class), $this->createStub(Language::class)); + } + + public function testAnEntryNamesItsKeyAndWhatItWouldDuplicate(): void + { + $this->assertSame( + 'tos#:#x (common: x, mme: X)', + DuplicateIdentifierMessage::entry('tos#:#x', ['common: x', 'mme: X']) + ); + } + + public function testTheMessageEscapesTheKeysAndFillsThePlaceholder(): void + { + $message = DuplicateIdentifierMessage::of( + $this->lng('Not unique: %s'), + $this->refinery(), + ['a#:# (x: "")', 'c#:#d (e: d)'] + ); + + $this->assertSame('Not unique: a#:#<b> (x: "<b>"); c#:#d (e: d)', $message); + } + + /** A translation without the placeholder, or with another "%", still names the entries and does not fail. */ + public function testATextWithoutPlaceholderGetsTheListAppendedAndAFurtherPercentSignIsKept(): void + { + $this->assertSame( + 'Not unique 100% right. a (b: a)', + DuplicateIdentifierMessage::of($this->lng('Not unique 100% right.'), $this->refinery(), ['a (b: a)']) + ); + $this->assertSame( + '100% unique: a (b: a)', + DuplicateIdentifierMessage::of($this->lng('100% unique: %s'), $this->refinery(), ['a (b: a)']) + ); + } + + /** The keys come from an uploaded file: one entry is cut to 200 characters, the list to the first entries of PlainLogText. */ + public function testEntriesAreShortenedAndTheListIsLimited(): void + { + $long = str_repeat('k', 300); + $entries = [$long]; + for ($i = 1; $i <= PlainLogText::MAX_LISTED_KEYS + 4; $i++) { + $entries[] = 'e' . $i; + } + + $message = DuplicateIdentifierMessage::of($this->lng('%s'), $this->refinery(), $entries); + + $this->assertStringStartsWith(str_repeat('k', 199) . '…; e1; ', $message); + $this->assertStringNotContainsString(str_repeat('k', 200), $message); + $this->assertStringContainsString('… (+5)', $message); + $this->assertStringNotContainsString('e' . (PlainLogText::MAX_LISTED_KEYS + 4), $message); + } + + public function testTheLogLineHoldsAtMostTwoHundredShortenedEntriesAndCountsTheRest(): void + { + $entries = [str_repeat('k', 300)]; + for ($i = 1; $i < 250; $i++) { + $entries[] = 'e' . $i; + } + + $line = DuplicateIdentifierMessage::forLog($entries); + + $this->assertStringContainsString(str_repeat('k', 199) . '…; e1; ', $line); + $this->assertStringNotContainsString(str_repeat('k', 200), $line); + $this->assertStringContainsString('e199', $line); + $this->assertStringNotContainsString('e200;', $line); + $this->assertStringEndsWith(' … (+50)', $line); + } + + public function testTheLogLineWithFewEntriesHasNoRemainderAndNoControlCharacters(): void + { + $line = DuplicateIdentifierMessage::forLog(["a#:#b\x1b[31m (c: b)"]); + + $this->assertStringContainsString('a#:#b?[31m (c: b)', $line); + $this->assertStringNotContainsString('(+', $line); + $this->assertStringNotContainsString("\x1b", $line); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/IdentifierUniquenessTest.php b/components/ILIAS/Language/tests/ComponentTranslation/IdentifierUniquenessTest.php new file mode 100644 index 000000000000..9b440c1510ea --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/IdentifierUniquenessTest.php @@ -0,0 +1,257 @@ + every query */ + private array $queries = []; + + /** + * lng_data answers case-insensitively like its collation; without a WHERE it hands out every row. + * + * @param list $lng_data + */ + private function db(array $lng_data): \ilDBInterface + { + $chunk = null; + $rows_of = []; + $db = $this->createStub(\ilDBInterface::class); + $db->method('in')->willReturnCallback(static function (string $field, array $values) use (&$chunk): string { + $chunk = array_map(mb_strtolower(...), $values); + + return 'identifier IN (…)'; + }); + $db->method('query')->willReturnCallback(function (string $sql) use (&$chunk, &$rows_of, $lng_data): \ilDBStatement { + $this->queries[] = $sql; + $statement = $this->createStub(\ilDBStatement::class); + $with_where = str_contains($sql, ' WHERE '); + $rows_of[spl_object_id($statement)] = $with_where + ? array_values(array_filter( + $lng_data, + static fn(array $row): bool => in_array(mb_strtolower($row['identifier']), $chunk ?? [], true) + )) + : $lng_data; + + return $statement; + }); + $db->method('fetchAssoc')->willReturnCallback( + static function (\ilDBStatement $statement) use (&$rows_of): ?array { + return array_shift($rows_of[spl_object_id($statement)]); + } + ); + + return $db; + } + + /** + * @param list $lng_data + * @return IdentifierUniqueness + */ + private function uniqueness(array $lng_data = []): IdentifierUniqueness + { + return new IdentifierUniqueness($this->db($lng_data)); + } + + public function testAnIdentifierOfAnotherModuleInTheDatabaseIsADuplicate(): void + { + $uniqueness = $this->uniqueness([['module' => 'mme', 'identifier' => 'login'], ['module' => 'mme', 'identifier' => 'other']]); + + $this->assertSame( + ['common#:#login' => ['mme: login']], + $uniqueness->findDuplicatesAmong([ + 'common#:#login' => ['module' => 'common', 'identifier' => 'login'], + 'common#:#free' => ['module' => 'common', 'identifier' => 'free'], + ]) + ); + } + + public function testAnOtherSpellingIsADuplicateAndNamedAsStored(): void + { + $uniqueness = $this->uniqueness([['module' => 'mme', 'identifier' => 'login']]); + + $this->assertSame( + [0 => ['mme: login']], + $uniqueness->findDuplicatesAmong([['module' => 'common', 'identifier' => 'Login']]) + ); + } + + /** The module holds "login" in another spelling than the entry: that is a duplicate, the module name is not case-sensitive. */ + public function testTheSpellingCountsInTheOwnModuleButNotTheCaseOfTheModuleName(): void + { + $this->assertSame( + [0 => ['common: login']], + $this->uniqueness([['module' => 'common', 'identifier' => 'login']]) + ->findDuplicatesAmong([['module' => 'common', 'identifier' => 'Login']]) + ); + $this->assertSame( + [], + $this->uniqueness([['module' => 'COMMON', 'identifier' => 'login']]) + ->findDuplicatesAmong([['module' => 'common', 'identifier' => 'login']]) + ); + } + + public function testAnOldCollisionOfTheOwnModuleInTheSameSpellingIsNoDuplicate(): void + { + $uniqueness = $this->uniqueness([['module' => 'mme', 'identifier' => 'login'], ['module' => 'COMMON', 'identifier' => 'login']]); + + $this->assertSame([], $uniqueness->findDuplicatesAmong([['module' => 'common', 'identifier' => 'login']])); + } + + public function testTheSameIdentifierInTwoModulesOfOneCallIsADuplicateOfBoth(): void + { + $this->assertSame( + ['a#:#x' => ['b: x', 'c: X'], 'b#:#x' => ['a: x', 'c: X'], 'c#:#X' => ['a: x', 'b: x']], + $this->uniqueness()->findDuplicatesAmong([ + 'a#:#x' => ['module' => 'a', 'identifier' => 'x'], + 'b#:#x' => ['module' => 'b', 'identifier' => 'x'], + 'c#:#X' => ['module' => 'c', 'identifier' => 'X'], + 'a#:#y' => ['module' => 'a', 'identifier' => 'y'], + ]) + ); + } + + public function testTheFormsOfOnePluralMessageAreNoDuplicatesOfEachOtherButOfAnotherModulesIdentifier(): void + { + $entries = [ + 'poll#:#item [1]' => ['module' => 'poll', 'identifier' => 'item [1]'], + 'poll#:#item [2]' => ['module' => 'poll', 'identifier' => 'item [2]'], + ]; + + $this->assertSame([], $this->uniqueness()->findDuplicatesAmong($entries)); + $this->assertSame( + ['poll#:#item [1]' => ['mme: item'], 'poll#:#item [2]' => ['mme: item']], + $this->uniqueness([['module' => 'mme', 'identifier' => 'item']])->findDuplicatesAmong($entries) + ); + } + + public function testNoEntriesAskNothing(): void + { + $db = $this->createMock(\ilDBInterface::class); + $db->expects($this->never())->method('query'); + + $this->assertSame([], (new IdentifierUniqueness($db))->findDuplicatesAmong([])); + } + + /** Up to 1000 identifiers lng_data is asked for them, above it is read once: either way every hit is found. */ + public function testTheThresholdOf1000IdentifiersSwitchesFromTheListToOneFullRead(): void + { + $lng_data = [['module' => 'other', 'identifier' => 'id_5'], ['module' => 'other', 'identifier' => 'id_999']]; + $entries = []; + for ($i = 0; $i < 1000; $i++) { + $entries['m#:#id_' . $i] = ['module' => 'm', 'identifier' => 'id_' . $i]; + } + + $at_threshold = $this->uniqueness($lng_data)->findDuplicatesAmong($entries); + + $this->assertCount(1, $this->queries); + $this->assertStringContainsString(' WHERE ', $this->queries[0]); + $this->assertSame(['m#:#id_5' => ['other: id_5'], 'm#:#id_999' => ['other: id_999']], $at_threshold); + + $entries['m#:#id_1000'] = ['module' => 'm', 'identifier' => 'id_1000']; + $lng_data[] = ['module' => 'other', 'identifier' => 'ID_1000']; + + $above_threshold = $this->uniqueness($lng_data)->findDuplicatesAmong($entries); + + $this->assertCount(2, $this->queries, 'one more query'); + $this->assertStringNotContainsString(' WHERE ', $this->queries[1]); + $this->assertSame( + ['m#:#id_5' => ['other: id_5'], 'm#:#id_999' => ['other: id_999'], 'm#:#id_1000' => ['other: ID_1000']], + $above_threshold + ); + } + + /** A full read hands out rows of identifiers nobody asked for: they are no duplicates. */ + public function testRowsOfOtherIdentifiersAreIgnoredByTheFullRead(): void + { + $entries = []; + for ($i = 0; $i < 1001; $i++) { + $entries[$i] = ['module' => 'm', 'identifier' => 'id_' . $i]; + } + + $this->assertSame([], $this->uniqueness([['module' => 'other', 'identifier' => 'unrelated']])->findDuplicatesAmong($entries)); + } + + public function testAtMostTenDuplicatesAreNamedPerEntryInSortedOrder(): void + { + $lng_data = []; + for ($i = 20; $i >= 1; $i--) { + $lng_data[] = ['module' => sprintf('mod%02d', $i), 'identifier' => 'x']; + } + + $duplicates = $this->uniqueness($lng_data)->findDuplicatesAmong([0 => ['module' => 'common', 'identifier' => 'x']]); + + $this->assertSame( + array_map(static fn(int $i): string => sprintf('mod%02d: x', $i), range(1, 10)), + $duplicates[0] ?? null + ); + } + + /** Many entries with one identifier must not make the comparison quadratic (every entry names at most ten). */ + public function testManyEntriesWithTheSameIdentifierAreComparedInLinearTime(): void + { + $entries = []; + for ($i = 0; $i < 20000; $i++) { + $entries[$i] = ['module' => 'module_' . $i, 'identifier' => 'x']; + } + + $start = microtime(true); + $duplicates = $this->uniqueness()->findDuplicatesAmong($entries); + $seconds = microtime(true) - $start; + + $this->assertCount(20000, $duplicates); + $this->assertSame(10, count($duplicates[19999])); + $this->assertLessThan(5.0, $seconds); + } + + public function testKnownEntriesCountLikeRowsOfTheDatabase(): void + { + $known = [ + ['module' => 'mme', 'identifier' => 'login'], + ['module' => 'common', 'identifier' => 'own'], + ['module' => 'mme', 'identifier' => 'unrelated'], + ]; + + $this->assertSame( + ['common#:#Login' => ['mme: login']], + $this->uniqueness()->findDuplicatesAmong([ + 'common#:#Login' => ['module' => 'common', 'identifier' => 'Login'], + 'common#:#own' => ['module' => 'common', 'identifier' => 'own'], + ], $known) + ); + } + + public function testFindDuplicatesOfAndFilterAddableDelegateTheSameRule(): void + { + $uniqueness = $this->uniqueness([['module' => 'mme', 'identifier' => 'login'], ['module' => 'common', 'identifier' => 'yes']]); + + $this->assertSame(['mme: login'], $uniqueness->findDuplicatesOf('common', 'Login')); + $this->assertSame([], $uniqueness->findDuplicatesOf('common', 'yes')); + $this->assertSame(['yes', 'free'], $uniqueness->filterAddable(['common'], ['login', 'yes', 'free'])); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/InvalidMarkupMessageTest.php b/components/ILIAS/Language/tests/ComponentTranslation/InvalidMarkupMessageTest.php new file mode 100644 index 000000000000..f0915fa46019 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/InvalidMarkupMessageTest.php @@ -0,0 +1,79 @@ +createStub(Language::class); + $lng->method('txt')->willReturn($text); + + return $lng; + } + + private function refinery(): Refinery + { + return new Refinery($this->createStub(DataFactory::class), $this->createStub(Language::class)); + } + + public function testListsTheEntriesWithTheirMarkupEscapedAndSeparatedBySemicolons(): void + { + $message = InvalidMarkupMessage::of($this->lng('Not allowed: %s'), $this->refinery(), [ + 'tos#:#a' => ['tag Hallo']); + + $this->sync(['greeting' => 'Hallo']); + + $this->assertFileDoesNotExist($this->overlayBase() . '.po'); + } + + /** + * Extracted comments ("#. ...", context for translators) are part of the shipped file and are + * carried into the overlay on creation/refresh. + */ + public function testTheOverlayTakesTheExtractedCommentsOfTheShippedEntry(): void + { + $catalog = MigratedPoFixture::catalog(self::MODULE, ['greeting' => 'Hallo']); + $catalog->find(self::MODULE, 'greeting')->addExtractedComment('shown on the login page'); + MigratedPoFixture::writePo($this->shippedPo(), $catalog); + + $this->sync(['greeting' => 'Servus']); + + $this->assertSame(['shown on the login page'], $this->overlayPo()->find(null, 'greeting')->getExtractedComments()); + } + + public function testTheOverlayTakesTheHeadersOfTheShippedPo(): void + { + $catalog = MigratedPoFixture::catalog(self::MODULE, ['greeting' => 'Hallo']); + $catalog->setHeader('Language', 'de'); + $catalog->setHeader('Plural-Forms', 'nplurals=2; plural=(n != 1);'); + MigratedPoFixture::writePo($this->shippedPo(), $catalog); + + // a local change - with only shipped values there is no overlay (delta) + $this->sync(['greeting' => 'Servus']); + + $this->assertSame('de', $this->overlayPo()->getHeader('Language')); + $this->assertSame('nplurals=2; plural=(n != 1);', $this->overlayPo()->getHeader('Plural-Forms')); + } + + /** + * refresh = false (an ordinary admin edit): the baseline "original" must never move - even when + * the shipped file changed in the meantime. + */ + public function testAnAdminEditNeverMovesTheOriginal(): void + { + $this->seedShipped(['greeting' => 'Hallo, neu']); + $this->seedOverlay(['greeting' => ['value' => 'Hallo', 'original' => 'Hallo']]); + + $this->sync(['greeting' => 'Servus']); + + $greeting = $this->overlayPo()->find(null, 'greeting'); + $this->assertSame('Servus', $greeting->getTranslation()); + $this->assertSame('Hallo', LocalChangeComments::getOriginal($greeting)); + $this->assertNotNull(LocalChangeComments::getLocalChange($greeting)); + } + + public function testAnAdminEditRemovesFuzzyOnlyFromTheValuesItActuallyChanges(): void + { + $this->seedShipped([ + 'kept' => ['value' => 'Hello', 'fuzzy' => true], + 'edited' => ['value' => 'Bye', 'fuzzy' => true], + ]); + $this->seedOverlay([ + 'kept' => ['value' => 'Hello', 'original' => 'Hello', 'fuzzy' => true], + 'edited' => ['value' => 'Bye', 'original' => 'Bye', 'fuzzy' => true], + ]); + + $this->sync(['kept' => 'Hello', 'edited' => 'Tschüss']); + + // the kept shipped value (fuzzy in the shipped .po) leaves the overlay, the edited one is no longer fuzzy + $overlay = $this->overlayPo(); + $this->assertNull($overlay->find(null, 'kept')); + $this->assertFalse($overlay->find(null, 'edited')->hasFlag('fuzzy')); + } + + public function testWritingTheOriginalValueBackClearsTheLocalChange(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->seedOverlay([ + 'greeting' => ['value' => 'Servus', 'original' => 'Hallo', 'local_change' => '2020-01-01T00:00:00Z'], + ]); + + $this->sync(['greeting' => 'Hallo']); + + // the shipped value again is no local change: the entry, and with it the now empty overlay, is removed + $this->assertFileDoesNotExist($this->overlayBase() . '.po'); + $this->assertFileDoesNotExist(MigratedPoFixture::overlayMo($this->overlayBase())); + $this->assertFalse(MigratedLanguageFileSync::loadModuleTranslations( + $this->manager, + 'de', + self::MODULE, + $this->client_data_dir + )['greeting']['local_change']); + } + + /** + * A full-replace write re-sends every value; an entry whose value did not change must keep its + * existing local_change timestamp (seeded with a fixed, old value - no sleep()/clock needed). + */ + public function testTheLocalChangeTimestampOfAnUntouchedEntrySurvivesAnUnrelatedWrite(): void + { + $this->seedShipped(['greeting' => 'Hallo', 'farewell' => 'Tschüss']); + $this->seedOverlay([ + 'greeting' => ['value' => 'Servus', 'original' => 'Hallo', 'local_change' => '2020-01-01T00:00:00Z'], + 'farewell' => ['value' => 'Tschüss', 'original' => 'Tschüss'], + ]); + + $this->sync(['greeting' => 'Servus', 'farewell' => 'Pfiat di']); + + $overlay = $this->overlayPo(); + $this->assertSame('2020-01-01T00:00:00Z', LocalChangeComments::getLocalChange($overlay->find(null, 'greeting'))); + $farewell_change = LocalChangeComments::getLocalChange($overlay->find(null, 'farewell')); + $this->assertNotNull($farewell_change); + $this->assertNotSame('2020-01-01T00:00:00Z', $farewell_change); + } + + /** + * An overlay of an earlier version carried the module as msgctxt on every entry (see seedOverlay()); the next write + * must migrate it to the msgctxt-less shape (TranslationEntry::withContext(null)) while preserving translation, + * comments, flags, "local_change" and "original". + */ + #[DataProvider('refreshFlags')] + public function testALegacyEntryWithTheModuleAsMsgctxtIsMigratedToNoContextPreservingItsBookkeeping(bool $refresh): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $legacy_overlay = MigratedPoFixture::catalog(self::MODULE, [ + 'greeting' => ['value' => 'Servus', 'original' => 'Hallo', 'local_change' => '2020-01-01T00:00:00Z'], + ]); + $legacy_overlay->find(self::MODULE, 'greeting')->addExtractedComment('shown on the login page'); + MigratedPoFixture::writePair($this->overlayBase(), $legacy_overlay); + $this->assertNotNull($this->overlayPo()->find(self::MODULE, 'greeting'), 'precondition: seeded with the module as msgctxt'); + + // a genuine local change is kept alive by re-sending the exact same value + $this->sync(['greeting' => 'Servus'], $refresh); + + $this->assertNull($this->overlayPo()->find(self::MODULE, 'greeting'), 'no longer stored under the module context'); + $migrated = $this->overlayPo()->find(null, 'greeting'); + $this->assertNotNull($migrated); + $this->assertSame('Servus', $migrated->getTranslation()); + $this->assertSame('Hallo', LocalChangeComments::getOriginal($migrated)); + $this->assertSame('2020-01-01T00:00:00Z', LocalChangeComments::getLocalChange($migrated)); + if (!$refresh) { + // refresh=true re-baselines extracted comments from the shipped entry (which has none + // here) - only an ordinary admin edit (refresh=false) keeps the overlay's own comment + $this->assertSame(['shown on the login page'], $migrated->getExtractedComments()); + } + } + + /** + * An overlay written by the pre-delta design carried EVERY entry of the module. The next reconciling write (Setup + * update) must shrink it to the true delta in one sync(): entries equal to the shipped value without local_change + * are dropped, a genuine local change survives - no dedicated migration step. + */ + public function testALegacyFullOverlayShrinksToTheDeltaOnTheNextReconcilingWrite(): void + { + $this->seedShipped(['unchanged_one' => 'A', 'unchanged_two' => 'B', 'changed' => 'C']); + // A full overlay as an old version would have written it: every entry present, most of them + // carrying exactly the shipped value with no local_change at all. + $this->seedOverlay([ + 'unchanged_one' => ['value' => 'A', 'original' => 'A'], + 'unchanged_two' => ['value' => 'B', 'original' => 'B'], + 'changed' => ['value' => 'C, lokal', 'original' => 'C', 'local_change' => '2020-01-01T00:00:00Z'], + ]); + + $this->sync(['unchanged_one' => 'A', 'unchanged_two' => 'B', 'changed' => 'C, lokal'], true); + + $this->assertSame(['changed'], $this->overlayIdentifiers()); + $this->assertSame( + '2020-01-01T00:00:00Z', + LocalChangeComments::getLocalChange($this->overlayPo()->find(null, 'changed')) + ); + } + + public function testRefreshMovesTheOriginalToTheNewShippedValueAndClearsTheLocalChangeOfAnUnmodifiedEntry(): void + { + $this->seedShipped(['greeting' => 'Hallo, überarbeitet']); + $this->seedOverlay(['greeting' => ['value' => 'Hallo', 'original' => 'Hallo']]); + + $this->sync(['greeting' => 'Hallo, überarbeitet'], true); + + // the new shipped value is served from the shipped .po, the outdated overlay entry is removed + $this->assertFileDoesNotExist($this->overlayBase() . '.po'); + $this->assertSame( + ['value' => 'Hallo, überarbeitet', 'local_change' => false, 'local_change_date' => null, 'original' => 'Hallo, überarbeitet'], + MigratedLanguageFileSync::loadModuleTranslations($this->manager, 'de', self::MODULE, $this->client_data_dir)['greeting'] + ); + } + + public function testRefreshMovesTheOriginalButKeepsALocalCustomizationFlagged(): void + { + $this->seedShipped(['greeting' => 'Hallo, überarbeitet']); + $this->seedOverlay([ + 'greeting' => ['value' => 'Servus', 'original' => 'Hallo', 'local_change' => '2020-01-01T00:00:00Z'], + ]); + + $this->sync(['greeting' => 'Servus'], true); + + $greeting = $this->overlayPo()->find(null, 'greeting'); + $this->assertSame('Servus', $greeting->getTranslation()); + $this->assertSame('Hallo, überarbeitet', LocalChangeComments::getOriginal($greeting)); + $this->assertSame('2020-01-01T00:00:00Z', LocalChangeComments::getLocalChange($greeting)); + } + + /** + * An entry the shipped `.po` no longer contains (kept by the caller as a real local change, see + * LanguageInstallationManager::resolveMigratedModule()) keeps its last "original" and its + * local_change date - so a later update can still tell it from an unchanged entry. + */ + public function testRefreshKeepsTheOriginalOfAnEntryTheShippedPoNoLongerContains(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->seedOverlay([ + 'greeting' => ['value' => 'Hallo', 'original' => 'Hallo'], + 'dropped' => ['value' => 'Neu', 'original' => 'Alt', 'local_change' => '2020-01-01T00:00:00Z'], + ]); + + $this->sync(['greeting' => 'Hallo', 'dropped' => 'Neu'], true); + + $dropped = $this->overlayPo()->find(null, 'dropped'); + $this->assertSame('Alt', LocalChangeComments::getOriginal($dropped)); + $this->assertSame('2020-01-01T00:00:00Z', LocalChangeComments::getLocalChange($dropped)); + } + + /** + * On refresh fuzzy is recomputed from the shipped file: set exactly when the value is the shipped + * value and the shipped entry is fuzzy. + * + * @param array $shipped + * @param array $overlay + */ + #[DataProvider('refreshFuzzyCases')] + public function testRefreshRecomputesFuzzyFromTheShippedEntry( + array $shipped, + array $overlay, + string $value, + ?bool $expected_fuzzy + ): void { + $this->seedShipped(['greeting' => $shipped]); + $this->seedOverlay(['greeting' => $overlay]); + + $this->sync(['greeting' => $value], true); + + // `null`: the value is the shipped one, so the entry (and its fuzzy flag) lives in the shipped .po only and the + // overlay is removed + if ($expected_fuzzy === null) { + $this->assertFileDoesNotExist($this->overlayBase() . '.po'); + return; + } + $this->assertSame($expected_fuzzy, $this->overlayPo()->find(null, 'greeting')->hasFlag('fuzzy')); + } + + /** + * @return array> + */ + public static function refreshFuzzyCases(): array + { + return [ + 'shipped fuzzy, value is shipped' => [ + ['value' => 'Hello', 'fuzzy' => true], ['value' => 'Hello', 'original' => 'Hello'], 'Hello', null, + ], + 'shipped fuzzy, value differs' => [ + ['value' => 'Hello', 'fuzzy' => true], ['value' => 'Hallo', 'original' => 'Hello', 'fuzzy' => true], 'Hallo', false, + ], + 'shipped reviewed now, overlay still fuzzy' => [ + ['value' => 'Hallo'], ['value' => 'Hallo', 'original' => 'Hello', 'fuzzy' => true], 'Hallo', null, + ], + ]; + } + + public function testReplaceSemanticsRemoveEveryEntryThatIsNotPassed(): void + { + $this->seedShipped(['greeting' => 'Hallo', 'farewell' => 'Tschüss']); + // local changes, since shipped values are never in the overlay + $this->seedOverlay([ + 'greeting' => ['value' => 'Servus', 'original' => 'Hallo', 'local_change' => '2020-01-01T00:00:00Z'], + 'farewell' => ['value' => 'Pfiat di', 'original' => 'Tschüss', 'local_change' => '2020-01-01T00:00:00Z'], + ]); + + $this->sync(['greeting' => 'Servus']); + + $this->assertSame(['greeting'], $this->overlayIdentifiers()); + $this->assertSame(['greeting' => 'Servus'], MigratedPoFixture::readMo(MigratedPoFixture::overlayMo($this->overlayBase()))); + } + + /** An empty delta removes the overlay files - the shipped file and the lock file are kept. */ + public function testSyncingNoEntriesRemovesTheOverlayButKeepsTheShippedFile(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->seedOverlay(['greeting' => ['value' => 'Servus', 'original' => 'Hallo', 'local_change' => '2020-01-01T00:00:00Z']]); + + $this->sync([]); + + $this->assertFileDoesNotExist($this->overlayBase() . '.po'); + $this->assertFileDoesNotExist(MigratedPoFixture::overlayMo($this->overlayBase())); + $this->assertFileExists(MigratedPoFixture::overlayLock($this->overlayBase()), 'the lock file is only removed on uninstall'); + $this->assertNotNull(MigratedPoFixture::readPo($this->shippedPo())->find(self::MODULE, 'greeting')); + } + + /** + * Entries of a different context (another module) are never taken over into this module's + * overlay: the overlay holds exactly $entries. + */ + public function testEntriesOfAnotherContextInTheOldOverlayAreNotCarriedOver(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->seedOverlay([ + 'greeting' => ['value' => 'Hallo', 'original' => 'Hallo'], + 'foreign' => ['value' => 'Fremd', 'context' => 'other_module'], + ]); + + // a local change keeps an overlay to look into (delta) + $this->sync(['greeting' => 'Servus']); + + $this->assertNull($this->overlayPo()->find('other_module', 'foreign')); + } + + /** + * Sorted byte-wise by identifier, independent of the order of $entries - keeps the file + * diff-stable. SORT_STRING: upper case before lower case, "10" before "9". + */ + public function testEntriesAreWrittenSortedByIdentifier(): void + { + $this->seedShipped(['b' => 'B']); + + $this->sync(['b' => 'B', 'a' => 'A', 'C' => 'C', '9' => 'neun', '10' => 'zehn']); + + // "b" carries the shipped value and is not written + $this->assertSame(['10', '9', 'C', 'a'], $this->overlayIdentifiers()); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncEditableTest.php b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncEditableTest.php new file mode 100644 index 000000000000..cd74b4e679f0 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncEditableTest.php @@ -0,0 +1,121 @@ +|null identifier => value + */ + private function editable(?string $client_data_dir = 'default', string $module = self::MODULE, string $lang_key = 'de', bool $for_writing = false): ?array + { + $content = MigratedLanguageFileSync::loadEditableModuleTranslations( + $this->manager, + $lang_key, + $module, + $client_data_dir === 'default' ? $this->client_data_dir : $client_data_dir, + $this->ilias_root, + $for_writing + ); + + return $content === null ? null : array_map(static fn(array $entry): string => $entry['value'], $content); + } + + public function testTheShippedPoAndItsReadableOverlayAreMerged(): void + { + $this->seedShipped(['greeting' => 'Hallo', 'farewell' => 'Tschüss']); + $this->seedOverlay(['greeting' => 'Moin']); + + $this->assertSame(['greeting' => 'Moin', 'farewell' => 'Tschüss'], $this->editable()); + } + + public function testAnUnreadableOverlayYieldsTheShippedPoAloneAndIsReported(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->seedOverlay(['greeting' => 'Moin']); + file_put_contents($this->overlayBase() . '.po', "msgid \"kaputt\n"); + + $this->expectOutputRegex('/The local changes of module "stest" for "de" cannot be read, the shipped values are used/'); + $this->assertSame(['greeting' => 'Hallo'], $this->editable()); + } + + /** For writing, the shipped values alone would drop the other local changes of the overlay: it throws instead. */ + public function testAnUnreadableOverlayThrowsForWritingAndIsNotReportedAsUsable(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->seedOverlay(['greeting' => 'Moin']); + file_put_contents($this->overlayBase() . '.po', "msgid \"kaputt\n"); + + $this->expectException(\RuntimeException::class); + $this->editable('default', self::MODULE, 'de', true); + } + + public function testForWritingAReadableOverlayIsMergedAsForDisplay(): void + { + $this->seedShipped(['greeting' => 'Hallo', 'farewell' => 'Tschüss']); + $this->seedOverlay(['greeting' => 'Moin']); + + $this->assertSame(['greeting' => 'Moin', 'farewell' => 'Tschüss'], $this->editable('default', self::MODULE, 'de', true)); + } + + public function testWithoutClientDataDirectoryTheShippedPoAloneIsReturned(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + + $this->assertSame(['greeting' => 'Hallo'], $this->editable(null)); + $this->expectOutputString(''); + } + + public function testAnUnreadableShippedPoThrows(): void + { + file_put_contents($this->shippedPo(), "msgid \"kaputt\n"); + + $this->expectOutputRegex('/cannot be read/'); + $this->expectException(\RuntimeException::class); + $this->editable(); + } + + /** + * @return array + */ + public static function nothingToEdit(): array + { + return [ + 'module of no directory' => ['unknown', 'de'], + 'no shipped po for the language' => ['stest', 'fr'], + 'invalid language key' => ['stest', '../de'], + ]; + } + + #[DataProvider('nothingToEdit')] + public function testWithoutDirectoryShippedPoOrValidKeyThereIsNothingToEdit(string $module, string $lang_key): void + { + $this->seedShipped(['greeting' => 'Hallo']); + + $this->assertNull($this->editable('default', $module, $lang_key)); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncEntryRulesTest.php b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncEntryRulesTest.php new file mode 100644 index 000000000000..590abea356bf --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncEntryRulesTest.php @@ -0,0 +1,328 @@ +assertSame($expected, MigratedLanguageFileSync::belongsInDelta($shipped_value, $value)); + } + + /** + * @return array + */ + public static function belongsInDeltaCases(): array + { + return [ + 'differs from shipped' => ['Hallo', 'Servus', true], + 'same as shipped' => ['Hallo', 'Hallo', false], + 'key not shipped at all - any non-empty value belongs' => [null, 'Eigener Wert', true], + 'empty value resets to shipped, even without a shipped key' => [null, '', false], + 'empty value resets to shipped, even when shipped differs' => ['Hallo', '', false], + 'shipped value itself is empty, value matches' => ['', '', false], + 'shipped value itself is empty, value differs' => ['', 'x', true], + 'the literal string "0" belongs when shipped differs' => ['1', '0', true], + 'the literal string "0" is not "empty" and does not reset' => [null, '0', true], + ]; + } + + /** + * Shared by belongsInDelta() and ilObjLanguageExt::_saveValues(): an empty value resets to the shipped one, but + * only for a key the shipped `.po` carries. + */ + #[DataProvider('resolveLocalValueCases')] + public function testResolveLocalValue(?string $shipped_value, string $value, string $expected): void + { + $this->assertSame($expected, MigratedLanguageFileSync::resolveLocalValue($shipped_value, $value)); + } + + /** + * @return array + */ + public static function resolveLocalValueCases(): array + { + return [ + 'empty value of a shipped key resolves to the shipped value' => ['Hallo', '', 'Hallo'], + 'empty value of a key that is not shipped stays empty' => [null, '', ''], + 'a non-empty value is returned unchanged, shipped key' => ['Hallo', 'Servus', 'Servus'], + 'a non-empty value is returned unchanged, not a shipped key' => [null, 'Eigener Wert', 'Eigener Wert'], + 'the shipped value itself is empty - stays empty (nothing to reset to in practice)' => ['', '', ''], + ]; + } + + /** + * databaseValues() sanitises only an unmodified value equal to the shipped one (for the database mirror); a locally + * changed value stays untouched, its markup is checked by the caller. + */ + public function testDatabaseValuesSanitizesOnlyAnUnmodifiedValueEqualToTheShippedOne(): void + { + $bad = 'Hallo'; + + $result = MigratedLanguageFileSync::databaseValues( + ['unmodified' => $bad, 'changed' => $bad, 'not_shipped_at_all' => $bad], + ['unmodified' => $bad, 'changed' => 'Anderer Shipped-Wert'] + ); + + $this->assertStringNotContainsString('assertStringContainsString('Hallo', $result['unmodified']); + // "changed" differs from its shipped value - databaseValues() does not touch it at all + $this->assertSame($bad, $result['changed']); + // no shipped counterpart at all - left untouched, too + $this->assertSame($bad, $result['not_shipped_at_all']); + } + + public function testDatabaseValuesLeavesAnAlreadyAllowedUnmodifiedValueByteIdentical(): void + { + $result = MigratedLanguageFileSync::databaseValues(['greeting' => 'Hallo'], ['greeting' => 'Hallo']); + + $this->assertSame('Hallo', $result['greeting']); + } + + public function testDatabaseValuesOfSanitizesAgainstTheRealShippedPo(): void + { + $bad = 'Hallo'; + $this->seedShipped(['greeting' => $bad]); + + $result = MigratedLanguageFileSync::databaseValuesOf( + $this->manager, + $this->ilias_root, + 'de', + self::MODULE, + ['greeting' => $bad] + ); + + $this->assertStringNotContainsString('assertStringContainsString('Hallo', $result['greeting']); + } + + /** A module not migrated for the language (no shipped `.po`): $entries come back unchanged. */ + public function testDatabaseValuesOfLeavesEntriesUnchangedWhenTheModuleIsNotMigratedForTheLanguage(): void + { + $bad = 'Hallo'; + + $result = MigratedLanguageFileSync::databaseValuesOf( + $this->manager, + $this->ilias_root, + 'de', + 'not_a_contributed_module', + ['greeting' => $bad] + ); + + $this->assertSame($bad, $result['greeting']); + } + + /** + * An unreadable shipped `.po` must not abort the database write: $entries come back unchanged (the overlay write + * reports the file). + */ + public function testDatabaseValuesOfLeavesEntriesUnchangedWhenTheShippedPoCannotBeRead(): void + { + file_put_contents($this->shippedPo(), "msgid \"kaputt\n"); + $bad = 'Hallo'; + + $result = MigratedLanguageFileSync::databaseValuesOf( + $this->manager, + $this->ilias_root, + 'de', + self::MODULE, + ['greeting' => $bad] + ); + + $this->assertSame($bad, $result['greeting']); + } + + public function testHasOverlayIsTrueWhenEitherOverlayFileExists(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->seedOverlay(['greeting' => 'Servus']); + + $this->assertTrue(MigratedLanguageFileSync::hasOverlay($this->manager, 'de', self::MODULE, $this->client_data_dir)); + } + + public function testHasOverlayIsFalseWithoutAnyOverlayFile(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + + $this->assertFalse(MigratedLanguageFileSync::hasOverlay($this->manager, 'de', self::MODULE, $this->client_data_dir)); + } + + public function testHasOverlayIsFalseForAnUnknownModuleOrWithoutClientDataDir(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->seedOverlay(['greeting' => 'Servus']); + + $this->assertFalse(MigratedLanguageFileSync::hasOverlay($this->manager, 'de', 'other_module', $this->client_data_dir)); + $this->assertFalse(MigratedLanguageFileSync::hasOverlay($this->manager, 'de', self::MODULE, null)); + } + + /** + * hasOverlay() reports a non-regular file (e.g. a directory) as present, unlike is_file(); reading it is covered by + * assertReadableOverlay(). + */ + public function testHasOverlayIsTrueEvenForAnIrregularFileAtTheOverlayPosition(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + mkdir($this->overlayBase() . '.po', 0775, true); + + $this->assertTrue(MigratedLanguageFileSync::hasOverlay($this->manager, 'de', self::MODULE, $this->client_data_dir)); + } + + /** An entry without msgctxt (`null`) belongs to whichever module reads the catalog. */ + public function testModuleEntriesIncludesAnEntryWithoutAnyContext(): void + { + $catalog = new TranslationCatalog(); + $catalog->add(MigratedPoFixture::entry(null, 'greeting', 'Hallo')); + + $entries = MigratedLanguageFileSync::moduleEntries($catalog, 'itest'); + + $this->assertArrayHasKey('greeting', $entries); + $this->assertSame('Hallo', $entries['greeting']->getTranslation()); + } + + /** An entry with an empty msgctxt is a foreign context, not "no context". */ + #[DataProvider('foreignContexts')] + public function testModuleEntriesIgnoresAnEntryOfAForeignContext(string $context): void + { + $catalog = new TranslationCatalog(); + $catalog->add(MigratedPoFixture::entry($context, 'greeting', 'Fremd')); + + $entries = MigratedLanguageFileSync::moduleEntries($catalog, 'itest'); + + $this->assertArrayNotHasKey('greeting', $entries); + } + + /** + * @return array + */ + public static function foreignContexts(): array + { + return ['empty-string msgctxt' => [''], 'context of another module' => ['other_module']]; + } + + /** A key with and without context: the module-context entry wins regardless of catalog order. */ + #[DataProvider('contextOrders')] + public function testModuleEntriesPrefersTheModuleContextEntryOverTheContextlessOne(bool $module_first): void + { + $catalog = new TranslationCatalog(); + $module_entry = MigratedPoFixture::entry('itest', 'greeting', 'Mit Modulkontext'); + $contextless = MigratedPoFixture::entry(null, 'greeting', 'Ohne Kontext'); + foreach ($module_first ? [$module_entry, $contextless] : [$contextless, $module_entry] as $entry) { + $catalog->add($entry); + } + + $entries = MigratedLanguageFileSync::moduleEntries($catalog, 'itest'); + + $this->assertSame('Mit Modulkontext', $entries['greeting']->getTranslation()); + } + + /** + * @return array + */ + public static function contextOrders(): array + { + return ['module context first' => [true], 'contextless first' => [false]]; + } + + + public function testFindModuleEntryFallsBackToTheContextlessEntry(): void + { + $catalog = new TranslationCatalog(); + $catalog->add(MigratedPoFixture::entry(null, 'greeting', 'Hallo')); + + $entry = MigratedLanguageFileSync::findModuleEntry($catalog, 'itest', 'greeting'); + + $this->assertNotNull($entry); + $this->assertSame('Hallo', $entry->getTranslation()); + } + + public function testFindModuleEntryPrefersTheModuleContextEntry(): void + { + $catalog = new TranslationCatalog(); + $catalog->add(MigratedPoFixture::entry(null, 'greeting', 'Ohne Kontext')); + $catalog->add(MigratedPoFixture::entry('itest', 'greeting', 'Mit Modulkontext')); + + $entry = MigratedLanguageFileSync::findModuleEntry($catalog, 'itest', 'greeting'); + + $this->assertSame('Mit Modulkontext', $entry?->getTranslation()); + } + + public function testFindModuleEntryReturnsNullForAForeignContext(): void + { + $catalog = new TranslationCatalog(); + $catalog->add(MigratedPoFixture::entry('other_module', 'greeting', 'Fremd')); + + $this->assertNull(MigratedLanguageFileSync::findModuleEntry($catalog, 'itest', 'greeting')); + } + + /** + * BUG (documented, not fixed): unlike moduleEntries(), findModuleEntry()'s fallback `$catalog->find(null, + * $identifier)` also matches an entry with msgctxt "" - gettext/gettext builds the key as + * "{$context}\004{$original}", so null and '' collide. + */ + public function testFindModuleEntryIgnoresAnEmptyStringContextInsteadOfTreatingItAsContextless(): void + { + $catalog = new TranslationCatalog(); + $catalog->add(MigratedPoFixture::entry('', 'farewell', 'Leer')); + + $this->assertNull(MigratedLanguageFileSync::findModuleEntry($catalog, 'itest', 'farewell')); + } + + /** End-to-end: a contextless shipped entry is served for the module via loadShippedModuleEntries(). */ + public function testLoadShippedModuleEntriesIncludesAContextlessEntry(): void + { + $catalog = new TranslationCatalog(); + $catalog->add(MigratedPoFixture::entry(null, 'greeting', 'Hallo')); + MigratedPoFixture::writePo($this->shippedPo(), $catalog); + + $entries = MigratedLanguageFileSync::loadShippedModuleEntries($this->shippedPo(), self::MODULE); + + $this->assertSame('Hallo', $entries['greeting']['value']); + } + + /** + * End-to-end: sync() reads a contextless shipped entry as the module's shipped value, so resyncing it creates no + * overlay. + */ + public function testSyncTreatsAContextlessShippedEntryAsThisModulesShippedValue(): void + { + $catalog = new TranslationCatalog(); + $catalog->add(MigratedPoFixture::entry(null, 'greeting', 'Hallo')); + MigratedPoFixture::writePo($this->shippedPo(), $catalog); + + $this->sync(['greeting' => 'Hallo']); + + $this->assertFileDoesNotExist($this->overlayBase() . '.po', 'unchanged from the contextless shipped value - no delta at all'); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncFindModulesWithOverlayTest.php b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncFindModulesWithOverlayTest.php new file mode 100644 index 000000000000..c4018e2401af --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncFindModulesWithOverlayTest.php @@ -0,0 +1,126 @@ +//` counts, nothing else below `lang`. */ +class MigratedLanguageFileSyncFindModulesWithOverlayTest extends MigratedLanguageFileSyncTestCase +{ + private function touch(string $relative): void + { + $file = $this->client_data_dir . '/lang/' . $relative; + if (!is_dir(dirname($file))) { + mkdir(dirname($file), 0775, true); + } + file_put_contents($file, 'x'); + } + + /** + * @return array file below `lang/zmod/de/`, whether it makes an overlay + */ + public static function overlayMarkers(): array + { + return [ + 'current' => ['current', true], + 'po' => ['zmod_de.po', true], + 'only the lock' => ['zmod_de.lock', false], + 'only the mo' => ['zmod_de.mo', false], + ]; + } + + #[DataProvider('overlayMarkers')] + public function testOnlyCurrentOrAPoMakesAnOverlay(string $file, bool $is_overlay): void + { + $this->touch('zmod/de/' . $file); + + $this->assertSame($is_overlay ? ['zmod'] : [], MigratedLanguageFileSync::findModulesWithOverlay($this->client_data_dir, 'de')); + } + + public function testAModuleIsFoundPerLanguageAndTheResultIsSorted(): void + { + $this->touch('zmod/de/current'); + $this->touch('amod/de/amod_de.po'); + $this->touch('fmod/fr/current'); + + $this->assertSame(['amod', 'zmod'], MigratedLanguageFileSync::findModulesWithOverlay($this->client_data_dir, 'de')); + $this->assertSame(['fmod'], MigratedLanguageFileSync::findModulesWithOverlay($this->client_data_dir, 'fr')); + } + + /** The lock directory and the record sit next to the module directories and are no modules. */ + public function testLocksAndTheTakenOverRecordAreNoModules(): void + { + MigratedLanguageFileSync::markLocalChangesTakenOver($this->client_data_dir, 'de', ['zmod']); + $this->touch('.locks/de/current'); + $this->touch('.locks/de/x.po'); + + $this->assertFileExists(MigratedLanguageFilePaths::takenOverFile($this->client_data_dir, 'de')); + $this->assertSame([], MigratedLanguageFileSync::findModulesWithOverlay($this->client_data_dir, 'de')); + } + + public function testSymbolicLinksAreNotFollowed(): void + { + $outside = sys_get_temp_dir() . '/ilias_find_overlay_outside_' . bin2hex(random_bytes(4)); + mkdir($outside . '/de', 0775, true); + file_put_contents($outside . '/de/current', 'x'); + try { + mkdir($this->client_data_dir . '/lang/linkedmod', 0775, true); + symlink($outside . '/de', $this->client_data_dir . '/lang/linkedmod/de'); + symlink($outside, $this->client_data_dir . '/lang/linkedmodule'); + mkdir($this->client_data_dir . '/lang/linkedcurrent/de', 0775, true); + symlink($outside . '/missing', $this->client_data_dir . '/lang/linkedcurrent/de/current'); + + $this->assertSame(['linkedcurrent'], MigratedLanguageFileSync::findModulesWithOverlay($this->client_data_dir, 'de')); + } finally { + MigratedPoFixture::removeDirectory($outside); + } + } + + public function testNoClientDataDirectoryAnInvalidLanguageKeyOrNoLangDirectoryFindNothing(): void + { + $this->touch('zmod/de/current'); + + $this->assertSame([], MigratedLanguageFileSync::findModulesWithOverlay(null, 'de')); + $this->assertSame([], MigratedLanguageFileSync::findModulesWithOverlay($this->client_data_dir, '../de')); + $this->assertSame([], MigratedLanguageFileSync::findModulesWithOverlay($this->client_data_dir . '/missing', 'de')); + } + + /** An unreadable module directory counts as overlay, an unreadable overlay root finds nothing. */ + public function testUnreadableDirectoriesCountAsOverlayOrFindNothing(): void + { + $this->touch('amod/de/current'); + mkdir($this->client_data_dir . '/lang/zmod/de', 0775, true); + chmod($this->client_data_dir . '/lang/zmod/de', 0000); + try { + if (is_readable($this->client_data_dir . '/lang/zmod/de')) { + $this->markTestSkipped('permissions are not enforced (root)'); + } + $this->assertSame(['amod', 'zmod'], MigratedLanguageFileSync::findModulesWithOverlay($this->client_data_dir, 'de')); + + chmod($this->client_data_dir . '/lang', 0000); + $this->assertSame([], MigratedLanguageFileSync::findModulesWithOverlay($this->client_data_dir, 'de')); + } finally { + chmod($this->client_data_dir . '/lang', 0775); + chmod($this->client_data_dir . '/lang/zmod/de', 0775); + } + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncGuardsTest.php b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncGuardsTest.php new file mode 100644 index 000000000000..b47d763ef83f --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncGuardsTest.php @@ -0,0 +1,356 @@ +seedShipped(['greeting' => 'Hallo']); + + MigratedLanguageFileSync::sync($this->manager, $this->ilias_root, 'de', 'other_module', ['x' => 'y'], $this->client_data_dir); + MigratedLanguageFileSync::sync($this->manager, $this->ilias_root, 'de', '', ['x' => 'y'], $this->client_data_dir, true); + + $this->assertDirectoryDoesNotExist($this->client_data_dir . '/lang'); + } + + public function testIsANoOpWhenNoShippedPoExistsForTheLanguage(): void + { + $this->seedShipped(['greeting' => 'Hello'], 'en'); + + $this->sync(['greeting' => 'Hallo'], true); + + $this->assertDirectoryDoesNotExist($this->client_data_dir . '/lang'); + } + + /** + * Un-migration: the shipped `.po` of a migrated module was removed after its overlay was compiled - sync() leaves + * the overlay files untouched. + */ + public function testAnExistingOverlayIsLeftUntouchedWhenTheShippedPoNoLongerExists(): void + { + $this->seedShipped(['greeting' => 'Hello']); + $this->seedOverlay(['greeting' => 'Hallo']); + $po_before = file_get_contents($this->overlayBase() . '.po'); + $mo_before = file_get_contents(MigratedPoFixture::overlayMo($this->overlayBase())); + unlink($this->shippedPo()); + + $this->sync(['greeting' => 'Hallo']); + + $this->assertSame($po_before, file_get_contents($this->overlayBase() . '.po')); + $this->assertSame($mo_before, file_get_contents(MigratedPoFixture::overlayMo($this->overlayBase()))); + } + + /** + * Readers must not serve a frozen overlay while its shipped `.po` is missing: + * getMigratedModules()/loadModuleTranslations() (and ilLanguage) fall back to lng_modules/lng_data as if no overlay + * existed. + */ + public function testReadersIgnoreAnExistingOverlayWhileTheShippedPoIsMissing(): void + { + $this->seedShipped(['greeting' => 'Hello']); + $this->seedOverlay(['greeting' => 'Hallo']); + unlink($this->shippedPo()); + + $this->assertNull(MigratedLanguageFileSync::loadModuleTranslations( + $this->manager, + 'de', + self::MODULE, + $this->client_data_dir, + $this->ilias_root + )); + $this->assertSame( + [], + MigratedLanguageFileSync::getMigratedModules($this->manager, 'de', $this->client_data_dir, $this->ilias_root) + ); + } + + /** + * sync() writes exactly the entries it is given; the shipped-vs-local decision once the `.po` returns is + * LanguageInstallationManager::resolveMigratedModule()'s, based on the "original" the overlay preserved during the + * outage. + */ + public function testARefreshAfterTheShippedPoComesBackStillMovesTheOriginalForwardCorrectly(): void + { + $this->seedShipped(['greeting' => 'Hello']); + // the "original" of this local change must survive the whole gap below untouched + $this->seedOverlay(['greeting' => ['value' => 'Hallo', 'original' => 'Hello', 'local_change' => '2020-01-01T00:00:00Z']]); + unlink($this->shippedPo()); + + // asserted here so a regression touching the overlay's "original"/local_change bookkeeping while the `.po` is + // missing fails here, not only once it is back ($refresh_original_from_shipped would then mask the loss) + $this->sync(['greeting' => 'Hallo']); + // untouched, so still as seeded: with the module as msgctxt + $preserved_during_the_gap = $this->overlayPo()->find(self::MODULE, 'greeting'); + $this->assertSame('Hello', LocalChangeComments::getOriginal($preserved_during_the_gap), 'original survives the gap'); + $this->assertSame('2020-01-01T00:00:00Z', LocalChangeComments::getLocalChange($preserved_during_the_gap)); + + // the module is migrated again - the shipped `.po` is back, with a changed value + $this->seedShipped(['greeting' => 'Servus']); + + // an unmodified local value ("Hallo" is still tracked against the preserved original + // "Hello") is refreshed to the new shipped value, exactly like an ordinary update + $this->sync(['greeting' => 'Servus'], true); + + // the value is now the shipped one: served from the shipped .po, the overlay is removed + $this->assertFileDoesNotExist($this->overlayBase() . '.po'); + $this->assertSame( + ['value' => 'Servus', 'local_change' => false, 'local_change_date' => null, 'original' => 'Servus'], + MigratedLanguageFileSync::loadModuleTranslations($this->manager, 'de', self::MODULE, $this->client_data_dir)['greeting'] + ); + } + + public function testIsANoOpWhenTheClientDataDirIsNull(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $shipped_before = file_get_contents($this->shippedPo()); + + $this->sync(['greeting' => 'Servus'], true, null); + + $this->assertSame($shipped_before, file_get_contents($this->shippedPo())); + $this->assertSame(['stest_de.po'], array_values(array_diff(scandir($this->fixture_directory), ['.', '..']))); + } + + /** + * A corrupt overlay `.po` is rebuilt like a missing one (original/local_change recomputed against the shipped file) + * instead of blocking every further write. + */ + #[DataProvider('refreshFlags')] + public function testACorruptOverlayPoIsRebuiltFromEntriesAndTheShippedPo(bool $refresh): void + { + $this->seedShipped(['greeting' => 'Hallo', 'farewell' => 'Tschüss']); + $this->seedOverlay(['greeting' => ['value' => 'Hallo', 'original' => 'Hallo']]); + file_put_contents($this->overlayBase() . '.po', "msgid \"broken\nmsgstr \"\"\n"); + + $this->sync(['greeting' => 'Hallo', 'farewell' => 'Servus'], $refresh); + + // "greeting" carries the shipped value and is not written + $overlay = $this->overlayPo(); + $this->assertSame(['farewell'], $this->overlayIdentifiers()); + $farewell = $overlay->find(null, 'farewell'); + $this->assertSame('Tschüss', LocalChangeComments::getOriginal($farewell)); + $this->assertNotNull(LocalChangeComments::getLocalChange($farewell)); + $this->assertSame(['farewell' => 'Servus'], MigratedPoFixture::readMo(MigratedPoFixture::overlayMo($this->overlayBase()))); + } + + /** + * StrictPoLoader rejects more than the old parser (e.g. a duplicate or a message without msgstr): such an overlay + * is rebuilt, too. + */ + #[DataProvider('overlaysOnlyAStrictParserRejects')] + public function testAnOverlayPoTheStrictParserRejectsIsRebuilt(string $content): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->seedOverlay(['greeting' => ['value' => 'Hallo', 'original' => 'Hallo']]); + file_put_contents($this->overlayBase() . '.po', $content); + + $this->sync(['greeting' => 'Servus']); + + $greeting = $this->overlayPo()->find(null, 'greeting'); + $this->assertSame('Servus', $greeting?->getTranslation()); + $this->assertSame('Hallo', LocalChangeComments::getOriginal($greeting)); + $this->assertNotNull(LocalChangeComments::getLocalChange($greeting)); + $this->assertSame(['greeting' => 'Servus'], MigratedPoFixture::readMo(MigratedPoFixture::overlayMo($this->overlayBase()))); + } + + /** + * @return array> + */ + public static function overlaysOnlyAStrictParserRejects(): array + { + $message = "msgctxt \"" . self::MODULE . "\"\nmsgid \"greeting\"\nmsgstr \"Hallo\"\n"; + + return [ + 'duplicate message' => [$message . "\n" . $message], + 'message without msgstr' => ["msgctxt \"" . self::MODULE . "\"\nmsgid \"greeting\"\n"], + 'truncated inside a string' => [substr($message, 0, -4)], + 'gap in the plural forms' => ["msgid \"a\"\nmsgid_plural \"as\"\nmsgstr[0] \"x\"\nmsgstr[2] \"z\"\n"], + 'binary data' => ["\x00\x01\x02\xde\x12\x04\x95"], + 'header value with a line break' => ["msgid \"\"\nmsgstr \"\"\n\"X-A: a\\rb\\n\"\n\n" . $message], + ]; + } + + public function testACorruptShippedPoThrows(): void + { + file_put_contents($this->shippedPo(), "msgid \"broken\n"); + + $this->expectException(RuntimeException::class); + $this->sync(['greeting' => 'Hallo']); + } + + /** + * A shipped `.po` whose header keeps a line break is broken (checkLanguage() refuses the language): sync() throws a + * RuntimeException before writing, not the InvalidArgumentException setHeader() would raise. + */ + public function testAShippedPoWithALineBreakInAHeaderValueThrowsARuntimeExceptionAndWritesNothing(): void + { + file_put_contents( + $this->shippedPo(), + "msgid \"\"\nmsgstr \"\"\n\"X-A: a\\rb\\n\"\n\nmsgctxt \"" . self::MODULE . "\"\nmsgid \"greeting\"\nmsgstr \"Hallo\"\n" + ); + + try { + $this->sync(['greeting' => 'Hallo']); + $this->fail('Expected a RuntimeException'); + } catch (RuntimeException $e) { + $this->assertStringContainsString('contains a line break', $e->getMessage()); + } + + $this->assertFileDoesNotExist($this->overlayBase() . '.po'); + $this->assertFileDoesNotExist(MigratedPoFixture::overlayMo($this->overlayBase())); + } + + /** + * Root-proof write failure: a regular file where the overlay's "lang" directory must be created - mkdir() fails for + * every user. + */ + public function testThrowsWhenTheOverlayDirectoryCannotBeCreated(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + file_put_contents($this->client_data_dir . '/lang', 'not a directory'); + + set_error_handler(static fn(): bool => true, E_WARNING); + try { + $this->expectException(RuntimeException::class); + $this->expectExceptionMessageMatches('/Could not create directory/'); + $this->sync(['greeting' => 'Servus']); + } finally { + restore_error_handler(); + } + } + + /** + * acquireLock() logs a warning when the lock file cannot be opened (e.g. missing permission), and the callback + * still runs unlocked. Only the lock file's permission is removed, so the overlay can still be written. + */ + public function testAcquireLockLogsAWarningWhenTheLockFileCannotBeOpenedButTheWriteStillSucceeds(): void + { + if (function_exists('posix_geteuid') && posix_geteuid() === 0) { + $this->markTestSkipped('An unopenable file cannot be forced for root.'); + } + $this->seedShipped(['greeting' => 'Hallo']); + // a first sync creates the lock file (and the overlay) so its own permission can be revoked + $this->sync(['greeting' => 'Servus']); + $lock_file = MigratedPoFixture::overlayLock($this->overlayBase()); + $this->assertFileExists($lock_file); + chmod($lock_file, 0000); + + $this->expectErrorLog(); + $this->sync(['greeting' => 'Nochmal geändert']); + + $this->assertStringContainsString('Could not open the lock file', $this->errorLog()); + $this->assertSame(['greeting' => 'Nochmal geändert'], MigratedPoFixture::readMo(MigratedPoFixture::overlayMo($this->overlayBase()))); + } + + /** + * @return string what error_log() wrote so far - PHPUnit redirects it to a per-test capture file + * (see expectErrorLog()). + */ + private function errorLog(): string + { + $file = (string) ini_get('error_log'); + return $file !== '' && is_file($file) ? (string) file_get_contents($file) : ''; + } + + /** + * Root-proof write failure of the file itself: a directory at the overlay `.po` path, so the final rename() fails. + * The temporary file must not be left behind. + */ + public function testThrowsWhenTheOverlayPoCannotBeReplacedAndLeavesNoTemporaryFile(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + mkdir($this->overlayBase() . '.po', 0775, true); + + set_error_handler(static fn(): bool => true, E_WARNING); + try { + $this->sync(['greeting' => 'Servus']); + $this->fail('Expected a RuntimeException'); + } catch (RuntimeException $e) { + // refused before any write is attempted: the .po path is no regular file + $this->assertStringContainsString('no regular file', $e->getMessage()); + } finally { + restore_error_handler(); + } + + $this->assertSame( + // the lock file (see MigratedLanguageFileSync::withOverlayLock()) is never removed + ['lock', 'stest_de.po'], + array_values(array_diff(scandir(dirname($this->overlayBase())), ['.', '..'])), + 'neither a temporary file nor a .mo may be left behind' + ); + } + + /** + * A symlinked client data directory (or parent), e.g. a mounted data volume: tempnam() resolves symlinks, which + * made AtomicFileWriter's "same directory" check reject every write (regression). + */ + public function testWritesTheOverlayWhenTheClientDataDirIsASymlink(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $link = $this->client_data_dir . '-link'; + symlink($this->client_data_dir, $link); + + try { + MigratedLanguageFileSync::sync($this->manager, $this->ilias_root, 'de', self::MODULE, ['greeting' => 'Servus'], $link); + } finally { + unlink($link); + } + + $this->assertSame(['greeting' => 'Servus'], MigratedPoFixture::readMo(MigratedPoFixture::overlayMo($this->overlayBase()))); + } + + /** + * Race: an installation decides on $entries before a concurrent admin edit adds a local change and completes its + * own sync() - all before the installation's sync() reaches its lock. + */ + public function testAnInstallationDoesNotDiscardAnOverlayCreatedConcurrentlyAfterItsDecision(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + + // The concurrent admin edit completes first and creates a genuine local change. + $this->sync(['greeting' => 'Servus']); + $this->assertFileExists($this->overlayBase() . '.po', 'precondition: the admin edit created an overlay'); + + // The installation's snapshot is from BEFORE that edit: no overlay, only the shipped value. + try { + MigratedLanguageFileSync::sync($this->manager, $this->ilias_root, 'de', self::MODULE, ['greeting' => 'Hallo'], $this->client_data_dir, true, false); + $this->fail('Expected a RuntimeException'); + } catch (RuntimeException $e) { + $this->assertStringContainsString('was created after', $e->getMessage()); + } + + $this->assertSame(['greeting' => 'Servus'], MigratedPoFixture::readMo(MigratedPoFixture::overlayMo($this->overlayBase()))); + $this->assertTrue( + MigratedLanguageFileSync::loadModuleTranslations($this->manager, 'de', self::MODULE, $this->client_data_dir)['greeting']['local_change'] + ); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncLockRemoveOverlayTest.php b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncLockRemoveOverlayTest.php new file mode 100644 index 000000000000..c7f151c63800 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncLockRemoveOverlayTest.php @@ -0,0 +1,171 @@ +client_data_dir, $this->directory, 'de'); + mkdir(dirname($overlay_base), 0775, true); + file_put_contents(MigratedPoFixture::overlayLock($overlay_base), ''); + + MigratedLanguageFileSync::removeOverlay($this->manager, 'de', self::MODULE, $this->client_data_dir); + + $this->assertFileDoesNotExist(MigratedPoFixture::overlayLock($overlay_base)); + } + + /** + * A nested removeOverlay() under an already held lock removes the overlay but neither deletes nor + * replaces the lock file (same inode throughout). + */ + public function testANestedRemoveOverlayInsideWithOverlayLockDoesNotDeleteTheLockFileOrRetry(): void + { + $overlay_base = MigratedPoFixture::overlayBase($this->client_data_dir, $this->directory, 'de'); + mkdir(dirname($overlay_base), 0775, true); + file_put_contents($overlay_base . '.po', 'PO'); + MigratedPoFixture::writeOverlayRevision($overlay_base, MigratedPoFixture::catalog(self::MODULE, ['greeting' => 'Servus'])); + file_put_contents(MigratedPoFixture::overlayLock($overlay_base), ''); + clearstatcache(true, MigratedPoFixture::overlayLock($overlay_base)); + $lock_inode_before = lstat(MigratedPoFixture::overlayLock($overlay_base))['ino']; + + // Run in a child process with a hard timeout: without the re-entrancy guard this scenario is + // the very same same-process self-deadlock testANestedWithOverlayLockForTheSameModuleReturns... + // above guards against - the nested removeOverlay() would block forever on the very lock its + // own enclosing withOverlayLock() call already holds. + $result = $this->runPhpWithTimeout($this->nestedRemoveOverlayChildCode(), 5.0); + + $this->assertTrue($result['finished'], 'a nested removeOverlay() must return instead of hanging: ' . $result['output']); + $this->assertSame(0, $result['exit_code'], $result['output']); + + clearstatcache(true, $overlay_base . '.po'); + clearstatcache(true, MigratedPoFixture::overlayMo($overlay_base)); + clearstatcache(true, MigratedPoFixture::overlayLock($overlay_base)); + $this->assertFileDoesNotExist($overlay_base . '.po', 'the nested removeOverlay() must still actually remove the overlay files'); + $this->assertFileDoesNotExist(MigratedPoFixture::overlayMo($overlay_base)); + $this->assertStringContainsString( + 'AFTER_NESTED:' . $lock_inode_before . "\n", + $result['output'], + 'a removeOverlay() nested inside an already-held lock must NOT delete or replace the lock file - the outer caller still relies on it' + ); + $this->assertFileExists(MigratedPoFixture::overlayLock($overlay_base)); + $this->assertSame( + $lock_inode_before, + lstat(MigratedPoFixture::overlayLock($overlay_base))['ino'], + 'the lock file must stay the exact same one throughout - no retry/replace cycle for the nested call' + ); + } + + private function nestedRemoveOverlayChildCode(): string + { + $template = <<<'PHP' + use ILIAS\Language\ComponentTranslation\CustomizingLanguageFileDirectory; + use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; + use ILIAS\Language\ComponentTranslation\LanguageFileDirectoryManager; + use ILIAS\Language\ComponentTranslation\MigratedLanguageFileSync; + + $root = __ROOT__; + require_once $root . '/vendor/composer/vendor/autoload.php'; + + $directory = new class implements LanguageFileDirectory { + public function getPrefix(): string + { + return 'stest'; + } + public function getPath(): string + { + return 'x/'; + } + public function getSuffix(): string + { + return ''; + } + public function isLocal(): bool + { + return false; + } + }; + $manager = new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), $directory); + $client_data_dir = __CLIENT_DATA_DIR__; + + MigratedLanguageFileSync::withOverlayLock( + $manager, + 'de', + 'stest', + $client_data_dir, + function () use ($manager, $client_data_dir): void { + MigratedLanguageFileSync::removeOverlay($manager, 'de', 'stest', $client_data_dir); + clearstatcache(); + $lock = @lstat($client_data_dir . '/lang/stest/de/lock'); + echo 'AFTER_NESTED:' . ($lock === false ? 'missing' : $lock['ino']) . "\n"; + } + ); + echo "done\n"; + PHP; + + return str_replace( + ['__ROOT__', '__CLIENT_DATA_DIR__'], + [var_export(ILIAS_ABSOLUTE_PATH, true), var_export($this->client_data_dir, true)], + $template + ); + } + + /** + * A sync after removeOverlay() (reinstall) creates a fresh .lock. + */ + public function testASyncAfterRemoveOverlayCreatesANewLockFile(): void + { + $relative_path = 'components/ILIAS/Language/tests/ComponentTranslation/tmp-lock-shipped-' . bin2hex(random_bytes(4)) . '/'; + MigratedPoFixture::writeShippedPo( + $relative_path, + self::MODULE, + 'de', + MigratedPoFixture::catalog(self::MODULE, ['greeting' => 'Hallo']) + ); + $directory = MigratedPoFixture::directory(self::MODULE, $relative_path); + $manager = new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), $directory); + $overlay_base = MigratedPoFixture::overlayBase($this->client_data_dir, $directory, 'de'); + + try { + // a local change: a shipped value writes no overlay, and without an overlay no lock file is kept + MigratedLanguageFileSync::sync($manager, ILIAS_ABSOLUTE_PATH, 'de', self::MODULE, ['greeting' => 'Moin'], $this->client_data_dir); + $this->assertFileExists(MigratedPoFixture::overlayLock($overlay_base), 'sync() must leave a .lock file behind for later callers to serialize on'); + + MigratedLanguageFileSync::removeOverlay($manager, 'de', self::MODULE, $this->client_data_dir); + $this->assertFileDoesNotExist(MigratedPoFixture::overlayLock($overlay_base), 'removeOverlay() (uninstall) must have removed it'); + + MigratedLanguageFileSync::sync($manager, ILIAS_ABSOLUTE_PATH, 'de', self::MODULE, ['greeting' => 'Servus'], $this->client_data_dir); + $this->assertFileExists(MigratedPoFixture::overlayLock($overlay_base), 'a reinstall/resync must create a fresh .lock file'); + } finally { + MigratedPoFixture::removeShippedDirectory($relative_path); + } + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncLockRetryTest.php b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncLockRetryTest.php new file mode 100644 index 000000000000..49bf8edf53d2 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncLockRetryTest.php @@ -0,0 +1,493 @@ + $ignored_fds + */ + private function waitForOpenFd(int $pid, string $path, float $timeout_seconds, array $ignored_fds = []): bool + { + $deadline = microtime(true) + $timeout_seconds; + do { + foreach ($this->openFdsFor($pid, $path) as $entry) { + if (!in_array($entry, $ignored_fds, true)) { + return true; + } + } + usleep(1_000); + } while (microtime(true) < $deadline); + + return false; + } + + /** + * Skips the test unless /proc/self/fd exists, which waitForOpenFd() needs; call before taking any lock + * or starting a child. + */ + private function requireProcFdSupport(): void + { + if (!is_dir('/proc/self/fd')) { + $this->markTestSkipped('This test requires /proc (Linux) to observe the child process\'s open file descriptors.'); + } + } + + /** + * The descriptor numbers of $pid pointing at realpath($path) (resolved once, because /proc readlink() + * returns resolved targets). + * + * @return list the file descriptor numbers of $pid whose target is exactly the realpath() + * of $path - resolved once so a TMPDIR that is itself a symlink (readlink() on /proc//fd/* + * always returns the fully resolved target) does not make a genuine match go unrecognized. + */ + private function openFdsFor(int $pid, string $path): array + { + $matches = []; + $entries = @scandir('/proc/' . $pid . '/fd'); + if ($entries === false) { + return $matches; + } + $resolved_path = realpath($path) ?: $path; + foreach ($entries as $entry) { + if ($entry === '.' || $entry === '..') { + continue; + } + if (@readlink('/proc/' . $pid . '/fd/' . $entry) === $resolved_path) { + $matches[] = $entry; + } + } + + return $matches; + } + + /** + * The $ignored_fds baseline for waitForOpenFd(): descriptors of $pid already pointing at $path, to be + * taken right after starting the child. + * + * @return list + */ + private function seedIgnoredFds(int $pid, string $path): array + { + return $this->openFdsFor($pid, $path); + } + + private function lockAttempts(): int + { + return (new \ReflectionClassConstant(MigratedLanguageFileSync::class, 'LOCK_ATTEMPTS'))->getValue(); + } + + /** + * One withOverlayLock() call in a child process, printing RESULT: or + * EXCEPTION:: plus CALLS:; $error_log_file receives the child's error_log() + * warnings so tests can assert whether one was logged. + */ + private function acquireOnceChildCode(?string $error_log_file = null): string + { + $template = <<<'PHP' + use ILIAS\Language\ComponentTranslation\CustomizingLanguageFileDirectory; + use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; + use ILIAS\Language\ComponentTranslation\LanguageFileDirectoryManager; + use ILIAS\Language\ComponentTranslation\MigratedLanguageFileSync; + + $root = __ROOT__; + require_once $root . '/vendor/composer/vendor/autoload.php'; + + $error_log_file = __ERROR_LOG_FILE__; + if ($error_log_file !== null) { + ini_set('error_log', $error_log_file); + } + + $directory = new class implements LanguageFileDirectory { + public function getPrefix(): string + { + return 'stest'; + } + public function getPath(): string + { + return 'x/'; + } + public function getSuffix(): string + { + return ''; + } + public function isLocal(): bool + { + return false; + } + }; + $manager = new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), $directory); + $client_data_dir = __CLIENT_DATA_DIR__; + + try { + $calls = 0; + $result = MigratedLanguageFileSync::withOverlayLock( + $manager, + 'de', + 'stest', + $client_data_dir, + static function () use (&$calls, $client_data_dir): string { + $calls++; + // the inode of the lock file held right now - the lock file itself is + // removed afterwards (no overlay exists here) + clearstatcache(); + $held = @lstat($client_data_dir . '/lang/stest/de/lock'); + echo 'HELD:' . ($held === false ? '' : $held['ino']) . "\n"; + + return 'ok'; + } + ); + echo 'RESULT:' . $result . "\n"; + echo 'CALLS:' . $calls . "\n"; + } catch (\Throwable $e) { + echo 'EXCEPTION:' . get_class($e) . ':' . $e->getMessage() . "\n"; + } + PHP; + + return str_replace( + ['__ROOT__', '__CLIENT_DATA_DIR__', '__ERROR_LOG_FILE__'], + [ + var_export(ILIAS_ABSOLUTE_PATH, true), + var_export($this->client_data_dir, true), + var_export($error_log_file, true), + ], + $template + ); + } + + /** + * @return array{pid: int, process: resource, pipes: array} + */ + private function startAcquireOnceChild(?string $error_log_file = null): array + { + $started = ChildPhp::open(['-r', $this->acquireOnceChildCode($error_log_file)]); + if ($started === null) { + $this->fail('Could not start the child PHP process.'); + } + [$process, $pipes] = $started; + stream_set_blocking($pipes[1], false); + stream_set_blocking($pipes[2], false); + $status = proc_get_status($process); + + return ['pid' => $status['pid'], 'process' => $process, 'pipes' => $pipes]; + } + + /** + * @param resource $process + * @param array $pipes + * @return array{finished: bool, output: string} + */ + private function drainChild($process, array $pipes, float $timeout_seconds): array + { + $deadline = microtime(true) + $timeout_seconds; + $output = ''; + do { + $output .= (string) stream_get_contents($pipes[1]); + $output .= (string) stream_get_contents($pipes[2]); + $status = proc_get_status($process); + if (!$status['running']) { + fclose($pipes[1]); + fclose($pipes[2]); + proc_close($process); + + return ['finished' => true, 'output' => $output]; + } + usleep(20_000); + } while (microtime(true) < $deadline); + + proc_terminate($process, 9); + usleep(100_000); + $output .= (string) stream_get_contents($pipes[1]); + $output .= (string) stream_get_contents($pipes[2]); + fclose($pipes[1]); + fclose($pipes[2]); + proc_close($process); + + return ['finished' => false, 'output' => $output]; + } + + /** + * Kills a child left running by a failed assertion and closes its handles; safe to call after + * drainChild(). + * + * @param array{pid: int, process: resource, pipes: array} $child + */ + private function terminateChildIfRunning(array $child): void + { + if (is_resource($child['process'])) { + $status = proc_get_status($child['process']); + if ($status['running']) { + proc_terminate($child['process'], 9); + usleep(100_000); + } + } + foreach ($child['pipes'] as $pipe) { + if (is_resource($pipe)) { + @fclose($pipe); + } + } + if (is_resource($child['process'])) { + @proc_close($child['process']); + } + } + + /** + * Replaces the file at $lock_file by a new inode locked via $next_handle before releasing + * $current_handle, so a waiter is only unblocked once the replacement is in place. + * + * @param resource $current_handle + * @return resource the new handle, still holding its lock + */ + private function replaceLockedFile(string $lock_file, $current_handle) + { + $this->assertTrue((bool) @unlink($lock_file), 'could not unlink the lock file to replace it'); + $next_handle = fopen($lock_file, 'c'); + $this->assertNotFalse($next_handle, 'could not recreate the lock file'); + $this->assertTrue(flock($next_handle, LOCK_EX)); + flock($current_handle, LOCK_UN); + fclose($current_handle); + + return $next_handle; + } + + /** + * The lock file is replaced twice while a real process waits on it (synchronized via flock() and + * /proc, not timing); it must retry twice and end up holding the third, stable file. + */ + public function testAWaiterThatLocksAnInodeDeletedInTheMeantimeRetriesAndEndsUpHoldingTheNewFile(): void + { + $this->requireProcFdSupport(); + $this->seedLockDirectory(); + $lock_file = $this->lockFile(); + + $current_handle = fopen($lock_file, 'c'); + $this->assertNotFalse($current_handle); + $this->assertTrue(flock($current_handle, LOCK_EX)); + + $child = $this->startAcquireOnceChild(); + $ignored_fds = $this->seedIgnoredFds($child['pid'], $lock_file); + try { + for ($round = 1; $round <= 2; $round++) { + $this->assertTrue( + $this->waitForOpenFd($child['pid'], $lock_file, 5.0, $ignored_fds), + 'the child never opened the lock file for attempt ' . $round + ); + $current_handle = $this->replaceLockedFile($lock_file, $current_handle); + } + + $this->assertTrue( + $this->waitForOpenFd($child['pid'], $lock_file, 5.0, $ignored_fds), + 'the child never opened the lock file for the final, stable attempt' + ); + clearstatcache(true, $lock_file); + $final_inode = lstat($lock_file)['ino']; + flock($current_handle, LOCK_UN); + fclose($current_handle); + $current_handle = null; + + $result = $this->drainChild($child['process'], $child['pipes'], 5.0); + $this->assertTrue($result['finished'], 'the child must not hang: ' . $result['output']); + $this->assertStringContainsString('RESULT:ok', $result['output']); + + $this->assertStringContainsString('HELD:' . $final_inode . "\n", $result['output']); + clearstatcache(true, $lock_file); + $this->assertSame( + $final_inode, + lstat($lock_file)['ino'], + 'the waiter must end up holding the file that was actually left in place, not trigger a further replacement' + ); + } finally { + if (is_resource($current_handle)) { + flock($current_handle, LOCK_UN); + fclose($current_handle); + } + $this->terminateChildIfRunning($child); + } + } + + /** + * When every attempt finds a replaced lock file, acquireLock() gives up with null and the callback + * runs exactly once, unlocked, with a warning logged. + */ + public function testTheLockFileReplacedOnEveryAttemptExhaustsTheRetriesAndRunsCallbackOnceUnlockedWithAWarningLogged(): void + { + $this->requireProcFdSupport(); + $this->seedLockDirectory(); + $lock_file = $this->lockFile(); + $attempts = $this->lockAttempts(); + $error_log_file = $this->client_data_dir . '-error-log-exhausted.txt'; + + $current_handle = fopen($lock_file, 'c'); + $this->assertNotFalse($current_handle); + $this->assertTrue(flock($current_handle, LOCK_EX)); + + $child = $this->startAcquireOnceChild($error_log_file); + $ignored_fds = $this->seedIgnoredFds($child['pid'], $lock_file); + try { + for ($round = 1; $round <= $attempts; $round++) { + $this->assertTrue( + $this->waitForOpenFd($child['pid'], $lock_file, 5.0, $ignored_fds), + 'the child never opened the lock file for attempt ' . $round + ); + $current_handle = $this->replaceLockedFile($lock_file, $current_handle); + } + flock($current_handle, LOCK_UN); + fclose($current_handle); + $current_handle = null; + + $result = $this->drainChild($child['process'], $child['pipes'], 5.0); + + $this->assertTrue($result['finished'], 'the child must not hang: ' . $result['output']); + $this->assertStringContainsString( + 'RESULT:ok', + $result['output'], + 'exhausting LOCK_ATTEMPTS must fall back to running the callback unlocked, not throw' + ); + $this->assertStringContainsString('CALLS:1', $result['output'], 'the callback must run exactly once'); + $this->assertStringNotContainsString('EXCEPTION', $result['output']); + + $this->assertFileExists($error_log_file, 'exhausting LOCK_ATTEMPTS must log a warning'); + $warning = (string) file_get_contents($error_log_file); + $this->assertStringContainsString('removed or replaced', $warning); + $this->assertStringContainsString((string) $attempts, $warning); + } finally { + if (is_resource($current_handle)) { + flock($current_handle, LOCK_UN); + fclose($current_handle); + } + $this->terminateChildIfRunning($child); + @unlink($error_log_file); + } + } + + /** + * Replaced only on the first attempt: the second attempt acquires a real lock and no warning is + * logged. + */ + public function testTheLockFileReplacedOnlyOnTheFirstAttemptStillAcquiresTheLockNormallyWithoutAWarning(): void + { + $this->requireProcFdSupport(); + $this->seedLockDirectory(); + $lock_file = $this->lockFile(); + $error_log_file = $this->client_data_dir . '-error-log-recovered.txt'; + + $current_handle = fopen($lock_file, 'c'); + $this->assertNotFalse($current_handle); + $this->assertTrue(flock($current_handle, LOCK_EX)); + + $child = $this->startAcquireOnceChild($error_log_file); + $ignored_fds = $this->seedIgnoredFds($child['pid'], $lock_file); + try { + $this->assertTrue( + $this->waitForOpenFd($child['pid'], $lock_file, 5.0, $ignored_fds), + 'the child never opened the lock file for the first attempt' + ); + $current_handle = $this->replaceLockedFile($lock_file, $current_handle); + + $this->assertTrue( + $this->waitForOpenFd($child['pid'], $lock_file, 5.0, $ignored_fds), + 'the child never opened the lock file for the second, now-stable attempt' + ); + flock($current_handle, LOCK_UN); + fclose($current_handle); + $current_handle = null; + + $result = $this->drainChild($child['process'], $child['pipes'], 5.0); + + $this->assertTrue($result['finished'], 'the child must not hang: ' . $result['output']); + $this->assertStringContainsString('RESULT:ok', $result['output']); + $this->assertStringContainsString('CALLS:1', $result['output'], 'the callback must run exactly once'); + $this->assertStringNotContainsString('EXCEPTION', $result['output']); + + $this->assertSame( + '', + (string) @file_get_contents($error_log_file), + 'recovering on a later attempt must not log the "removed or replaced" warning' + ); + } finally { + if (is_resource($current_handle)) { + flock($current_handle, LOCK_UN); + fclose($current_handle); + } + $this->terminateChildIfRunning($child); + @unlink($error_log_file); + } + } + + /** + * A symlink swapped in while the child waits is detected on a later attempt, not only before the first + * one. + */ + public function testTheSymbolicLinkCheckAppliesOnEveryAttemptNotJustTheFirst(): void + { + $this->requireProcFdSupport(); + $this->seedLockDirectory(); + $lock_file = $this->lockFile(); + $decoy = $this->client_data_dir . '-decoy-lock-target'; + file_put_contents($decoy, 'DECOY'); + + $current_handle = fopen($lock_file, 'c'); + $this->assertNotFalse($current_handle); + $this->assertTrue(flock($current_handle, LOCK_EX)); + + $child = $this->startAcquireOnceChild(); + $ignored_fds = $this->seedIgnoredFds($child['pid'], $lock_file); + try { + $this->assertTrue( + $this->waitForOpenFd($child['pid'], $lock_file, 5.0, $ignored_fds), + 'the child never opened the lock file for the first attempt' + ); + $this->assertTrue((bool) @unlink($lock_file)); + symlink($decoy, $lock_file); + flock($current_handle, LOCK_UN); + fclose($current_handle); + $current_handle = null; + + $result = $this->drainChild($child['process'], $child['pipes'], 5.0); + + $this->assertTrue($result['finished'], 'the child must not hang: ' . $result['output']); + $this->assertStringContainsString( + 'RESULT:ok', + $result['output'], + 'a symlink discovered on a LATER attempt must fall back to running unlocked, not bubble up an exception' + ); + $this->assertSame('DECOY', file_get_contents($decoy), 'the symlink target must never be touched'); + $this->assertSame($decoy, readlink($lock_file), 'the symlink itself must be left in place'); + } finally { + @unlink($decoy); + if (is_resource($current_handle)) { + flock($current_handle, LOCK_UN); + fclose($current_handle); + } + $this->terminateChildIfRunning($child); + } + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncLockTest.php b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncLockTest.php new file mode 100644 index 000000000000..02344893ff5d --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncLockTest.php @@ -0,0 +1,289 @@ +runPhpWithTimeout($code, 3.0); + $this->assertTrue($result['finished'], 'the non-blocking lock probe itself must never hang: ' . $result['output']); + + return (int) $result['exit_code']; + } + + private function nestedLockChildCode(): string + { + $template = <<<'PHP' + use ILIAS\Language\ComponentTranslation\CustomizingLanguageFileDirectory; + use ILIAS\Language\ComponentTranslation\LanguageFileDirectory; + use ILIAS\Language\ComponentTranslation\LanguageFileDirectoryManager; + use ILIAS\Language\ComponentTranslation\MigratedLanguageFileSync; + + $root = __ROOT__; + require_once $root . '/vendor/composer/vendor/autoload.php'; + + $directory = new class implements LanguageFileDirectory { + public function getPrefix(): string + { + return 'stest'; + } + public function getPath(): string + { + return 'x/'; + } + public function getSuffix(): string + { + return ''; + } + public function isLocal(): bool + { + return false; + } + }; + $manager = new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), $directory); + $client_data_dir = __CLIENT_DATA_DIR__; + + $log = []; + $result = MigratedLanguageFileSync::withOverlayLock( + $manager, + 'de', + 'stest', + $client_data_dir, + function () use ($manager, $client_data_dir, &$log) { + $log['outer'] = 1; + + return MigratedLanguageFileSync::withOverlayLock( + $manager, + 'de', + 'stest', + $client_data_dir, + function () use (&$log) { + $log['inner'] = 1; + + return 'nested-return'; + } + ); + } + ); + $log['result'] = $result; + foreach ($log as $key => $value) { + echo $key . ':' . $value . "\n"; + } + PHP; + + return str_replace( + ['__ROOT__', '__CLIENT_DATA_DIR__'], + [var_export(ILIAS_ABSOLUTE_PATH, true), var_export($this->client_data_dir, true)], + $template + ); + } + + /** + * The re-entrancy guard lets a nested call return instead of blocking on its own lock; runs in a child + * with a hard timeout. + */ + public function testANestedWithOverlayLockForTheSameModuleReturnsInsteadOfDeadlocking(): void + { + $this->seedLockDirectory(); + + $result = $this->runPhpWithTimeout($this->nestedLockChildCode(), 5.0); + + $this->assertTrue( + $result['finished'], + 'a nested withOverlayLock() call for the same module must return instead of hanging: ' . $result['output'] + ); + $this->assertSame(0, $result['exit_code'], $result['output']); + $this->assertStringContainsString('outer:1', $result['output']); + $this->assertStringContainsString('inner:1', $result['output']); + $this->assertStringContainsString('result:nested-return', $result['output']); + } + + /** + * A concurrent process is refused the lock while the callback runs and gets it as soon as it returns. + */ + public function testAConcurrentProcessCannotAcquireTheLockWhileTheCallbackRunsButCanAfterwards(): void + { + $this->seedLockDirectory(); + $lock_file = $this->lockFile(); + + $probe_during = null; + MigratedLanguageFileSync::withOverlayLock( + $this->manager, + 'de', + self::MODULE, + $this->client_data_dir, + function () use (&$probe_during, $lock_file): void { + $probe_during = $this->probeLock($lock_file); + } + ); + $probe_after = $this->probeLock($lock_file); + + $this->assertSame(1, $probe_during, 'a concurrent process must not be able to lock the file while the callback runs'); + $this->assertSame(0, $probe_after, 'the lock must be released once the callback returns'); + } + + /** + * Mutation: the `finally` release being removed or reordered - an exception in the callback must + * not leave the lock held forever. + */ + public function testTheLockIsReleasedAfterAnExceptionInTheCallback(): void + { + $this->seedLockDirectory(); + $lock_file = $this->lockFile(); + + try { + MigratedLanguageFileSync::withOverlayLock( + $this->manager, + 'de', + self::MODULE, + $this->client_data_dir, + static function (): void { + throw new RuntimeException('boom'); + } + ); + $this->fail('Expected a RuntimeException'); + } catch (RuntimeException $e) { + $this->assertSame('boom', $e->getMessage()); + } + + $this->assertSame(0, $this->probeLock($lock_file), 'the lock must be released even after an exception in the callback'); + } + + /** + * A lock file that cannot be opened for writing is still locked via a read-only handle (a concurrent + * probe is refused). + */ + public function testAcquiresARealLockViaTheReadOnlyFallbackWhenTheLockFileCannotBeOpenedForWriting(): void + { + if (function_exists('posix_geteuid') && posix_geteuid() === 0) { + $this->markTestSkipped('Root can always open the lock file for writing; the read-only fallback cannot be exercised.'); + } + $lock_file = $this->lockFile(); + mkdir(dirname($lock_file), 0775, true); + touch($lock_file); + chmod($lock_file, 0444); + + try { + $probe_during = null; + $ran = false; + MigratedLanguageFileSync::withOverlayLock( + $this->manager, + 'de', + self::MODULE, + $this->client_data_dir, + function () use (&$probe_during, &$ran, $lock_file): void { + $ran = true; + $probe_during = $this->probeLock($lock_file); + } + ); + + $this->assertTrue($ran, 'the callback must still run under the read-only-fallback lock'); + $this->assertSame(1, $probe_during, 'the read-only fallback must still take a real, exclusive lock'); + } finally { + chmod($lock_file, 0664); + } + } + + /** + * Mutation: withOverlayLock() attempting to acquire a lock even without a manager - it must run + * $callback directly and touch nothing on disk. + */ + public function testRunsWithoutALockOrDirectoryWhenTheManagerIsNull(): void + { + $ran = false; + $result = MigratedLanguageFileSync::withOverlayLock( + null, + 'de', + self::MODULE, + $this->client_data_dir, + static function () use (&$ran): string { + $ran = true; + + return 'ok'; + } + ); + + $this->assertTrue($ran); + $this->assertSame('ok', $result); + $this->assertDirectoryDoesNotExist($this->client_data_dir . '/lang'); + } + + /** + * Mutation: findDirectory() being bypassed - a module without a contributed directory must run + * unlocked, too. + */ + public function testRunsWithoutALockWhenTheModuleHasNoContributedDirectory(): void + { + $ran = false; + MigratedLanguageFileSync::withOverlayLock( + $this->manager, + 'de', + 'unknown_module', + $this->client_data_dir, + static function () use (&$ran): void { + $ran = true; + } + ); + + $this->assertTrue($ran); + $this->assertDirectoryDoesNotExist($this->client_data_dir . '/lang'); + } + + /** + * A module with a directory but neither an overlay directory nor a shipped .po runs unlocked and + * creates nothing. + */ + public function testRunsWithoutALockWhenTheModuleIsNotShippedAndHasNoExistingOverlayDirectory(): void + { + $ran = false; + MigratedLanguageFileSync::withOverlayLock( + $this->manager, + 'de', + self::MODULE, + $this->client_data_dir, + static function () use (&$ran): void { + $ran = true; + }, + ILIAS_ABSOLUTE_PATH + ); + + $this->assertTrue($ran); + $this->assertDirectoryDoesNotExist($this->client_data_dir . '/lang'); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncLockTestCase.php b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncLockTestCase.php new file mode 100644 index 000000000000..68679cb87a43 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncLockTestCase.php @@ -0,0 +1,119 @@ +client_data_dir = sys_get_temp_dir() . '/ilias_mlfs_lock_test_' . bin2hex(random_bytes(4)); + mkdir($this->client_data_dir, 0775, true); + $this->directory = MigratedPoFixture::directory(self::MODULE, 'x/'); + $this->manager = new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), $this->directory); + } + + protected function tearDown(): void + { + MigratedPoFixture::removeDirectory($this->client_data_dir); + + parent::tearDown(); + } + + protected function lockFile(): string + { + return MigratedPoFixture::overlayLock(MigratedPoFixture::overlayBase($this->client_data_dir, $this->directory, 'de')); + } + + /** + * Forces withOverlayLock() to take a real lock without needing a shipped `.po`: the overlay + * directory already existing is enough (see withOverlayLock()'s early-return condition). + */ + protected function seedLockDirectory(): void + { + mkdir(dirname($this->lockFile()), 0775, true); + } + + /** + * Runs $code in a child PHP process and kills it after $timeout_seconds, so a regression that + * deadlocks fails the test instead of hanging the suite. + * + * @return array{finished: bool, exit_code: ?int, output: string} + */ + protected function runPhpWithTimeout(string $code, float $timeout_seconds): array + { + $started = ChildPhp::open(['-r', $code]); + if ($started === null) { + $this->fail('Could not start the child PHP process.'); + } + [$process, $pipes] = $started; + stream_set_blocking($pipes[1], false); + stream_set_blocking($pipes[2], false); + + $deadline = microtime(true) + $timeout_seconds; + $output = ''; + do { + $output .= (string) stream_get_contents($pipes[1]); + $output .= (string) stream_get_contents($pipes[2]); + $status = proc_get_status($process); + if (!$status['running']) { + fclose($pipes[1]); + fclose($pipes[2]); + proc_close($process); + + return ['finished' => true, 'exit_code' => $status['exitcode'], 'output' => $output]; + } + usleep(20_000); + } while (microtime(true) < $deadline); + + proc_terminate($process, 9); + usleep(100_000); + $output .= (string) stream_get_contents($pipes[1]); + $output .= (string) stream_get_contents($pipes[2]); + fclose($pipes[1]); + fclose($pipes[2]); + proc_close($process); + + return ['finished' => false, 'exit_code' => null, 'output' => $output]; + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncOverlayFilesTest.php b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncOverlayFilesTest.php new file mode 100644 index 000000000000..81650296dd87 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncOverlayFilesTest.php @@ -0,0 +1,343 @@ +seedShipped(['greeting' => 'Hallo']); + $this->sync(['greeting' => 'Servus']); + $po_before = file_get_contents($this->overlayBase() . '.po'); + $mo_before = file_get_contents(MigratedPoFixture::overlayMo($this->overlayBase())); + $po_inode = fileinode($this->overlayBase() . '.po'); + $mo_inode = fileinode(MigratedPoFixture::overlayMo($this->overlayBase())); + $cache = new ReflectionProperty(\ILIAS\Language\ComponentTranslation\TranslationGettextRepository::class, 'states'); + $cache->setValue(null, [self::MODULE . '|de' => ['greeting' => 'cached']]); + + try { + $this->sync(['greeting' => 'Servus'], $refresh); + + $this->assertSame([self::MODULE . '|de' => ['greeting' => 'cached']], $cache->getValue(), 'no invalidation'); + } finally { + $cache->setValue(null, []); + } + clearstatcache(); + $this->assertSame($po_before, file_get_contents($this->overlayBase() . '.po')); + $this->assertSame($mo_before, file_get_contents(MigratedPoFixture::overlayMo($this->overlayBase()))); + $this->assertSame($po_inode, fileinode($this->overlayBase() . '.po'), 'the .po was not replaced'); + $this->assertSame($mo_inode, fileinode(MigratedPoFixture::overlayMo($this->overlayBase())), 'the .mo was not replaced'); + } + + public function testAMissingMoIsRecompiledEvenWhenThePoIsUnchanged(): void + { + // a local change: a shipped value creates no overlay (delta) + $this->seedShipped(['greeting' => 'Hallo']); + $this->sync(['greeting' => 'Servus']); + $po_before = file_get_contents($this->overlayBase() . '.po'); + $mo_before = file_get_contents(MigratedPoFixture::overlayMo($this->overlayBase())); + $po_inode = fileinode($this->overlayBase() . '.po'); + unlink(MigratedPoFixture::overlayMo($this->overlayBase())); + + $this->sync(['greeting' => 'Servus']); + + clearstatcache(); + $this->assertSame($po_before, file_get_contents($this->overlayBase() . '.po')); + $this->assertSame($po_inode, fileinode($this->overlayBase() . '.po'), 'the unchanged .po is not rewritten'); + $this->assertSame(['greeting' => 'Servus'], MigratedPoFixture::readMo(MigratedPoFixture::overlayMo($this->overlayBase()))); + $this->assertSame($mo_before, file_get_contents(MigratedPoFixture::overlayMo($this->overlayBase()))); + } + + /** + * Self-healing: a `.mo` that does not hold exactly what TranslationCatalog::toMoString() compiles from the (unchanged) + * `.po` - garbage, truncated, empty, or the compiled content of another catalog - is rebuilt, + * byte for byte, although the `.po` itself is left untouched. ilLanguage serves the `.mo`, so + * without this a broken `.mo` would be served until the next actual value change. + */ + #[DataProvider('staleMoContents')] + public function testAStaleMoNextToAnUnchangedPoIsRebuilt(\Closure $stale_content, bool $refresh): void + { + $this->seedShipped(['greeting' => 'Hallo', 'farewell' => 'Tschüss']); + $this->sync(['greeting' => 'Servus', 'farewell' => 'Tschüss']); + $po_before = file_get_contents($this->overlayBase() . '.po'); + $po_inode = fileinode($this->overlayBase() . '.po'); + $mo_before = file_get_contents(MigratedPoFixture::overlayMo($this->overlayBase())); + file_put_contents(MigratedPoFixture::overlayMo($this->overlayBase()), $stale_content($mo_before)); + $cache = new ReflectionProperty(\ILIAS\Language\ComponentTranslation\TranslationGettextRepository::class, 'states'); + $cache->setValue(null, [self::MODULE . '|de' => ['greeting' => 'stale']]); + + try { + $this->sync(['greeting' => 'Servus', 'farewell' => 'Tschüss'], $refresh); + + $this->assertSame([], $cache->getValue(), 'the rebuilt .mo invalidates the read cache'); + } finally { + $cache->setValue(null, []); + } + + clearstatcache(); + $mo_after = file_get_contents(MigratedPoFixture::overlayMo($this->overlayBase())); + $this->assertSame($mo_before, $mo_after); + $this->assertSame(\ILIAS\Language\ComponentTranslation\ShippedTranslations::compileCatalog(MigratedPoFixture::readPo($this->overlayBase() . '.po'), self::MODULE, false)['mo'], $mo_after); + // "farewell" carries the shipped value and is not in the overlay + $this->assertSame(['greeting' => 'Servus'], MigratedPoFixture::readMo(MigratedPoFixture::overlayMo($this->overlayBase()))); + $this->assertSame($po_before, file_get_contents($this->overlayBase() . '.po')); + $this->assertSame($po_inode, fileinode($this->overlayBase() . '.po'), 'the unchanged .po is not rewritten'); + } + + /** + * @return array> + */ + public static function staleMoContents(): array + { + return [ + 'garbage' => [static fn(string $mo): string => 'SENTINEL', false], + 'truncated' => [static fn(string $mo): string => substr($mo, 0, intdiv(strlen($mo), 2)), false], + 'one byte missing' => [static fn(string $mo): string => substr($mo, 0, -1), false], + 'empty' => [static fn(string $mo): string => '', false], + 'another catalog' => [ + static fn(string $mo): string => MigratedPoFixture::catalog(self::MODULE, ['greeting' => 'Veraltet'])->toMoString(), + false, + ], + 'garbage, reconciling write' => [static fn(string $mo): string => 'SENTINEL', true], + ]; + } + + public function testAChangedValueRewritesBothFiles(): void + { + // a first local change creates the overlay to start from + $this->seedShipped(['greeting' => 'Hallo']); + $this->sync(['greeting' => 'Moin']); + file_put_contents(MigratedPoFixture::overlayMo($this->overlayBase()), 'SENTINEL'); + + $this->sync(['greeting' => 'Servus']); + + $this->assertSame(['greeting' => 'Servus'], MigratedPoFixture::readMo(MigratedPoFixture::overlayMo($this->overlayBase()))); + } + + /** + * An entry that enters the overlay with a write that knows when it was changed locally (setup + * update: lng_data.local_change) keeps that time - not the time of the write. An entry already in + * the overlay keeps its own bookkeeping. + */ + public function testANewOverlayEntryTakesItsLocalChangeDateFromTheGivenDates(): void + { + $this->seedShipped(['greeting' => 'Hallo', 'farewell' => 'Tschüss']); + + MigratedLanguageFileSync::sync( + $this->manager, + $this->ilias_root, + 'de', + self::MODULE, + ['greeting' => 'Servus', 'farewell' => 'Pfiat di'], + $this->client_data_dir, + true, + null, + null, + ['greeting' => '2026-10-02 09:36:30', 'farewell' => 'not a timestamp'] + ); + + $this->assertSame('2026-10-02T09:36:30Z', LocalChangeComments::getLocalChange($this->overlayPo()->find(null, 'greeting'))); + $this->assertNotNull(LocalChangeComments::getLocalChange($this->overlayPo()->find(null, 'farewell')), 'an unreadable date: the time of the write'); + $this->assertNotSame('2026-10-02T09:36:30Z', LocalChangeComments::getLocalChange($this->overlayPo()->find(null, 'farewell'))); + } + + public function testASyncInvalidatesTheIlLanguageReadCache(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $cache = new ReflectionProperty(\ILIAS\Language\ComponentTranslation\TranslationGettextRepository::class, 'states'); + $cache->setValue(null, [self::MODULE . '|de' => ['greeting' => 'stale'], 'other|de' => ['x' => 'y']]); + + try { + $this->sync(['greeting' => 'Servus']); + + $this->assertSame(['other|de' => ['x' => 'y']], $cache->getValue()); + } finally { + $cache->setValue(null, []); + } + } + + /** + * gettext/gettext treats a falsy translation as absent; the adapter's workaround must hold on + * the whole way through sync(): "0" (it occurs in the legacy ilias_fr.lang/ilias_pl.lang) is + * written as `msgstr "0"`, served from the `.mo` as "0", is no local change when shipped that + * way - and re-syncing it is a no-op (the `.mo` byte comparison must see identical output). + */ + public function testTheValueZeroSurvivesTheSyncAndResyncingIsANoOp(): void + { + // a shipped "0" is not written, so the local value "0" (shipped is "1") goes through the overlay files + $this->seedShipped(['zero' => '1', 'greeting' => 'Hallo']); + + $this->sync(['zero' => '0', 'greeting' => 'Hallo']); + + $po = file_get_contents($this->overlayBase() . '.po'); + $this->assertStringContainsString("msgid \"zero\"\nmsgstr \"0\"\n", $po); + $this->assertSame(['zero' => '0'], MigratedPoFixture::readMo(MigratedPoFixture::overlayMo($this->overlayBase()))); + $zero = $this->overlayPo()->find(null, 'zero'); + $this->assertSame('1', LocalChangeComments::getOriginal($zero)); + $this->assertNotNull(LocalChangeComments::getLocalChange($zero)); + + $po_inode = fileinode($this->overlayBase() . '.po'); + $mo_inode = fileinode(MigratedPoFixture::overlayMo($this->overlayBase())); + $this->sync(['zero' => '0', 'greeting' => 'Hallo'], true); + $this->sync(['zero' => '0', 'greeting' => 'Hallo']); + + clearstatcache(); + $this->assertSame($po_inode, fileinode($this->overlayBase() . '.po'), 'the .po was not replaced'); + $this->assertSame($mo_inode, fileinode(MigratedPoFixture::overlayMo($this->overlayBase())), 'the .mo was not replaced'); + } + + public function testAValueChangedToZeroIsALocalChangeAndServedAsZero(): void + { + $this->seedShipped(['count' => '1']); + $this->sync(['count' => '1']); + + $this->sync(['count' => '0']); + + $count = $this->overlayPo()->find(null, 'count'); + $this->assertSame('0', $count?->getTranslation()); + $this->assertSame('1', LocalChangeComments::getOriginal($count)); + $this->assertNotNull(LocalChangeComments::getLocalChange($count)); + $this->assertSame(['count' => '0'], MigratedPoFixture::readMo(MigratedPoFixture::overlayMo($this->overlayBase()))); + } + + /** + * A shipped value with line breaks or backslashes is stored as "original" losslessly: re-syncing it is no local + * change, neither on creation nor on a reconciling write, and produces byte-identical files. + */ + public function testAnUnchangedMultiLineShippedValueIsNoLocalChangeAndResyncingIsANoOp(): void + { + $shipped = ['lf' => "Zeile 1\nZeile 2", 'crlf' => "Zeile 1\r\nZeile 2", 'backslash' => 'C:\\pfad', 'literal' => 'a\\nb']; + $this->seedShipped($shipped); + + $this->sync($shipped); + $this->sync($shipped, true); + $this->sync($shipped); + + // an unchanged multi-line value is recognised as the shipped one: no overlay is written + $this->assertFileDoesNotExist($this->overlayBase() . '.po'); + $translations = MigratedLanguageFileSync::loadModuleTranslations($this->manager, 'de', self::MODULE, $this->client_data_dir); + foreach ($shipped as $identifier => $value) { + $this->assertSame($value, $translations[$identifier]['value'], $identifier); + $this->assertFalse($translations[$identifier]['local_change'], $identifier); + } + } + + public function testChangingOnlyTheLineBreakOfAMultiLineValueIsALocalChange(): void + { + $this->seedShipped(['lf' => "Zeile 1\nZeile 2"]); + $this->sync(['lf' => "Zeile 1\nZeile 2"]); + + $this->sync(['lf' => "Zeile 1\r\nZeile 2"]); + + $entry = $this->overlayPo()->find(null, 'lf'); + $this->assertSame("Zeile 1\nZeile 2", LocalChangeComments::getOriginal($entry)); + $this->assertNotNull(LocalChangeComments::getLocalChange($entry)); + } + + /** + * An overlay written by an earlier version has the multi-line original flattened into spaces - a + * reconciling write (refresh) replaces it by the losslessly escaped shipped value and clears the + * resulting false local change. + */ + public function testAReconcilingWriteRepairsALegacyFlattenedOriginal(): void + { + $this->seedShipped(['lf' => "Zeile 1\nZeile 2"]); + $catalog = MigratedPoFixture::catalog(self::MODULE, ['lf' => ['value' => "Zeile 1\nZeile 2", 'local_change' => '2020-01-01T00:00:00Z']]); + $catalog->find(self::MODULE, 'lf')->addTranslatorComment('original: Zeile 1 Zeile 2'); + MigratedPoFixture::writePair($this->overlayBase(), $catalog); + + $this->sync(['lf' => "Zeile 1\nZeile 2"], true); + + // the value is the shipped one, so the legacy entry with its false local change leaves the overlay instead of + // being repaired + $this->assertFileDoesNotExist($this->overlayBase() . '.po'); + $this->assertFalse(MigratedLanguageFileSync::loadModuleTranslations( + $this->manager, + 'de', + self::MODULE, + $this->client_data_dir + )['lf']['local_change']); + } + + /** + * An "original: " comment of the legacy format containing a backslash is read verbatim: an admin + * edit of another entry keeps the untouched entry unchanged and not locally changed. + */ + public function testALegacyOriginalWithABackslashIsReadVerbatimByAnAdminEdit(): void + { + // the shipped value changed since, so "path" is still part of the delta (a value equal to the shipped one would + // leave the overlay) + $this->seedShipped(['path' => 'C:\\neu', 'greeting' => 'Hallo']); + $catalog = MigratedPoFixture::catalog(self::MODULE, ['path' => 'C:\\pfad', 'greeting' => ['value' => 'Hallo', 'original' => 'Hallo']]); + $catalog->find(self::MODULE, 'path')->addTranslatorComment('original: C:\\pfad'); + MigratedPoFixture::writePair($this->overlayBase(), $catalog); + + $this->sync(['path' => 'C:\\pfad', 'greeting' => 'Servus']); + + $path = $this->overlayPo()->find(null, 'path'); + $this->assertSame('C:\\pfad', LocalChangeComments::getOriginal($path)); + $this->assertNull(LocalChangeComments::getLocalChange($path)); + $this->assertContains('original: C:\\pfad', $path->getTranslatorComments(), 'an admin edit never moves the original'); + } + + public function testLoadModuleTranslationsReturnsTheDecodedMultiLineOriginal(): void + { + $this->seedShipped(['lf' => 'Zeile 1']); + $this->seedOverlay(['lf' => ['value' => "Zeile 1\nZeile 2", 'original' => "Zeile 1\nZeile 2"]]); + + $this->assertSame( + "Zeile 1\nZeile 2", + MigratedLanguageFileSync::loadModuleTranslations($this->manager, 'de', self::MODULE, $this->client_data_dir)['lf']['original'] + ); + } + + public function testRefreshKeepsAnEscapedOriginalOfAnEntryTheShippedPoNoLongerContains(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->seedOverlay([ + 'greeting' => ['value' => 'Hallo', 'original' => 'Hallo'], + 'dropped' => ['value' => "Neu\nZeile", 'original' => "Alt\nZeile", 'local_change' => '2020-01-01T00:00:00Z'], + ]); + + $this->sync(['greeting' => 'Hallo', 'dropped' => "Neu\nZeile"], true); + + $dropped = $this->overlayPo()->find(null, 'dropped'); + $this->assertSame("Alt\nZeile", LocalChangeComments::getOriginal($dropped)); + $this->assertSame('2020-01-01T00:00:00Z', LocalChangeComments::getLocalChange($dropped)); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncPluralHelpersTest.php b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncPluralHelpersTest.php new file mode 100644 index 000000000000..38b9c3240892 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncPluralHelpersTest.php @@ -0,0 +1,280 @@ + 'Eintrag', 'item [1]' => 'Einträge']; + $entries = ['item [0]' => 'Eintrag', 'item [1]' => 'Einträge NEU']; + + $this->assertSame(['item' => 'Einträge NEU'], MigratedLanguageFileSync::collapsePluralForms($entries, $shipped)); + } + + /** + * A form missing from $entries counts with its shipped value, not as empty (a partial submission must not corrupt + * the default value). + */ + public function testAFormMissingFromEntriesFallsBackToItsShippedValue(): void + { + $shipped = ['item [0]' => 'Eintrag', 'item [1]' => 'Einträge']; + $entries = ['item [1]' => 'Einträge NEU']; // form 0 not submitted at all + + $this->assertSame(['item' => 'Einträge NEU'], MigratedLanguageFileSync::collapsePluralForms($entries, $shipped)); + } + + /** Entries keep the position of their identifier's first form key. */ + public function testThePluralIdentifierIsPlacedAtThePositionOfItsFirstFormKey(): void + { + $shipped = ['before' => 'A', 'item [0]' => 'Eintrag', 'item [1]' => 'Einträge', 'after' => 'B']; + + $this->assertSame( + ['before', 'item', 'after'], + array_keys(MigratedLanguageFileSync::collapsePluralForms($shipped, $shipped)) + ); + } + + /** A form index the shipped message does not declare (e.g. "item [5]" with nplurals=2) is ignored. */ + public function testAFormIndexOutsideTheShippedFormCountIsIgnored(): void + { + $shipped = ['item [0]' => 'Eintrag', 'item [1]' => 'Einträge']; + $entries = ['item [0]' => 'Eintrag', 'item [1]' => 'Einträge NEU', 'item [5]' => 'Geister-Form']; + + $collapsed = MigratedLanguageFileSync::collapsePluralForms($entries, $shipped); + + $this->assertSame(['item' => 'Einträge NEU'], $collapsed); + } + + /** A plain value under the plural identifier loses to the form keys. */ + public function testAPlainValueNextToFormsIsDroppedInFavourOfTheForms(): void + { + $shipped = ['item [0]' => 'Eintrag', 'item [1]' => 'Einträge']; + $entries = ['item' => 'Veraltet', 'item [0]' => 'Eintrag', 'item [1]' => 'Einträge NEU']; + + $this->assertSame(['item' => 'Einträge NEU'], MigratedLanguageFileSync::collapsePluralForms($entries, $shipped)); + } + + public function testEntriesUnrelatedToAnyPluralMessageAreKeptAsIs(): void + { + $shipped = ['item [0]' => 'Eintrag', 'item [1]' => 'Einträge', 'plain' => 'X']; + $entries = ['plain' => 'Y', 'other' => 'Z']; + + $this->assertSame(['plain' => 'Y', 'other' => 'Z'], MigratedLanguageFileSync::collapsePluralForms($entries, $shipped)); + } + + public function testWithoutAnyPluralMessageInShippedEntriesIsAnIdentity(): void + { + $shipped = ['plain' => 'X']; + $entries = ['plain' => 'Y', 'other [0]' => 'looks like a form but is not one']; + + $this->assertSame($entries, MigratedLanguageFileSync::collapsePluralForms($entries, $shipped)); + } + + /** + * An identifier shipped as its own entry and with form keys (contradictory data) is not treated as plural + * (pluralFormCounts()' guard). + */ + public function testAnIdentifierShippedBothAsItsOwnEntryAndWithFormKeysIsNotTreatedAsPlural(): void + { + $shipped = ['item' => 'Eigener Wert', 'item [0]' => 'Form 0', 'item [1]' => 'Form 1']; + + $this->assertSame($shipped, MigratedLanguageFileSync::collapsePluralForms($shipped, $shipped)); + } + + /** Three forms (Czech-shaped): the identifier's value is the LAST form's, not msgstr[1]; see PluralForms. */ + public function testCollapsesToTheLastFormForAThreeFormLanguage(): void + { + $shipped = ['item [0]' => 'jeden', 'item [1]' => 'dva', 'item [2]' => 'mnoho']; + $entries = ['item [0]' => 'jeden', 'item [1]' => 'dva', 'item [2]' => 'mnoho NEU']; + + $this->assertSame(['item' => 'mnoho NEU'], MigratedLanguageFileSync::collapsePluralForms($entries, $shipped)); + } + + /** + * An empty last form falls back to the closest non-empty form before it (PluralForms::defaultValueForCount()), not + * to form 0. + */ + public function testCollapsesToTheClosestNonEmptyFormWhenTheLastFormIsEmpty(): void + { + $shipped = ['item [0]' => 'jeden', 'item [1]' => 'dva', 'item [2]' => 'mnoho']; + $entries = ['item [0]' => 'jeden', 'item [1]' => 'dva', 'item [2]' => '']; + + $this->assertSame(['item' => 'dva'], MigratedLanguageFileSync::collapsePluralForms($entries, $shipped)); + } + + /** + * A plain value under a plural identifier (a local change from before the module had plurals, or a lng_data value) + * becomes its default form's value. + */ + public function testAPlainValueOfAPluralIdentifierBecomesItsDefaultForm(): void + { + $shipped = ['item [0]' => 'Eintrag', 'item [1]' => 'Einträge']; + $entries = ['item' => 'Alter DB-Wert']; + + $this->assertSame(['item [1]' => 'Alter DB-Wert'], MigratedLanguageFileSync::mapLegacyPluralValues($entries, $shipped)); + } + + /** More than two forms: the plain value becomes the LAST form's key ("item [2]" for three forms). */ + public function testAPlainValueOfAThreeFormLanguagesPluralIdentifierBecomesTheLastForm(): void + { + $shipped = ['item [0]' => 'jeden', 'item [1]' => 'dva', 'item [2]' => 'mnoho']; + $entries = ['item' => 'Alter DB-Wert']; + + $this->assertSame(['item [2]' => 'Alter DB-Wert'], MigratedLanguageFileSync::mapLegacyPluralValues($entries, $shipped)); + } + + public function testAPlainValueOfASingleFormLanguagesPluralIdentifierBecomesFormZero(): void + { + $shipped = ['item [0]' => 'Eintrag']; // nplurals=1 + $entries = ['item' => 'Alter DB-Wert']; + + $this->assertSame(['item [0]' => 'Alter DB-Wert'], MigratedLanguageFileSync::mapLegacyPluralValues($entries, $shipped)); + } + + /** An already present default form key wins; the plain value is dropped. */ + public function testAPlainValueIsDroppedWhenItsDefaultFormKeyIsAlreadyPresent(): void + { + $shipped = ['item [0]' => 'Eintrag', 'item [1]' => 'Einträge']; + $entries = ['item' => 'Alter DB-Wert', 'item [1]' => 'Neue Form 1']; + + $this->assertSame(['item [1]' => 'Neue Form 1'], MigratedLanguageFileSync::mapLegacyPluralValues($entries, $shipped)); + } + + /** A present non-default form key does not stop the plain value from mapping to the absent default form key. */ + public function testAPlainValueIsStillMappedWhenOnlyANonDefaultFormIsAlreadyPresent(): void + { + $shipped = ['item [0]' => 'Eintrag', 'item [1]' => 'Einträge']; + $entries = ['item' => 'Alter DB-Wert', 'item [0]' => 'Neue Form 0']; + + $this->assertSame( + ['item [0]' => 'Neue Form 0', 'item [1]' => 'Alter DB-Wert'], + MigratedLanguageFileSync::mapLegacyPluralValues($entries, $shipped) + ); + } + + public function testEntriesWithNoPlainPluralIdentifierAreUnaffected(): void + { + $shipped = ['item [0]' => 'Eintrag', 'item [1]' => 'Einträge']; + $entries = ['plain' => 'X', 'item [0]' => 'A', 'item [1]' => 'B']; + + $this->assertSame($entries, MigratedLanguageFileSync::mapLegacyPluralValues($entries, $shipped)); + } + + /** Values of any type round-trip: loadOverlay()/resolveMigratedModule() pass a boolean "is local change" map. */ + public function testPreservesNonStringValueTypes(): void + { + $shipped = ['item [0]' => 'Eintrag', 'item [1]' => 'Einträge']; + $entries = ['item' => true]; + + $this->assertSame(['item [1]' => true], MigratedLanguageFileSync::mapLegacyPluralValues($entries, $shipped)); + } + + public function testPluralMessageOfResolvesAFormKeyToItsIdentifier(): void + { + $shipped = ['item [0]' => 'Eintrag', 'item [1]' => 'Einträge']; + + $this->assertSame('item', MigratedLanguageFileSync::pluralMessageOf('item [1]', $shipped)); + } + + public function testPluralMessageOfResolvesTheBareIdentifierToo(): void + { + $shipped = ['item [0]' => 'Eintrag', 'item [1]' => 'Einträge']; + + $this->assertSame('item', MigratedLanguageFileSync::pluralMessageOf('item', $shipped)); + } + + public function testPluralMessageOfIsNullForAnOrdinaryIdentifier(): void + { + $shipped = ['item [0]' => 'Eintrag', 'item [1]' => 'Einträge', 'plain' => 'X']; + + $this->assertNull(MigratedLanguageFileSync::pluralMessageOf('plain', $shipped)); + } + + public function testPluralMessageOfIsNullForAKeyThatMerelyLooksLikeAFormKey(): void + { + $shipped = ['plain [0]' => 'X']; // shipped as its own entry, not via other forms + $shipped['plain'] = 'irrelevant'; + + $this->assertNull(MigratedLanguageFileSync::pluralMessageOf('plain [0]', $shipped)); + } + + public function testPluralMessageOfIsNullForAnUnknownIdentifier(): void + { + $this->assertNull(MigratedLanguageFileSync::pluralMessageOf('unknown [0]', [])); + $this->assertNull(MigratedLanguageFileSync::pluralMessageOf('unknown', [])); + } + + /** + * The plain identifier of a plural message (import line, "add new variable") maps to the key of its default (last) + * form. + */ + public function testDefaultFormKeyOfMapsThePlainIdentifierToItsLastFormKey(): void + { + $shipped = ['item [0]' => 'Eintrag', 'item [1]' => 'Einträge']; + + $this->assertSame('item [1]', MigratedLanguageFileSync::defaultFormKeyOf('item', $shipped)); + } + + public function testDefaultFormKeyOfMapsToTheLastFormOfAThreeFormLanguage(): void + { + $shipped = ['item [0]' => 'jeden', 'item [1]' => 'dva', 'item [2]' => 'mnoho']; + + $this->assertSame('item [2]', MigratedLanguageFileSync::defaultFormKeyOf('item', $shipped)); + } + + /** A key that already is a form key is no plain identifier: null. */ + public function testDefaultFormKeyOfIsNullForAFormKeyItself(): void + { + $shipped = ['item [0]' => 'Eintrag', 'item [1]' => 'Einträge']; + + $this->assertNull(MigratedLanguageFileSync::defaultFormKeyOf('item [0]', $shipped)); + $this->assertNull(MigratedLanguageFileSync::defaultFormKeyOf('item [1]', $shipped)); + } + + /** A singular key next to a plural message (e.g. "item_singular") is an ordinary identifier: null. */ + public function testDefaultFormKeyOfIsNullForASingularKey(): void + { + $shipped = ['item [0]' => 'Eintrag', 'item [1]' => 'Einträge', 'item_singular' => 'Ein Eintrag']; + + $this->assertNull(MigratedLanguageFileSync::defaultFormKeyOf('item_singular', $shipped)); + } + + public function testDefaultFormKeyOfIsNullForAnUnknownIdentifier(): void + { + $this->assertNull(MigratedLanguageFileSync::defaultFormKeyOf('unknown', [])); + } + + /** An identifier shipped as its own entry and with form keys is not mapped either (pluralMessageOf()'s guard). */ + public function testDefaultFormKeyOfIsNullForAnIdentifierShippedBothAsItsOwnEntryAndWithFormKeys(): void + { + $shipped = ['item' => 'Eigener Wert', 'item [0]' => 'Form 0', 'item [1]' => 'Form 1']; + + $this->assertNull(MigratedLanguageFileSync::defaultFormKeyOf('item', $shipped)); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncPluralOverlayTest.php b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncPluralOverlayTest.php new file mode 100644 index 000000000000..7767ad435f78 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncPluralOverlayTest.php @@ -0,0 +1,301 @@ +fixture_directory = __DIR__ . '/tmp-plural-sync-fixtures-' . bin2hex(random_bytes(4)); + mkdir($this->fixture_directory, 0775, true); + $this->client_data_dir = sys_get_temp_dir() . '/ilias_mlfs_plural_test_' . bin2hex(random_bytes(4)); + mkdir($this->client_data_dir, 0775, true); + + $this->directory = MigratedPoFixture::directory( + self::MODULE, + 'components/ILIAS/Language/tests/ComponentTranslation/' . basename($this->fixture_directory) . '/' + ); + $this->manager = new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), $this->directory); + } + + protected function tearDown(): void + { + MigratedPoFixture::removeDirectory($this->fixture_directory); + MigratedPoFixture::removeDirectory($this->client_data_dir); + + parent::tearDown(); + } + + private function shippedPo(string $lang_key = 'de'): string + { + return $this->fixture_directory . '/' . self::MODULE . '_' . $lang_key . '.po'; + } + + private function overlayBase(string $lang_key = 'de'): string + { + return MigratedPoFixture::overlayBase($this->client_data_dir, $this->directory, $lang_key); + } + + private function overlayPo(): TranslationCatalog + { + return MigratedPoFixture::readPo($this->overlayBase() . '.po'); + } + + /** + * @param array> $entries plain value, or the forms of a plural + * message (msgstr[0], msgstr[1], ...) of the identifier + */ + private function seedShipped(array $entries, string $header = 'nplurals=2; plural=(n != 1);'): void + { + $catalog = new TranslationCatalog(); + $catalog->setHeader('Content-Type', 'text/plain; charset=UTF-8'); + $catalog->setHeader('Plural-Forms', $header); + foreach ($entries as $identifier => $value) { + $entry = new TranslationEntry(self::MODULE, (string) $identifier); + if (is_array($value)) { + $entry->setPlural($identifier . '_plural', $value); + } else { + $entry->translate($value); + } + $catalog->add($entry); + } + MigratedPoFixture::writePo($this->shippedPo(), $catalog); + } + + /** + * @param array $entries identifier => value, form keys (PluralFormKey::of()) + * included for a plural message + */ + private function sync(array $entries, bool $refresh = false): void + { + MigratedLanguageFileSync::sync( + $this->manager, + ILIAS_ABSOLUTE_PATH, + 'de', + self::MODULE, + $entries, + $this->client_data_dir, + $refresh + ); + } + + private function overlayEntry(string $identifier): ?TranslationEntry + { + return $this->overlayPo()->find(null, $identifier); + } + + /** + * @param array $dates identifier or form key => database timestamp + */ + private function syncWithLocalChangeDates(array $dates): void + { + MigratedLanguageFileSync::sync( + $this->manager, + ILIAS_ABSOLUTE_PATH, + 'de', + self::MODULE, + ['item [0]' => 'Eintrag NEU', 'item [1]' => 'Einträge NEU'], + $this->client_data_dir, + false, + null, + null, + $dates + ); + } + + /** + * A new plural overlay entry whose dates are known only per form (rows "item [0]", "item [1]" of + * lng_data) gets the latest of them as "local_change" - neither "now" nor the first form's date; + * a form of another message ("itemx [0]") is not considered. + */ + public function testANewPluralEntryTakesTheLatestLocalChangeDateOfItsForms(): void + { + $this->seedShipped(['item' => ['Eintrag', 'Einträge']]); + + $this->syncWithLocalChangeDates([ + 'item [0]' => '2021-05-06 07:08:09', + 'item [1]' => '2020-01-02 03:04:05', + 'itemx [0]' => '2023-01-01 00:00:00', + ]); + + $this->assertSame('2021-05-06T07:08:09Z', LocalChangeComments::getLocalChange($this->overlayEntry('item'))); + } + + /** + * A date under the identifier itself wins over the dates of the forms; an unreadable date of a + * form is ignored. + */ + public function testADateUnderThePluralIdentifierWinsOverTheFormDates(): void + { + $this->seedShipped(['item' => ['Eintrag', 'Einträge']]); + + $this->syncWithLocalChangeDates(['item' => '2019-02-03 04:05:06', 'item [0]' => '2021-05-06 07:08:09']); + + $this->assertSame('2019-02-03T04:05:06Z', LocalChangeComments::getLocalChange($this->overlayEntry('item'))); + } + + public function testAnUnreadableFormDateIsIgnoredAndWithoutAnyReadableDateTheEntryGetsTheCurrentTime(): void + { + $this->seedShipped(['item' => ['Eintrag', 'Einträge']]); + $before = new \DateTimeImmutable('now', new \DateTimeZone('UTC')); + + $this->syncWithLocalChangeDates(['item [0]' => 'garbage', 'item [1]' => '2021-05-06 07:08:09']); + $this->assertSame('2021-05-06T07:08:09Z', LocalChangeComments::getLocalChange($this->overlayEntry('item'))); + + $this->tearDownOverlay(); + $this->syncWithLocalChangeDates(['item [0]' => 'garbage']); + $change = LocalChangeComments::getLocalChange($this->overlayEntry('item')); + $this->assertNotNull($change); + $this->assertGreaterThanOrEqual($before->format('Y-m-d\TH:i:s\Z'), $change); + } + + private function tearDownOverlay(): void + { + MigratedPoFixture::removeDirectory($this->client_data_dir); + mkdir($this->client_data_dir, 0775, true); + } + + /** + * Only one of two forms is locally changed: the overlay still carries the whole plural entry + * (both forms - not just the changed one), and gets an "original" comment per form (the shipped + * value each form is compared against later). + */ + public function testOnlyOneFormChangedWritesTheWholeEntryWithAnOriginalPerForm(): void + { + $this->seedShipped(['item' => ['Eintrag', 'Einträge']]); + + $this->sync(['item [0]' => 'Eintrag', 'item [1]' => 'Einträge NEU']); + + $entry = $this->overlayEntry('item'); + $this->assertNotNull($entry, 'the plural message must be in the overlay'); + $this->assertTrue($entry->isPlural()); + $this->assertSame(['Eintrag', 'Einträge NEU'], $entry->getPluralTranslations()); + $this->assertSame('Eintrag', LocalChangeComments::getOriginal($entry, 0)); + $this->assertSame('Einträge', LocalChangeComments::getOriginal($entry, 1)); + } + + /** + * Once every form is back to its shipped value, the whole entry disappears from the overlay - a + * still-locally-changed, unrelated entry of the same module stays untouched. + */ + public function testAllFormsBackToShippedRemovesTheEntryButKeepsOtherLocalChanges(): void + { + $this->seedShipped(['item' => ['Eintrag', 'Einträge'], 'plain' => 'X']); + $this->sync(['item [0]' => 'Eintrag', 'item [1]' => 'GEÄNDERT', 'plain' => 'Anders']); + $this->assertNotNull($this->overlayEntry('item'), 'precondition: the plural message is in the overlay'); + + $this->sync(['item [0]' => 'Eintrag', 'item [1]' => 'Einträge', 'plain' => 'Anders']); + + $this->assertNull($this->overlayEntry('item')); + $plain = $this->overlayEntry('plain'); + $this->assertNotNull($plain, 'the unrelated local change must survive'); + $this->assertSame('Anders', $plain->getTranslation()); + } + + /** + * Submitting an empty value for one form resets exactly that form to its shipped value - even + * while the overlay already held a different, locally changed value for it - without touching the + * other, still locally changed form. + */ + public function testAnEmptyFormValueResetsOnlyThatFormToShippedKeepingTheOtherFormsLocalChange(): void + { + $this->seedShipped(['item' => ['Eintrag', 'Einträge']]); + $this->sync(['item [0]' => 'FORM0-LOKAL', 'item [1]' => 'FORM1-LOKAL']); + + $this->sync(['item [0]' => 'FORM0-LOKAL', 'item [1]' => '']); + + $entry = $this->overlayEntry('item'); + $this->assertNotNull($entry); + $this->assertSame(['FORM0-LOKAL', 'Einträge'], $entry->getPluralTranslations()); + } + + /** + * $refresh_original_from_shipped=true (a Setup update) updates every form's "original" to the new + * shipped value - including the one form that is not locally overridden, whose value itself then + * simply follows the new shipped value too - while a genuinely locally changed form keeps its own + * value. + */ + public function testRefreshOriginalFromShippedUpdatesOriginalOfEveryFormToTheNewShippedValue(): void + { + $this->seedShipped(['item' => ['Eintrag', 'Einträge']]); + $this->sync(['item [0]' => 'FORM0-LOKAL', 'item [1]' => 'Einträge']); + $entry = $this->overlayEntry('item'); + $this->assertNotNull($entry); + $this->assertSame('Einträge', LocalChangeComments::getOriginal($entry, 1), 'precondition'); + + // the shipped file changes only form 1 + $this->seedShipped(['item' => ['Eintrag', 'Einträge NEU']]); + $this->sync(['item [0]' => 'FORM0-LOKAL', 'item [1]' => 'Einträge NEU'], refresh: true); + + $entry = $this->overlayEntry('item'); + $this->assertNotNull($entry); + $this->assertSame(['FORM0-LOKAL', 'Einträge NEU'], $entry->getPluralTranslations()); + $this->assertSame('Eintrag', LocalChangeComments::getOriginal($entry, 0)); + $this->assertSame('Einträge NEU', LocalChangeComments::getOriginal($entry, 1)); + } + + /** + * Without $refresh_original_from_shipped (an ordinary form save), the "original" of an existing + * overlay entry is left exactly as it was, even though the shipped file changed in the meantime - + * only an explicit refresh (Setup update / "remove local changes") may move it. + */ + public function testWithoutRefreshTheExistingOriginalIsLeftUntouchedWhenTheShippedValueChanges(): void + { + $this->seedShipped(['item' => ['Eintrag', 'Einträge']]); + $this->sync(['item [0]' => 'FORM0-LOKAL', 'item [1]' => 'Einträge']); + + $this->seedShipped(['item' => ['Eintrag', 'Einträge NEU']]); + // form 1's value must be resubmitted as its (new) current value to stay out of the delta - + // an ordinary caller always reads currentModuleContent() first, which already reflects it + $this->sync(['item [0]' => 'FORM0-LOKAL', 'item [1]' => 'Einträge NEU'], refresh: false); + + $entry = $this->overlayEntry('item'); + $this->assertNotNull($entry); + $this->assertSame('Einträge', LocalChangeComments::getOriginal($entry, 1), 'original stays the OLD shipped value'); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncPluralRuleChangeTest.php b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncPluralRuleChangeTest.php new file mode 100644 index 000000000000..9949ba26c7d2 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncPluralRuleChangeTest.php @@ -0,0 +1,389 @@ + 2): the local + * values of an overlay written under the previous rule follow the new rule by meaning, not by index - + * mapPluralForms(), withPluralRuleOf() and where they are applied (readers, sync(), the merge into the + * shipped `.po`). + */ +class MigratedLanguageFileSyncPluralRuleChangeTest extends MigratedLanguageFileSyncTestCase +{ + private const string ONE_FORM = 'nplurals=1; plural=0;'; + private const string TWO_FORMS = 'nplurals=2; plural=(n != 1);'; + private const string THREE_FORMS = 'nplurals=3; plural=(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);'; + + /** + * @param list $previous_forms + * @param array $expected new form => previous form + */ + #[DataProvider('mappings')] + public function testMapPluralFormsGivesAFormThePreviousFormWithItsMeaning( + string $previous, + string $rule, + array $previous_forms, + array $expected + ): void { + $this->assertSame($expected, MigratedLanguageFileSync::mapPluralForms( + PluralForms::fromHeader($previous), + PluralForms::fromHeader($rule), + $previous_forms + )); + } + + /** + * @return array, 3: array}> + */ + public static function mappings(): array + { + $four_ish = 'nplurals=3; plural=(n == 1 ? 0 : n <= 4 ? 1 : 2);'; + + return [ + 'unambiguous: the new forms 1 and 2 were served by the old form 1' => [ + self::TWO_FORMS, self::THREE_FORMS, ['E', 'V'], [0 => 0, 1 => 1, 2 => 1], + ], + 'unambiguous: every form of a 1-form language' => [ + self::ONE_FORM, self::TWO_FORMS, ['L'], [0 => 0, 1 => 0], + ], + 'ambiguous, the old forms carry the same value' => [ + self::THREE_FORMS, self::TWO_FORMS, ['E', 'X', 'X'], [0 => 0, 1 => 1], + ], + 'ambiguous, the new default form takes the old default form' => [ + self::THREE_FORMS, self::TWO_FORMS, ['E', 'FEW', 'VIELE'], [0 => 0, 1 => 2], + ], + 'ambiguous, no default form: left out' => [ + self::THREE_FORMS, $four_ish, ['E', 'FEW', 'VIELE'], [0 => 0, 2 => 2], + ], + 'ambiguous with equal values, no default form: taken over' => [ + self::THREE_FORMS, $four_ish, ['E', 'X', 'X'], [0 => 0, 1 => 1, 2 => 2], + ], + 'a form no sampled quantity selects: left out' => [ + self::TWO_FORMS, 'nplurals=3; plural=(n == 1 ? 0 : 1);', ['E', 'V'], [0 => 0, 1 => 1], + ], + ]; + } + + public function testWithPluralRuleOfReturnsTheSameObjectIfTheRuleIsTheSame(): void + { + $overlay = self::pluralCatalog(self::THREE_FORMS, ['item' => ['E', 'LOKAL', 'VIELE']]); + $shipped = self::pluralCatalog(self::THREE_FORMS, ['item' => ['E', 'F', 'V']]); + + $this->assertSame($overlay, MigratedLanguageFileSync::withPluralRuleOf($overlay, $shipped, self::MODULE, $not_taken_over)); + $this->assertSame([], $not_taken_over); + } + + /** + * 3 -> 2 forms: the local default form is the one the new default form gets (it is the catch-all + * form of both rules) - with its own "original" -, the local middle form has no form with its + * meaning and is reported with its form key (of the previous rule). + */ + public function testWithPluralRuleOfKeepsTheLocalDefaultFormWhenTheNumberOfFormsShrinks(): void + { + $overlay = self::pluralCatalog( + self::THREE_FORMS, + ['item' => ['Eintrag', 'LOKAL-FEW', 'LOKAL-VIELE']], + ['item' => ['Eintrag', 'Einträge-few', 'Einträge-viele']] + ); + $shipped = self::pluralCatalog(self::TWO_FORMS, ['item' => ['Eintrag', 'Einträge']]); + + $result = MigratedLanguageFileSync::withPluralRuleOf($overlay, $shipped, self::MODULE, $not_taken_over); + + $this->assertNotSame($overlay, $result); + $this->assertSame(self::TWO_FORMS, $result->getHeader('Plural-Forms')); + $item = $result->find(self::MODULE, 'item'); + $this->assertSame(['Eintrag', 'LOKAL-VIELE'], $item?->getPluralTranslations()); + $this->assertSame('Eintrag', LocalChangeComments::getOriginal($item, 0)); + $this->assertSame('Einträge-viele', LocalChangeComments::getOriginal($item, 1), 'the original of the form its value came from'); + $this->assertSame(['item [1]'], $not_taken_over); + } + + /** + * A form no previous form maps to is no local change: it has the shipped value as value and as + * "original". A value that equals its original was no local change, so it is not reported. + */ + public function testWithPluralRuleOfGivesAFormWithoutAPreviousFormTheShippedValueAndNoLocalChange(): void + { + $overlay = self::pluralCatalog(self::TWO_FORMS, ['item' => ['Eintrag', 'LOKAL']], ['item' => ['Eintrag', 'Einträge']]); + $shipped = self::pluralCatalog('nplurals=3; plural=(n == 1 ? 0 : 1);', ['item' => ['Eintrag', 'Einträge', 'Eintrage-nie']]); + + $result = MigratedLanguageFileSync::withPluralRuleOf($overlay, $shipped, self::MODULE, $not_taken_over); + + $item = $result->find(self::MODULE, 'item'); + $this->assertSame(['Eintrag', 'LOKAL', 'Eintrage-nie'], $item?->getPluralTranslations()); + $this->assertSame('Eintrage-nie', LocalChangeComments::getOriginal($item, 2)); + $this->assertSame([], $not_taken_over); + } + + public function testWithPluralRuleOfLeavesTheInputUnchangedAndKeepsSingularEntriesAndOtherModules(): void + { + $overlay = self::pluralCatalog(self::THREE_FORMS, ['item' => ['E', 'F', 'V']]); + $singular = new TranslationEntry(self::MODULE, 'plain'); + $singular->translate('LOKAL-PLAIN'); + $overlay->add($singular); + $foreign = new TranslationEntry('other', 'item'); + $foreign->setPlural('item_plural', ['A', 'B', 'C']); + $overlay->add($foreign); + $before = $overlay->toPoString(); + $shipped = self::pluralCatalog(self::TWO_FORMS, ['item' => ['E', 'V']]); + + $result = MigratedLanguageFileSync::withPluralRuleOf($overlay, $shipped, self::MODULE); + + $this->assertSame($before, $overlay->toPoString(), 'the overlay passed in is not changed'); + $this->assertSame('LOKAL-PLAIN', $result->find(self::MODULE, 'plain')?->getTranslation()); + $this->assertSame(['A', 'B', 'C'], $result->find('other', 'item')?->getPluralTranslations(), 'only the module is rewritten'); + } + + /** + * de -> fr: the new form 0 (n = 0 and 1) covers the two old forms; they differ (one is a local + * change), the new form is not the default form - it gets the shipped value, and the local value + * that is in no form any more is reported. + */ + public function testWithPluralRuleOfReplacesAnAmbiguousNonDefaultFormByTheShippedValueAndReportsTheLostLocalValue(): void + { + $overlay = self::pluralCatalog(self::TWO_FORMS, ['item' => ['LOKAL-EIN', 'Éléments']], ['item' => ['Élément', 'Éléments']]); + $shipped = self::pluralCatalog( + 'nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;', + ['item' => ['Élément-fr', 'Éléments-million', 'Éléments-fr']] + ); + + $result = MigratedLanguageFileSync::withPluralRuleOf($overlay, $shipped, self::MODULE, $not_taken_over); + + $item = $result->find(self::MODULE, 'item'); + $this->assertSame(['Élément-fr', 'Éléments', 'Éléments'], $item?->getPluralTranslations()); + $this->assertSame('Élément-fr', LocalChangeComments::getOriginal($item, 0), 'no local change'); + $this->assertSame(['item [0]'], $not_taken_over); + } + + /** + * A message that is not shipped as a plural one any more has no shipped forms to fall back to: a + * form without a previous form gets the value of the previous default form, without "original". + */ + public function testWithPluralRuleOfGivesAMessageThatIsNoLongerShippedAsPluralTheValueOfThePreviousDefaultForm(): void + { + $overlay = self::pluralCatalog( + self::THREE_FORMS, + ['item' => ['E', 'FEW', 'VIELE']], + ['item' => ['E', 'F', 'V']] + ); + $shipped = self::pluralCatalog('nplurals=3; plural=(n == 1 ? 0 : n <= 4 ? 1 : 2);', []); + $singular = new TranslationEntry(self::MODULE, 'item'); + $singular->translate('Singular'); + $shipped->add($singular); + + $result = MigratedLanguageFileSync::withPluralRuleOf($overlay, $shipped, self::MODULE, $not_taken_over); + + $item = $result->find(self::MODULE, 'item'); + $this->assertSame(['E', 'VIELE', 'VIELE'], $item?->getPluralTranslations()); + $this->assertNull(LocalChangeComments::getOriginal($item, 1)); + $this->assertSame('V', LocalChangeComments::getOriginal($item, 2)); + $this->assertSame(['item [1]'], $not_taken_over, 'the value of the form without a meaning is reported'); + } + + /** + * A header that differs in white space or parentheses only selects the same forms: the overlay is + * not rewritten. + */ + public function testWithPluralRuleOfDoesNotRewriteAnOverlayWhoseHeaderOnlyDiffersInSpelling(): void + { + $overlay = self::pluralCatalog('nplurals=2; plural=n != 1;', ['item' => ['E', 'LOKAL']]); + $shipped = self::pluralCatalog('nplurals=2; plural=( n != 1 );', ['item' => ['E', 'V']]); + + $this->assertSame($overlay, MigratedLanguageFileSync::withPluralRuleOf($overlay, $shipped, self::MODULE, $not_taken_over)); + $this->assertSame([], $not_taken_over); + } + + /** + * The overlay is written under 3 forms, the shipped `.po` has 2 (update before the next reconciling + * write): the form keys are those of the new rule and the local default form is on its default form. + */ + public function testLoadModuleTranslationsServesAnOverlayOfTheOldRuleWithTheFormsOfTheNewRule(): void + { + $this->shipPlural(['item' => ['Eintrag', 'Einträge-few', 'Einträge-viele']], self::THREE_FORMS); + $this->syncLocal(['item [0]' => 'Eintrag', 'item [1]' => 'LOKAL-FEW', 'item [2]' => 'LOKAL-VIELE']); + $this->shipPlural(['item' => ['Eintrag', 'Einträge']], self::TWO_FORMS); + + $result = MigratedLanguageFileSync::loadModuleTranslations($this->manager, 'de', self::MODULE, $this->client_data_dir); + + $this->assertSame(['item [0]', 'item [1]'], array_keys($result)); + $this->assertSame('Eintrag', $result['item [0]']['value']); + $this->assertFalse($result['item [0]']['local_change']); + $this->assertSame('LOKAL-VIELE', $result['item [1]']['value']); + $this->assertTrue($result['item [1]']['local_change']); + } + + public function testLoadLocalChangesServesAnOverlayOfTheOldRuleWithTheFormsOfTheShippedRule(): void + { + $this->shipPlural(['item' => ['Eintrag']], self::ONE_FORM); + $this->syncLocal(['item [0]' => 'LOKAL']); + $this->shipPlural(['item' => ['Eintrag', 'Einträge']], self::TWO_FORMS); + + $result = MigratedLanguageFileSync::loadLocalChanges($this->manager, 'de', self::MODULE, $this->client_data_dir); + + $this->assertSame(['item [0]', 'item [1]'], array_keys($result)); + $this->assertSame('LOKAL', $result['item [0]']['value']); + $this->assertSame('LOKAL', $result['item [1]']['value']); + } + + /** + * The shipped `.po` is needed for the forms of an overlay with a plural message: if it cannot be + * read, the overlay is read with its own rule, as it is written and served - without an error, but + * with a warning. + */ + public function testLoadLocalChangesOfAPluralOverlayFallsBackToTheOverlaysRuleIfTheShippedPoCannotBeRead(): void + { + $this->expectErrorLog(); + $this->shipPlural(['item' => ['Eintrag', 'Einträge-few', 'Einträge-viele']], self::THREE_FORMS); + $this->syncLocal(['item [0]' => 'Eintrag', 'item [1]' => 'Einträge-few', 'item [2]' => 'LOKAL-VIELE']); + file_put_contents($this->shippedPo(), "msgid \"kaputt\n"); + + $result = MigratedLanguageFileSync::loadLocalChanges($this->manager, 'de', self::MODULE, $this->client_data_dir); + + $this->assertSame(['item [0]', 'item [1]', 'item [2]'], array_keys($result), 'the forms of the overlay rule'); + $this->assertSame('LOKAL-VIELE', $result['item [2]']['value']); + $this->assertStringContainsString('cannot be read', $this->errorLog()); + } + + /** + * Without a plural message the shipped `.po` is not parsed (see + * MigratedLanguageFileSyncReadersTest::testLoadLocalChangesNeverParsesTheShippedPoOnlyChecksItExists()) - + * also if the overlay has a plural message of another module only. + */ + public function testLoadLocalChangesDoesNotParseTheShippedPoForAnOverlayWithoutAPluralMessageOfTheModule(): void + { + $this->shipPlural(['item' => ['Eintrag', 'Einträge'], 'plain' => 'X'], self::TWO_FORMS); + $this->syncLocal(['plain' => 'LOKAL-PLAIN']); + file_put_contents($this->shippedPo(), "msgid \"kaputt\n"); + + $result = MigratedLanguageFileSync::loadLocalChanges($this->manager, 'de', self::MODULE, $this->client_data_dir); + + $this->assertSame('LOKAL-PLAIN', $result['plain']['value']); + } + + /** + * A form key of an import that the rule of the shipped `.po` does not have ("item [2]" with 2 + * forms) is discarded: no third form, no phantom entry, the valid forms are written. + */ + public function testAFormKeyBeyondTheNumberOfFormsOfTheRuleIsDiscarded(): void + { + $this->shipPlural(['item' => ['Eintrag', 'Einträge']], self::TWO_FORMS); + + $this->syncLocal(['item [0]' => 'Eintrag', 'item [1]' => 'LOKAL', 'item [2]' => 'GEISTER-FORM']); + + $overlay = $this->overlayPo(); + $this->assertSame(['item'], $this->overlayIdentifiers()); + $this->assertSame(['Eintrag', 'LOKAL'], $overlay->find(null, 'item')?->getPluralTranslations()); + $this->assertStringNotContainsString('GEISTER-FORM', (string) file_get_contents($this->overlayBase() . '.po')); + } + + /** + * The merge into the shipped `.po` of an overlay written under another rule writes the forms by + * meaning (the default form of the previous rule to the default form of the shipped one), not by + * index. + */ + public function testMergeOfAnOverlayOfTheOldRuleWritesTheFormsByMeaning(): void + { + $this->shipPlural(['item' => ['Element', 'Elemente-few', 'Elemente-viele']], self::THREE_FORMS); + $this->syncLocal(['item [0]' => 'Element', 'item [1]' => 'LOKAL-FEW', 'item [2]' => 'LOKAL-VIELE']); + $this->shipPlural(['item' => ['Element', 'Elemente']], self::TWO_FORMS); + // below the ILIAS directory like the shipped `.po` (removed with the fixture directory) + mkdir($this->fixture_directory . '/backup'); + + $result = ShippedPoMerger::merge( + $this->manager, + $this->ilias_root, + 'de', + $this->client_data_dir, + $this->fixture_directory . '/backup' + ); + + $this->assertSame([], $result['skipped']); + $this->assertSame([], $result['not_merged']); + $this->assertSame([self::MODULE => $this->shippedPo()], $result['written']); + $merged = TranslationCatalog::fromPoFile($this->shippedPo())->find(self::MODULE, 'item'); + $this->assertSame(['Element', 'LOKAL-VIELE'], $merged?->getPluralTranslations()); + } + + /** + * @param array> $entries identifier => forms + * @param array> $originals identifier => "original" of every form + */ + private static function pluralCatalog(string $header, array $entries, array $originals = []): TranslationCatalog + { + $catalog = new TranslationCatalog(); + $catalog->setHeader('Content-Type', 'text/plain; charset=UTF-8'); + $catalog->setHeader('Plural-Forms', $header); + foreach ($entries as $identifier => $forms) { + $entry = new TranslationEntry(self::MODULE, $identifier); + $entry->setPlural($identifier . '_plural', $forms); + foreach ($originals[$identifier] ?? [] as $form => $original) { + LocalChangeComments::setOriginal($entry, $original, $form); + } + $catalog->add($entry); + } + + return $catalog; + } + + /** + * @param array|string> $entries plain value or the forms of a plural message + */ + private function shipPlural(array $entries, string $header): void + { + $catalog = new TranslationCatalog(); + $catalog->setHeader('Content-Type', 'text/plain; charset=UTF-8'); + $catalog->setHeader('Plural-Forms', $header); + foreach ($entries as $identifier => $value) { + $entry = new TranslationEntry(self::MODULE, (string) $identifier); + if (is_array($value)) { + $entry->setPlural($identifier . '_plural', $value); + } else { + $entry->translate($value); + } + $catalog->add($entry); + } + MigratedPoFixture::writePo($this->shippedPo(), $catalog); + } + + /** + * @param array $entries identifier or form key => value + */ + private function syncLocal(array $entries): void + { + $this->sync($entries); + } + + /** + * What error_log() wrote during this test so far (PHPUnit redirects it to a file per test). + */ + private function errorLog(): string + { + $file = (string) ini_get('error_log'); + + return $file !== '' && is_file($file) ? (string) file_get_contents($file) : ''; + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncReadersTest.php b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncReadersTest.php new file mode 100644 index 000000000000..37a40fbc1fa0 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncReadersTest.php @@ -0,0 +1,470 @@ +shippedPo(), "msgid \"kaputt\n"); + $this->seedOverlay(['greeting' => ['value' => 'Servus', 'original' => 'Hallo', 'local_change' => '2020-01-01T00:00:00Z']]); + + $result = MigratedLanguageFileSync::loadLocalChanges($this->manager, 'de', self::MODULE, $this->client_data_dir); + + $this->assertSame( + ['value' => 'Servus', 'local_change' => true, 'local_change_date' => '2020-01-01 00:00:00', 'original' => 'Hallo'], + $result['greeting'] + ); + } + + public function testLoadLocalChangesReturnsOnlyTheOverlayEntriesNotTheShippedOnes(): void + { + $this->seedShipped(['greeting' => 'Hallo', 'farewell' => 'Tschüss']); + $this->seedOverlay(['greeting' => ['value' => 'Servus', 'original' => 'Hallo']]); + + $this->assertSame( + ['greeting' => ['value' => 'Servus', 'local_change' => false, 'local_change_date' => null, 'original' => 'Hallo']], + MigratedLanguageFileSync::loadLocalChanges($this->manager, 'de', self::MODULE, $this->client_data_dir) + ); + } + + public function testLoadLocalChangesReturnsAnEmptyArrayWithoutAnyOverlay(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + + $this->assertSame([], MigratedLanguageFileSync::loadLocalChanges($this->manager, 'de', self::MODULE, $this->client_data_dir)); + } + + public function testLoadLocalChangesReturnsNullWithoutAShippedPo(): void + { + $this->seedOverlay(['greeting' => 'Servus']); + + $this->assertNull(MigratedLanguageFileSync::loadLocalChanges($this->manager, 'de', self::MODULE, $this->client_data_dir)); + } + + public function testLoadLocalChangesReturnsNullForAnUnknownModuleOrWithoutClientDataDir(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + + $this->assertNull(MigratedLanguageFileSync::loadLocalChanges($this->manager, 'de', 'other_module', $this->client_data_dir)); + $this->assertNull(MigratedLanguageFileSync::loadLocalChanges($this->manager, 'de', self::MODULE, null)); + } + + /** + * An overlay `.mo` without its `.po` (which carries the bookkeeping) must never be treated as "no + * overlay" - that would let the next reconciling write remove a local change it cannot actually see. + * Every reader that consults the overlay (loadModuleTranslations(), loadLocalChanges()) throws + * instead. + */ + public function testAnOverlayMoWithoutItsPoThrowsInsteadOfBeingTreatedAsAbsent(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + MigratedPoFixture::writeOverlayRevision($this->overlayBase(), MigratedPoFixture::catalog(self::MODULE, ['greeting' => 'Servus'])); + + $this->expectException(RuntimeException::class); + $this->expectExceptionMessageMatches('/has no/'); + MigratedLanguageFileSync::loadModuleTranslations($this->manager, 'de', self::MODULE, $this->client_data_dir); + } + + /** + * The same guard for loadLocalChanges(), which LanguageInstallationManager's loadOverlay() relies + * on to distinguish "no overlay" from "unreadable overlay" (see its own docblock). + */ + public function testLoadLocalChangesThrowsForAnOverlayMoWithoutItsPo(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + MigratedPoFixture::writeOverlayRevision($this->overlayBase(), MigratedPoFixture::catalog(self::MODULE, ['greeting' => 'Servus'])); + + $this->expectException(RuntimeException::class); + MigratedLanguageFileSync::loadLocalChanges($this->manager, 'de', self::MODULE, $this->client_data_dir); + } + + /** + * An irregular file (here: a directory) at the overlay `.po` position must not be silently skipped + * either - it is reported instead of being read as "no overlay". + */ + public function testAnIrregularFileAtTheOverlayPoPositionThrows(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + mkdir($this->overlayBase() . '.po', 0775, true); + + $this->expectException(RuntimeException::class); + $this->expectExceptionMessageMatches('/no regular file/'); + MigratedLanguageFileSync::loadModuleTranslations($this->manager, 'de', self::MODULE, $this->client_data_dir); + } + + /** + * sync() itself must refuse to touch such an overlay too - not silently rebuild or remove it (see + * the class docblock: "an overlay path that is no regular file, is never replaced or removed"). + */ + public function testSyncThrowsForAnOverlayMoWithoutItsPoInsteadOfRemovingOrRebuildingIt(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + MigratedPoFixture::writeOverlayRevision($this->overlayBase(), MigratedPoFixture::catalog(self::MODULE, ['greeting' => 'Servus'])); + + $this->expectException(RuntimeException::class); + $this->sync(['greeting' => 'Hallo']); + } + + public function testLoadShippedModulesReturnsTheShippedValuesOfEveryMigratedModuleForTheLanguage(): void + { + $second_directory = MigratedPoFixture::directory('stwo', $this->directory->getPath()); + $not_migrated = MigratedPoFixture::directory('nomig', $this->directory->getPath()); + $manager = new LanguageFileDirectoryManager( + new CustomizingLanguageFileDirectory(), + new MainLanguageFileDirectory(), + $this->directory, + $second_directory, + $not_migrated + ); + $this->seedShipped([ + 'greeting' => 'Hallo', + 'foreign' => ['value' => 'Fremd', 'context' => 'other_module'], + ]); + $this->seedShipped(['farewell' => 'Tschüss'], 'de', 'stwo'); + $this->seedShipped(['farewell' => 'Bye'], 'en', 'stwo'); + $this->seedShipped(['x' => 'only english'], 'en', 'nomig'); + + $this->assertSame( + [self::MODULE => ['greeting' => 'Hallo'], 'stwo' => ['farewell' => 'Tschüss']], + MigratedLanguageFileSync::loadShippedModules($manager, $this->ilias_root, 'de') + ); + } + + public function testLoadShippedModulesReturnsAnEmptyListForAModuleWhoseShippedPoIsEmpty(): void + { + $this->seedShipped([]); + + $this->assertSame( + [self::MODULE => []], + MigratedLanguageFileSync::loadShippedModules($this->manager, $this->ilias_root, 'de') + ); + } + + /** + * readShippedPo() caches a parsed shipped `.po` per request, keyed by its content hash - so a + * `.po` that changes WITHIN the same request (e.g. Setup rewriting it, or - as here - a test + * simulating that) is read fresh, never served stale from the cache. + */ + public function testAChangedShippedPoWithinTheSameRequestIsReReadNotServedFromTheCache(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->assertSame( + ['greeting' => 'Hallo'], + MigratedLanguageFileSync::loadShippedModules($this->manager, $this->ilias_root, 'de')[self::MODULE] + ); + + $this->seedShipped(['greeting' => 'Servus']); + + $this->assertSame( + ['greeting' => 'Servus'], + MigratedLanguageFileSync::loadShippedModules($this->manager, $this->ilias_root, 'de')[self::MODULE] + ); + } + + /** + * The cache is bounded (SHIPPED_CATALOG_CACHE_SIZE = 512, see the class docblock) - installing all + * shipped languages in one request must not let it grow without bound. Direct reflection access to + * the private static cache, the only way to observe its size without instrumenting every one of + * 513+ parses. + */ + public function testTheShippedPoCacheNeverGrowsBeyondItsConfiguredLimit(): void + { + $cache = new ReflectionProperty(MigratedLanguageFileSync::class, 'shipped_catalogs'); + $cache->setValue(null, []); + + try { + for ($i = 0; $i < 520; $i++) { + $module = 'cachetest' . $i; + $directory = MigratedPoFixture::directory($module, $this->directory->getPath()); + MigratedPoFixture::writePo( + $this->fixture_directory . '/' . $module . '_de.po', + MigratedPoFixture::catalog($module, ['x' => 'y']) + ); + MigratedLanguageFileSync::loadShippedModuleEntries($this->fixture_directory . '/' . $module . '_de.po', $module); + unset($directory); + } + + $this->assertLessThanOrEqual(512, count($cache->getValue())); + } finally { + $cache->setValue(null, []); + } + } + + /** + * Every module with a shipped `.po` for the language - also one whose `.po` cannot be parsed + * (the callers need to know it is maintained in PO files to report it) - but neither a module + * without shipped `.po` for that language nor the main directory (empty prefix). + */ + public function testFindShippedModuleFilesListsEveryModuleWithAShippedPoForTheLanguage(): void + { + $corrupt = MigratedPoFixture::directory('scorrupt', $this->directory->getPath()); + $english_only = MigratedPoFixture::directory('senonly', $this->directory->getPath()); + $manager = new LanguageFileDirectoryManager( + new CustomizingLanguageFileDirectory(), + new MainLanguageFileDirectory(), + $this->directory, + $corrupt, + $english_only + ); + $this->seedShipped(['greeting' => 'Hallo']); + file_put_contents($this->shippedPo('de', 'scorrupt'), "msgid \"kaputt\n"); + $this->seedShipped(['x' => 'only english'], 'en', 'senonly'); + + $this->assertSame( + [self::MODULE => $this->shippedPo(), 'scorrupt' => $this->shippedPo('de', 'scorrupt')], + MigratedLanguageFileSync::findShippedModuleFiles($manager, $this->ilias_root, 'de') + ); + } + + public function testHasShippedModulesOnlyForALanguageWithAShippedPo(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + + $this->assertFalse(MigratedLanguageFileSync::hasShippedModules($this->manager, $this->ilias_root, [])); + $this->assertFalse(MigratedLanguageFileSync::hasShippedModules($this->manager, $this->ilias_root, ['en'])); + $this->assertTrue(MigratedLanguageFileSync::hasShippedModules($this->manager, $this->ilias_root, ['en', 'de'])); + } + + /** + * The extracted comments ("#.", the counterpart of a .lang "###" comment) of an entry are joined + * into one line; an entry without one gets `null`, entries of another context are not returned. + */ + public function testLoadShippedModuleEntriesReturnsValueAndJoinedExtractedComment(): void + { + $catalog = MigratedPoFixture::catalog(self::MODULE, [ + 'greeting' => "Hallo\nWelt", + 'farewell' => 'Tschüss', + 'foreign' => ['value' => 'Fremd', 'context' => 'other_module'], + ]); + $catalog->find(self::MODULE, 'greeting')->addExtractedComment('shown on the login page'); + $catalog->find(self::MODULE, 'greeting')->addExtractedComment('keep it short'); + $catalog->find('other_module', 'foreign')->addExtractedComment('not returned'); + MigratedPoFixture::writePo($this->shippedPo(), $catalog); + + $entries = MigratedLanguageFileSync::loadShippedModuleEntries($this->shippedPo(), self::MODULE); + ksort($entries); + + $this->assertSame( + [ + 'farewell' => ['value' => 'Tschüss', 'comment' => null], + 'greeting' => ['value' => "Hallo\nWelt", 'comment' => 'shown on the login page keep it short'], + ], + $entries + ); + } + + /** The own note (translator comment) wins over the reference note ("#."); loadShippedNotes() agrees. */ + public function testTheTranslatorCommentIsTheNoteAndBothKindsAreShippedComments(): void + { + $catalog = MigratedPoFixture::catalog(self::MODULE, ['greeting' => 'Hej', 'farewell' => 'Hejdå']); + $catalog->find(self::MODULE, 'greeting')->addExtractedComment('en note'); + $catalog->find(self::MODULE, 'greeting')->addTranslatorNote('egen anteckning'); + $catalog->find(self::MODULE, 'farewell')->addExtractedComment('en note'); + MigratedPoFixture::writePo($this->shippedPo(), $catalog); + + $entries = MigratedLanguageFileSync::loadShippedModuleEntries($this->shippedPo(), self::MODULE); + + $this->assertSame('egen anteckning', $entries['greeting']['comment']); + $this->assertSame('en note', $entries['farewell']['comment']); + $this->assertSame( + ['greeting' => ['egen anteckning'], 'farewell' => ['en note']], + MigratedLanguageFileSync::loadShippedNotes($this->shippedPo(), self::MODULE) + ); + } + + public function testLoadShippedModuleEntriesThrowsForACorruptPo(): void + { + file_put_contents($this->shippedPo(), "msgid \"kaputt\n"); + + $this->expectException(RuntimeException::class); + MigratedLanguageFileSync::loadShippedModuleEntries($this->shippedPo(), self::MODULE); + } + + public function testLoadModuleTranslationsReturnsValueLocalChangeDateAndOriginalPerEntry(): void + { + $this->seedShipped(['changed' => 'Hallo']); + $this->seedOverlay([ + 'changed' => ['value' => 'Servus', 'original' => 'Hallo', 'local_change' => '2026-09-21T10:11:12Z'], + 'unchanged' => ['value' => 'Tschüss', 'original' => 'Tschüss'], + 'foreign' => ['value' => 'x', 'context' => 'other_module'], + ]); + + $this->assertSame( + [ + 'changed' => [ + 'value' => 'Servus', + 'local_change' => true, + 'local_change_date' => '2026-09-21 10:11:12', + 'original' => 'Hallo', + ], + 'unchanged' => [ + 'value' => 'Tschüss', + 'local_change' => false, + 'local_change_date' => null, + 'original' => 'Tschüss', + ], + ], + MigratedLanguageFileSync::loadModuleTranslations($this->manager, 'de', self::MODULE, $this->client_data_dir) + ); + } + + /** Only the overlay `.po` is read: a missing overlay `.mo` does not make the module "not migrated". */ + public function testLoadModuleTranslationsIgnoresAMissingOverlayMoAndStillReadsTheOverlayPo(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->seedOverlay(['greeting' => ['value' => 'Servus', 'original' => 'Hallo', 'local_change' => '2020-01-01T00:00:00Z']]); + unlink(MigratedPoFixture::overlayMo($this->overlayBase())); + + $this->assertSame( + ['value' => 'Servus', 'local_change' => true, 'local_change_date' => '2020-01-01 00:00:00', 'original' => 'Hallo'], + MigratedLanguageFileSync::loadModuleTranslations($this->manager, 'de', self::MODULE, $this->client_data_dir)['greeting'] + ); + } + + /** + * Without an overlay `.po` at all, loadModuleTranslations() falls back to the shipped-only result + * (never `null`, as long as the module is migrated - i.e. has a shipped `.po`) - a lone `.mo` + * (which sync() itself never produces, but a stray file could) changes nothing either, since only + * the `.po` is ever consulted. + */ + /** + * An overlay `.mo` without its `.po` may hold a local change ilLanguage serves: treating it as "no overlay" would + * let the next write remove it. It is reported as unreadable (callers fall back to the database), and a write + * leaves it untouched. + */ + public function testAnOverlayMoWithoutItsPoIsUnreadableAndNotRemovedByAWrite(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + MigratedPoFixture::writeOverlayRevision($this->overlayBase(), MigratedPoFixture::catalog(self::MODULE, ['greeting' => 'Stray'])); + + try { + MigratedLanguageFileSync::loadModuleTranslations($this->manager, 'de', self::MODULE, $this->client_data_dir); + $this->fail('Expected a RuntimeException'); + } catch (RuntimeException $e) { + $this->assertStringContainsString('has no', $e->getMessage()); + } + try { + $this->sync(['greeting' => 'Hallo']); + $this->fail('Expected a RuntimeException'); + } catch (RuntimeException) { + } + + $this->assertSame(['greeting' => 'Stray'], MigratedPoFixture::readMo(MigratedPoFixture::overlayMo($this->overlayBase()))); + } + + public function testGetMigratedModulesListsAModuleByItsShippedPoAloneIndependentOfAnyOverlay(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->seedOverlay(['greeting' => 'Servus']); + + $this->assertSame([self::MODULE], MigratedLanguageFileSync::getMigratedModules($this->manager, 'de', $this->client_data_dir)); + $this->assertSame([], MigratedLanguageFileSync::getMigratedModules($this->manager, 'en', $this->client_data_dir)); + $this->assertSame([], MigratedLanguageFileSync::getMigratedModules($this->manager, 'de', null)); + } + + /** + * The essence of "migrated == has a shipped .po": a module without ANY overlay file at all (never + * had a local change) is still listed as migrated for its shipped language. + */ + public function testGetMigratedModulesListsAModuleWithNoOverlayFileWhatsoever(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + + $this->assertDirectoryDoesNotExist(dirname($this->overlayBase())); + $this->assertSame([self::MODULE], MigratedLanguageFileSync::getMigratedModules($this->manager, 'de', $this->client_data_dir)); + } + + public function testRemoveOverlayDeletesBothOverlayFilesButLeavesTheShippedPoUntouched(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->seedOverlay(['greeting' => 'Hallo']); + $shipped_before = file_get_contents($this->shippedPo()); + + MigratedLanguageFileSync::removeOverlay($this->manager, 'de', self::MODULE, $this->client_data_dir); + + $this->assertFileDoesNotExist($this->overlayBase() . '.po'); + $this->assertFileDoesNotExist(MigratedPoFixture::overlayMo($this->overlayBase())); + $this->assertSame($shipped_before, file_get_contents($this->shippedPo())); + } + + public function testRemoveOverlayOnlyRemovesTheRequestedLanguage(): void + { + $this->seedOverlay(['greeting' => 'Hallo'], 'de'); + $this->seedOverlay(['greeting' => 'Hello'], 'en'); + + MigratedLanguageFileSync::removeOverlay($this->manager, 'de', self::MODULE, $this->client_data_dir); + + $this->assertFileExists($this->overlayBase('en') . '.po'); + $this->assertFileExists(MigratedPoFixture::overlayMo($this->overlayBase('en'))); + } + + public function testRemoveOverlayIsANoOpWithoutOverlayUnknownModuleOrClientDataDir(): void + { + MigratedLanguageFileSync::removeOverlay($this->manager, 'de', self::MODULE, $this->client_data_dir); + $this->seedOverlay(['greeting' => 'Hallo']); + + MigratedLanguageFileSync::removeOverlay($this->manager, 'de', 'other_module', $this->client_data_dir); + MigratedLanguageFileSync::removeOverlay($this->manager, 'de', self::MODULE, null); + + $this->assertFileExists($this->overlayBase() . '.po'); + $this->assertFileExists(MigratedPoFixture::overlayMo($this->overlayBase())); + } + + public function testRemoveOverlayThrowsWhenAnOverlayFileCannotBeRemoved(): void + { + if (function_exists('posix_geteuid') && posix_geteuid() === 0) { + $this->markTestSkipped('A non-removable file cannot be forced for root (no root-proof variant for unlink()).'); + } + $this->seedOverlay(['greeting' => 'Hallo']); + $overlay_directory = dirname($this->overlayBase()); + chmod($overlay_directory, 0555); + + // the lock file cannot be created in the read-only directory either - logged (error_log) + $this->expectErrorLog(); + set_error_handler(static fn(): bool => true, E_WARNING); + try { + $this->expectException(RuntimeException::class); + $this->expectExceptionMessageMatches('/overlay file/i'); + MigratedLanguageFileSync::removeOverlay($this->manager, 'de', self::MODULE, $this->client_data_dir); + } finally { + restore_error_handler(); + chmod($overlay_directory, 0775); + } + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncRemarksTest.php b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncRemarksTest.php new file mode 100644 index 000000000000..ffec8d2cdd6b --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncRemarksTest.php @@ -0,0 +1,366 @@ +fixture_directory = __DIR__ . '/tmp-remarks-sync-fixtures-' . bin2hex(random_bytes(4)); + mkdir($this->fixture_directory, 0775, true); + $this->client_data_dir = sys_get_temp_dir() . '/ilias_mlfs_remarks_test_' . bin2hex(random_bytes(4)); + mkdir($this->client_data_dir, 0775, true); + + $this->directory = MigratedPoFixture::directory( + self::MODULE, + 'components/ILIAS/Language/tests/ComponentTranslation/' . basename($this->fixture_directory) . '/' + ); + $this->manager = new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), $this->directory); + } + + protected function tearDown(): void + { + MigratedPoFixture::removeDirectory($this->fixture_directory); + MigratedPoFixture::removeDirectory($this->client_data_dir); + + parent::tearDown(); + } + + private function shippedPo(string $lang_key = 'de'): string + { + return $this->fixture_directory . '/' . self::MODULE . '_' . $lang_key . '.po'; + } + + private function overlayBase(string $lang_key = 'de'): string + { + return MigratedPoFixture::overlayBase($this->client_data_dir, $this->directory, $lang_key); + } + + private function overlayPo(): TranslationCatalog + { + return MigratedPoFixture::readPo($this->overlayBase() . '.po'); + } + + private function overlayEntry(string $identifier): ?TranslationEntry + { + return $this->overlayPo()->find(null, $identifier); + } + + /** + * @param array> $entries plain value, or the forms of a plural + * message (msgstr[0], msgstr[1], ...) of the identifier + */ + private function seedShipped(array $entries, string $header = 'nplurals=2; plural=(n != 1);'): void + { + $catalog = new TranslationCatalog(); + $catalog->setHeader('Content-Type', 'text/plain; charset=UTF-8'); + $catalog->setHeader('Plural-Forms', $header); + foreach ($entries as $identifier => $value) { + $entry = new TranslationEntry(self::MODULE, (string) $identifier); + if (is_array($value)) { + $entry->setPlural($identifier . '_plural', $value); + } else { + $entry->translate($value); + } + $catalog->add($entry); + } + MigratedPoFixture::writePo($this->shippedPo(), $catalog); + } + + /** + * @param array $entries identifier => value + * @param array|null $remarks identifier => remark, `null` keeps the overlay's own + */ + private function sync(array $entries, ?array $remarks = null): void + { + MigratedLanguageFileSync::sync( + $this->manager, + ILIAS_ABSOLUTE_PATH, + 'de', + self::MODULE, + $entries, + $this->client_data_dir, + false, + null, + $remarks + ); + } + + /** + * A remark on a key whose value is exactly the shipped one still belongs in the overlay - as a + * "remark only" entry with an empty msgstr in the `.po`, absent from readMoTranslations()'s + * result (the compiled `.mo` leaves it out entirely, so nothing served changes). + */ + public function testARemarkOnAnUnchangedValueCreatesARemarkOnlyEntryAbsentFromTheCompiledMo(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + + $this->sync(['greeting' => 'Hallo'], ['greeting' => 'Bitte prüfen']); + + $entry = $this->overlayEntry('greeting'); + $this->assertNotNull($entry, 'the remark-only entry must be in the overlay .po'); + $this->assertSame('', $entry->getTranslation(), 'empty msgstr - the value itself is unchanged'); + $this->assertSame('Bitte prüfen', LocalChangeComments::getRemark($entry)); + $this->assertArrayNotHasKey('greeting', MigratedPoFixture::readMo(MigratedPoFixture::overlayMo($this->overlayBase()))); + } + + /** + * loadModuleTranslations() (what ilLanguage ultimately reads) and loadLocalChanges() (the admin + * GUI's per-key overlay state) both skip a remark-only entry entirely - it carries no value. + */ + public function testARemarkOnlyEntryIsSkippedByLoadModuleTranslationsAndLoadLocalChanges(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->sync(['greeting' => 'Hallo'], ['greeting' => 'Bitte prüfen']); + + $translations = MigratedLanguageFileSync::loadModuleTranslations($this->manager, 'de', self::MODULE, $this->client_data_dir); + $this->assertSame('Hallo', $translations['greeting']['value'] ?? null); + $this->assertFalse($translations['greeting']['local_change']); + + $local_changes = MigratedLanguageFileSync::loadLocalChanges($this->manager, 'de', self::MODULE, $this->client_data_dir); + $this->assertArrayNotHasKey('greeting', $local_changes, 'a remark-only entry is not a local change of the value'); + } + + public function testLoadRemarksReadsTheRemarkOfARemarkOnlyEntry(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->sync(['greeting' => 'Hallo'], ['greeting' => 'Bitte prüfen']); + + $remarks = MigratedLanguageFileSync::loadRemarks($this->manager, 'de', self::MODULE, $this->client_data_dir); + + $this->assertSame(['greeting' => 'Bitte prüfen'], $remarks); + } + + public function testLoadRemarksIsEmptyWithoutAnyOverlayAtAll(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + + $this->assertSame([], MigratedLanguageFileSync::loadRemarks($this->manager, 'de', self::MODULE, $this->client_data_dir)); + } + + /** + * $remarks = null keeps the overlay's existing remarks: a value-only sync() (ordinary GUI save, + * writePluralRows()/sync() of ilObjLanguageExt) must not wipe a remark. + */ + public function testNullRemarksKeepsTheExistingOverlayRemark(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->sync(['greeting' => 'Hallo'], ['greeting' => 'Bitte prüfen']); + + $this->sync(['greeting' => 'Servus']); // remarks omitted (null) - only the value changes + + $entry = $this->overlayEntry('greeting'); + $this->assertNotNull($entry); + $this->assertSame('Servus', $entry->getTranslation()); + $this->assertSame('Bitte prüfen', LocalChangeComments::getRemark($entry), 'the remark must survive a remarks-less sync()'); + } + + /** + * $remarks = [] removes every remark of the module - and, once the value is back to shipped too, + * the overlay disappears entirely (nothing left to keep). + */ + public function testEmptyArrayRemarksRemovesEveryRemarkAndDropsTheOverlayIfNothingElseIsLeft(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->sync(['greeting' => 'Hallo'], ['greeting' => 'Bitte prüfen']); + $this->assertNotNull($this->overlayEntry('greeting'), 'precondition'); + + $this->sync(['greeting' => 'Hallo'], []); + + $this->assertFalse(is_file($this->overlayBase() . '.po'), 'nothing left to keep - the whole overlay is removed'); + } + + /** + * A later real value change on the very same key keeps its remark - the "remark only" entry is + * simply replaced by an ordinary one carrying both the new value and the remark. + */ + public function testARealValueChangeOnTheSameKeyKeepsItsRemark(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->sync(['greeting' => 'Hallo'], ['greeting' => 'Bitte prüfen']); + + $this->sync(['greeting' => 'Servus'], ['greeting' => 'Bitte prüfen']); + + $entry = $this->overlayEntry('greeting'); + $this->assertNotNull($entry); + $this->assertSame('Servus', $entry->getTranslation()); + $this->assertSame('Bitte prüfen', LocalChangeComments::getRemark($entry)); + $this->assertSame('Servus', MigratedPoFixture::readMo(MigratedPoFixture::overlayMo($this->overlayBase()))['greeting'] ?? null); + } + + /** + * A plural message's remark belongs to its base identifier (never a form key) - even when only + * the remark, not any form's value, changed. + */ + public function testAPluralMessagesRemarkBelongsToItsBaseIdentifier(): void + { + $this->seedShipped(['item' => ['Eintrag', 'Einträge']]); + + $this->sync( + ['item [0]' => 'Eintrag', 'item [1]' => 'Einträge'], + ['item' => 'Bitte prüfen'] + ); + + $entry = $this->overlayEntry('item'); + $this->assertNotNull($entry); + $this->assertTrue($entry->isPlural()); + $this->assertSame(['', ''], $entry->getPluralTranslations(), 'remark only - both forms stay empty'); + $this->assertSame('Bitte prüfen', LocalChangeComments::getRemark($entry)); + $this->assertArrayNotHasKey('item', MigratedPoFixture::readMo(MigratedPoFixture::overlayMo($this->overlayBase()))); + } + + /** + * setRemarks() changes exactly the given identifiers' remarks under the overlay lock, leaving + * every value and every other remark untouched. + */ + public function testSetRemarksChangesOnlyTheGivenIdentifiersRemarks(): void + { + $this->seedShipped(['greeting' => 'Hallo', 'farewell' => 'Tschüss']); + $this->sync(['greeting' => 'Hallo', 'farewell' => 'Tschüss'], ['greeting' => 'Alte Bemerkung']); + + MigratedLanguageFileSync::setRemarks( + $this->manager, + 'de', + self::MODULE, + ['greeting' => 'Neue Bemerkung', 'farewell' => 'Auch geprüft'], + $this->client_data_dir + ); + + $remarks = MigratedLanguageFileSync::loadRemarks($this->manager, 'de', self::MODULE, $this->client_data_dir); + // order is not a guaranteed contract of loadRemarks() - only the content is + ksort($remarks); + $this->assertSame(['farewell' => 'Auch geprüft', 'greeting' => 'Neue Bemerkung'], $remarks); + } + + public function testSetRemarksWithNullOrEmptyStringRemovesTheRemark(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->sync(['greeting' => 'Hallo'], ['greeting' => 'Alte Bemerkung']); + + MigratedLanguageFileSync::setRemarks($this->manager, 'de', self::MODULE, ['greeting' => null], $this->client_data_dir); + + $this->assertSame([], MigratedLanguageFileSync::loadRemarks($this->manager, 'de', self::MODULE, $this->client_data_dir)); + } + + /** + * A remark that is not valid UTF-8 (e.g. stale lng_data content from before remarks were + * validated) is dropped with a warning instead of making sync() throw or the overlay unreadable - + * every other entry (here: a second, valid remark) is still written. + */ + public function testSyncDropsAnInvalidUtf8RemarkButWritesEveryOtherEntry(): void + { + $this->seedShipped(['greeting' => 'Hallo', 'farewell' => 'Tschüss']); + + // no logger is registered in this test process - the warning falls back to error_log(), + // which would otherwise print to this test's own output and mark it risky + $previous_error_log = ini_set('error_log', sys_get_temp_dir() . '/ilias_mlfs_remarks_test_error.log'); + try { + $this->sync( + ['greeting' => 'Hallo', 'farewell' => 'Tschüss'], + ['greeting' => "Ung\xFCltig", 'farewell' => 'Gültige Bemerkung'] + ); + } finally { + ini_set('error_log', (string) $previous_error_log); + } + + $remarks = MigratedLanguageFileSync::loadRemarks($this->manager, 'de', self::MODULE, $this->client_data_dir); + $this->assertArrayNotHasKey('greeting', $remarks); + $this->assertSame('Gültige Bemerkung', $remarks['farewell'] ?? null); + } + + /** + * A safety net independent of the remark check above: if the compiled overlay content would not + * be valid UTF-8 for any other reason (here: an invalid value, not a remark), sync() throws + * instead of writing an unreadable file - fromPoFile() would refuse to read it back, losing every + * local change of the module. + */ + public function testSyncThrowsInsteadOfWritingAnOverlayThatWouldNotBeValidUtf8(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + + $this->expectException(RuntimeException::class); + $this->expectExceptionMessageMatches('/would not be valid UTF-8/'); + $this->sync(['greeting' => "Ung\xFCltig"]); + } + + /** + * Only entries actually flagged "fuzzy" in the shipped `.po` are listed - a plural message's every + * form key, a singular message its plain identifier. + */ + public function testLoadShippedFuzzyIdentifiersListsFuzzyEntriesOnly(): void + { + $catalog = new TranslationCatalog(); + $catalog->setHeader('Plural-Forms', 'nplurals=2; plural=(n != 1);'); + $fuzzy_singular = new TranslationEntry(self::MODULE, 'fuzzy_one'); + $fuzzy_singular->translate('Noch nicht übersetzt'); + $fuzzy_singular->addFlag('fuzzy'); + $catalog->add($fuzzy_singular); + $clean_singular = new TranslationEntry(self::MODULE, 'clean'); + $clean_singular->translate('Übersetzt'); + $catalog->add($clean_singular); + $fuzzy_plural = new TranslationEntry(self::MODULE, 'item'); + $fuzzy_plural->setPlural('items', ['Eintrag', 'Einträge']); + $fuzzy_plural->addFlag('fuzzy'); + $catalog->add($fuzzy_plural); + MigratedPoFixture::writePo($this->shippedPo(), $catalog); + + $fuzzy = MigratedLanguageFileSync::loadShippedFuzzyIdentifiers($this->shippedPo(), self::MODULE); + + $this->assertSame( + ['fuzzy_one' => true, 'item [0]' => true, 'item [1]' => true], + $fuzzy + ); + } + + public function testLoadShippedFuzzyIdentifiersIsEmptyWithoutAnyFuzzyEntry(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + + $this->assertSame([], MigratedLanguageFileSync::loadShippedFuzzyIdentifiers($this->shippedPo(), self::MODULE)); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncRevisionTest.php b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncRevisionTest.php new file mode 100644 index 000000000000..357c6b21d236 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncRevisionTest.php @@ -0,0 +1,218 @@ +/lang///r-/`, named by `current`) + * as MigratedLanguageFileSync::sync() manages them: a new revision is served right away by the + * running process (native gettext never reloads a catalog, so every state has a directory of its + * own), the previous one is kept for requests still reading it, nothing older stays, and an overlay + * that became empty serves nothing any more. + * + * Everything lives below temporary directories (the shipped `.po` below the "ILIAS root" $root). + */ +class MigratedLanguageFileSyncRevisionTest extends TestCase +{ + private const string MODULE = 'rvs'; + + private string $root; + private string $client_data_dir; + private LanguageFileDirectoryManager $manager; + + protected function setUp(): void + { + MigratedPoFixture::resetRuntime(); + $this->root = sys_get_temp_dir() . '/ilias_overlay_revisions_' . bin2hex(random_bytes(6)); + $this->client_data_dir = $this->root . '/client'; + mkdir($this->client_data_dir, 0775, true); + + MigratedPoFixture::writePo( + $this->root . '/rvs/rvs_de.po', + MigratedPoFixture::catalog(self::MODULE, ['greeting' => 'Hallo', 'other' => 'Anders']) + ); + $this->manager = new LanguageFileDirectoryManager( + new CustomizingLanguageFileDirectory(), + MigratedPoFixture::directory(self::MODULE, 'rvs/') + ); + MigratedPoFixture::build($this->manager, $this->root); + } + + protected function tearDown(): void + { + MigratedPoFixture::removeDirectory($this->root); + MigratedPoFixture::resetRuntime(); + } + + /** + * @param array $entries + */ + private function sync(array $entries): void + { + MigratedLanguageFileSync::sync($this->manager, $this->root, 'de', self::MODULE, $entries, $this->client_data_dir); + } + + private function overlayDirectory(): string + { + return MigratedLanguageFilePaths::overlayDirectory($this->client_data_dir, self::MODULE, 'de'); + } + + private function served(string $key = 'greeting'): ?string + { + return (new TranslationGettextRepository())->getText(self::MODULE, 'de', $key, $this->client_data_dir); + } + + /** + * @return list the revision directories of the overlay, sorted + */ + private function revisions(): array + { + $revisions = array_values(array_filter( + scandir($this->overlayDirectory()) ?: [], + static fn(string $name): bool => MigratedLanguageFilePaths::isOverlayRevision($name) + )); + sort($revisions); + + return $revisions; + } + + private function current(): ?string + { + $file = MigratedLanguageFilePaths::overlayCurrentFile($this->overlayDirectory()); + + return is_file($file) ? trim((string) file_get_contents($file)) : null; + } + + public function testEveryNewRevisionIsServedAtOnceAndOnlyTheCurrentAndThePreviousOneStay(): void + { + $previous = null; + foreach (['Servus', 'Moin', 'Grüß Gott', 'Servus', 'Tach'] as $value) { + $this->sync(['greeting' => $value]); + + $current = $this->current(); + $this->assertNotNull($current); + $this->assertNotSame($previous, $current); + $this->assertSame($value, $this->served(), 'visible in the process that wrote it'); + $this->assertSame('Anders', $this->served('other'), 'the shipped values stay served'); + $expected = array_values(array_filter([$current, $previous])); + sort($expected); + $this->assertSame($expected, $this->revisions(), 'the current revision and the one served before it - nothing older'); + $previous = $current; + } + } + + public function testSyncingTheSameContentAgainWritesNothingNew(): void + { + $this->sync(['greeting' => 'Servus']); + $current = $this->current(); + $current_file = MigratedLanguageFilePaths::overlayCurrentFile($this->overlayDirectory()); + $inode = fileinode($current_file); + clearstatcache(); + + $this->sync(['greeting' => 'Servus']); + + $this->assertSame($current, $this->current()); + $this->assertSame([$current], $this->revisions()); + $this->assertSame($inode, fileinode($current_file), '`current` was not written again'); + } + + public function testGoingBackToTheContentOfTheKeptPreviousRevisionReusesIt(): void + { + $this->sync(['greeting' => 'Servus']); + $first = (string) $this->current(); + $this->sync(['greeting' => 'Moin']); + $second = (string) $this->current(); + + $this->sync(['greeting' => 'Servus']); + + $this->assertSame($first, $this->current()); + $this->assertSame('Servus', $this->served()); + $expected = [$first, $second]; + sort($expected); + $this->assertSame($expected, $this->revisions()); + } + + public function testADamagedRevisionIsNeverReusedAndNeverChangedInPlace(): void + { + $this->sync(['greeting' => 'Servus']); + $damaged = (string) $this->current(); + $this->sync(['greeting' => 'Moin']); + $kept = (string) $this->current(); + // a running process may have loaded that revision: it is not repaired, a new one is written + $mo = MigratedLanguageFilePaths::overlayMoFile( + MigratedLanguageFilePaths::overlayRevisionDirectory($this->overlayDirectory(), $damaged), + self::MODULE, + 'de' + ); + file_put_contents($mo, 'garbage'); + + $this->sync(['greeting' => 'Servus']); + + $current = (string) $this->current(); + $this->assertNotSame($damaged, $current); + $this->assertSame('Servus', $this->served()); + $this->assertSame( + ['greeting' => 'Servus'], + MigratedPoFixture::readMo(MigratedLanguageFilePaths::overlayMoFile( + MigratedLanguageFilePaths::overlayRevisionDirectory($this->overlayDirectory(), $current), + self::MODULE, + 'de' + )) + ); + $expected = [$current, $kept]; + sort($expected); + $this->assertSame($expected, $this->revisions(), 'the damaged one is gone, the previous one is kept'); + } + + public function testAnOverlayThatBecameEmptyServesTheShippedValuesAgainAndTheNextSyncRemovesItsRevisions(): void + { + $this->sync(['greeting' => 'Servus']); + $this->sync(['greeting' => 'Moin']); + $overlay_po = $this->overlayDirectory() . '/rvs_de.po'; + $this->assertFileExists($overlay_po); + + $this->sync(['greeting' => 'Hallo', 'other' => 'Anders']); + + $this->assertFileDoesNotExist($overlay_po); + $this->assertNull($this->current(), 'nothing is named any more, so nothing of the old revisions is served'); + $this->assertSame('Hallo', $this->served()); + $this->assertFileExists(MigratedLanguageFilePaths::overlayLockFile($this->overlayDirectory()), 'the lock file is kept'); + + $this->sync(['greeting' => 'Hallo', 'other' => 'Anders']); + + $this->assertSame([], $this->revisions()); + } + + public function testRevisionsWithoutAnOverlayAreRemovedByTheNextSyncOfShippedValues(): void + { + $this->sync(['greeting' => 'Servus']); + unlink($this->overlayDirectory() . '/rvs_de.po'); + unlink(MigratedLanguageFilePaths::overlayCurrentFile($this->overlayDirectory())); + $this->assertCount(1, $this->revisions(), 'precondition: what a crash or an old version leaves behind'); + + $this->sync(['greeting' => 'Hallo', 'other' => 'Anders']); + + $this->assertSame([], $this->revisions()); + $this->assertSame('Hallo', $this->served()); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncSymlinkTest.php b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncSymlinkTest.php new file mode 100644 index 000000000000..ed608c058f8d --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncSymlinkTest.php @@ -0,0 +1,287 @@ +/lang` and above) is exempt, being the administrator's configuration. + * + * Each scenario also proves the decoy the link points to stays untouched - a RuntimeException alone would miss a check- + * then-follow mutation. + */ +class MigratedLanguageFileSyncSymlinkTest extends TestCase +{ + private const string MODULE = 'stest'; + + private string $fixture_directory; + private string $client_data_dir; + private string $decoy_directory; + private LanguageFileDirectory $directory; + private LanguageFileDirectoryManager $manager; + + protected function setUp(): void + { + // never the build of the installation, see MigratedPoFixture::resetRuntime() + MigratedPoFixture::resetRuntime(); + parent::setUp(); + + if (!defined('ILIAS_ABSOLUTE_PATH')) { + define('ILIAS_ABSOLUTE_PATH', realpath(__DIR__ . '/../../../../../')); + } + + $this->fixture_directory = __DIR__ . '/tmp-symlink-fixtures-' . bin2hex(random_bytes(4)); + mkdir($this->fixture_directory, 0775, true); + $this->client_data_dir = sys_get_temp_dir() . '/ilias_mlfs_symlink_test_' . bin2hex(random_bytes(4)); + mkdir($this->client_data_dir, 0775, true); + $this->decoy_directory = sys_get_temp_dir() . '/ilias_mlfs_symlink_decoy_' . bin2hex(random_bytes(4)); + mkdir($this->decoy_directory, 0775, true); + + // an extra "sub" segment below the fixture directory, so an intermediate directory can be replaced by a symlink + // without touching the fixture/client data directories + $this->directory = MigratedPoFixture::directory( + self::MODULE, + 'components/ILIAS/Language/tests/ComponentTranslation/' . basename($this->fixture_directory) . '/sub/' + ); + $this->manager = new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), $this->directory); + } + + protected function tearDown(): void + { + MigratedPoFixture::removeDirectory($this->fixture_directory); + MigratedPoFixture::removeDirectory($this->client_data_dir); + MigratedPoFixture::removeDirectory($this->decoy_directory); + + parent::tearDown(); + } + + private function seedShipped(string $value = 'Hallo'): void + { + MigratedPoFixture::writePo( + $this->shippedPo(), + MigratedPoFixture::catalog(self::MODULE, ['greeting' => $value]) + ); + } + + private function shippedPo(): string + { + return $this->fixture_directory . '/sub/' . self::MODULE . '_de.po'; + } + + private function overlayBase(): string + { + return MigratedPoFixture::overlayBase($this->client_data_dir, $this->directory, 'de'); + } + + private function lockFile(): string + { + return MigratedPoFixture::overlayLock($this->overlayBase()); + } + + private function sync(array $entries = ['greeting' => 'Hallo']): void + { + MigratedLanguageFileSync::sync( + $this->manager, + ILIAS_ABSOLUTE_PATH, + 'de', + self::MODULE, + $entries, + $this->client_data_dir + ); + } + + /** + * @return list + */ + private function decoyListing(): array + { + return array_values(array_diff(scandir($this->decoy_directory) ?: [], ['.', '..'])); + } + + /** + * Mutation: assertNoSymbolicLinkBelowOverlayRoot() not being called (or not checking every + * intermediate component) for the `.po` path before it is written. + */ + public function testASymlinkedIntermediateDirectoryIsRejectedAndItsTargetIsLeftUntouched(): void + { + $this->seedShipped(); + mkdir(dirname(dirname($this->overlayBase())), 0775, true); + symlink($this->decoy_directory, dirname($this->overlayBase())); + + try { + // a local change: a shipped value alone writes nothing (delta overlay) + $this->sync(['greeting' => 'Servus']); + $this->fail('Expected a RuntimeException'); + } catch (RuntimeException $e) { + $this->assertStringContainsString('symbolic link', $e->getMessage()); + } + + $this->assertSame([], $this->decoyListing(), 'nothing may be written into the linked-to directory'); + $this->assertSame($this->decoy_directory, readlink(dirname($this->overlayBase())), 'the symlink itself must be left in place'); + } + + /** + * Mutation: the `assertNoSymbolicLinkBelowOverlayRoot($client_data_dir, $overlay_po)` call being + * removed - a `.po` path that is itself a symlink must not be replaced via that link. + */ + public function testASymlinkedOverlayPoIsRejectedAndItsTargetIsLeftUntouched(): void + { + $this->seedShipped(); + mkdir(dirname($this->overlayBase()), 0775, true); + $decoy = $this->decoy_directory . '/decoy.po'; + file_put_contents($decoy, 'DECOY'); + symlink($decoy, $this->overlayBase() . '.po'); + + try { + $this->sync(); + $this->fail('Expected a RuntimeException'); + } catch (RuntimeException $e) { + $this->assertStringContainsString('symbolic link', $e->getMessage()); + } + + $this->assertSame('DECOY', file_get_contents($decoy), 'the file the link points to must not be modified'); + $this->assertSame($decoy, readlink($this->overlayBase() . '.po'), 'the symlink itself must not be replaced'); + } + + /** + * Mutation: the `assertNoSymbolicLinkBelowOverlayRoot($client_data_dir, $overlay_mo)` call being + * removed - exercised with a missing `.po` (a fresh overlay) so this is specifically the `.mo` + * check, not the `.po` one, that rejects the write. + */ + public function testASymlinkedOverlayCurrentFileIsRejectedAndItsTargetIsLeftUntouched(): void + { + $this->seedShipped(); + mkdir(dirname($this->overlayBase()), 0775, true); + $decoy = $this->decoy_directory . '/decoy.mo'; + file_put_contents($decoy, 'DECOY'); + symlink($decoy, MigratedPoFixture::overlayCurrent($this->overlayBase())); + + try { + $this->sync(); + $this->fail('Expected a RuntimeException'); + } catch (RuntimeException $e) { + $this->assertStringContainsString('symbolic link', $e->getMessage()); + } + + $this->assertSame('DECOY', file_get_contents($decoy)); + $this->assertSame($decoy, readlink(MigratedPoFixture::overlayCurrent($this->overlayBase()))); + $this->assertFileDoesNotExist($this->overlayBase() . '.po', 'the .po must not have been written either'); + } + + /** + * A symlinked lock file is no RuntimeException from sync(): acquireLock() catches it and runs $callback WITHOUT a + * lock, like a lock file that cannot be opened. The symlink is never followed and the overlay write still succeeds. + * + * Mutation: acquireLock() calling fopen()/flock() on the lock path without checking it for a symlink first. + */ + public function testASymlinkedLockFileIsNeverFollowedAndTheOverlayIsStillWrittenUnlocked(): void + { + $this->seedShipped(); + mkdir(dirname($this->lockFile()), 0775, true); + $decoy = $this->decoy_directory . '/decoy.lock'; + file_put_contents($decoy, 'DECOY'); + symlink($decoy, $this->lockFile()); + + $this->sync(['greeting' => 'Servus']); + + $this->assertSame('DECOY', file_get_contents($decoy), 'the lock file link target must never be opened/locked'); + $this->assertSame($decoy, readlink($this->lockFile()), 'the symlink itself must not be replaced'); + $this->assertSame( + ['greeting' => 'Servus'], + MigratedPoFixture::readMo(MigratedPoFixture::overlayMo($this->overlayBase())), + 'the overlay write itself must still succeed even though no lock could be taken' + ); + } + + /** + * Mutation: removeOverlayFiles() unlinking `$base . '.po'` without first asserting it is not a + * symlink. + */ + public function testRemoveOverlayRejectsASymlinkedPoAndLeavesItsTargetAndTheMoUntouched(): void + { + $overlay_dir = dirname($this->overlayBase()); + mkdir($overlay_dir, 0775, true); + MigratedPoFixture::writeOverlayRevision($this->overlayBase(), MigratedPoFixture::catalog(self::MODULE, ['greeting' => 'Servus'])); + file_put_contents(MigratedPoFixture::overlayMo($this->overlayBase()), 'REAL MO'); + $decoy = $this->decoy_directory . '/decoy.po'; + file_put_contents($decoy, 'DECOY'); + symlink($decoy, $this->overlayBase() . '.po'); + + try { + MigratedLanguageFileSync::removeOverlay($this->manager, 'de', self::MODULE, $this->client_data_dir); + $this->fail('Expected a RuntimeException'); + } catch (RuntimeException $e) { + $this->assertStringContainsString('symbolic link', $e->getMessage()); + } + + $this->assertSame('DECOY', file_get_contents($decoy)); + $this->assertSame($decoy, readlink($this->overlayBase() . '.po'), 'the symlink must not have been unlinked'); + $this->assertSame('REAL MO', file_get_contents(MigratedPoFixture::overlayMo($this->overlayBase())), 'the .mo must not have been removed either'); + } + + /** + * The overlay root itself ("/lang") may be a symlink (e.g. a mounted data volume); only what is + * BELOW it is protected. + */ + public function testASymlinkOnTheOverlayRootItselfIsAllowed(): void + { + $this->seedShipped(); + $real_lang_dir = $this->client_data_dir . '-real-lang'; + mkdir($real_lang_dir, 0775, true); + symlink($real_lang_dir, $this->client_data_dir . '/lang'); + + $this->sync(['greeting' => 'Servus']); + + $this->assertSame( + ['greeting' => 'Servus'], + MigratedPoFixture::readMo(MigratedPoFixture::overlayMo($this->overlayBase())), + 'the write must go through the symlinked root into the real directory' + ); + + MigratedPoFixture::removeDirectory($real_lang_dir); + } + + /** + * Mutation: AtomicFileWriter::write() not enforcing $confine_to_directory - a target outside of + * it (not necessarily via a symlink; a plain path escape is enough) must be rejected before + * anything is written. + */ + public function testAtomicFileWriterRejectsATargetOutsideTheConfinedDirectory(): void + { + $outside = $this->decoy_directory . '/outside.po'; + + try { + AtomicFileWriter::write($outside, 'should not be written', $this->client_data_dir); + $this->fail('Expected a RuntimeException'); + } catch (RuntimeException $e) { + $this->assertStringContainsString('does not resolve to a path below', $e->getMessage()); + } + + $this->assertFileDoesNotExist($outside); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncTakenOverTest.php b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncTakenOverTest.php new file mode 100644 index 000000000000..0e2c3211705f --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncTakenOverTest.php @@ -0,0 +1,107 @@ +/lang/taken-over..json`. + */ +class MigratedLanguageFileSyncTakenOverTest extends MigratedLanguageFileSyncTestCase +{ + private function recordFile(string $lang_key = 'de'): string + { + return MigratedLanguageFilePaths::takenOverFile($this->client_data_dir, $lang_key); + } + + /** + * @return list + */ + private function recorded(string $lang_key = 'de'): array + { + return MigratedLanguageFileSync::modulesWithLocalChangesTakenOver($this->client_data_dir, $lang_key); + } + + public function testMarkingMergesSortsAndDeduplicatesPerLanguage(): void + { + MigratedLanguageFileSync::markLocalChangesTakenOver($this->client_data_dir, 'de', ['pilot', 'alpha']); + MigratedLanguageFileSync::markLocalChangesTakenOver($this->client_data_dir, 'de', ['pilot', 'beta']); + MigratedLanguageFileSync::markLocalChangesTakenOver($this->client_data_dir, 'fr', ['gamma']); + + $this->assertSame(['alpha', 'beta', 'pilot'], $this->recorded()); + $this->assertSame(['gamma'], $this->recorded('fr')); + $this->assertSame('["alpha","beta","pilot"]' . "\n", file_get_contents($this->recordFile())); + } + + /** The read-modify-write runs under `.locks/taken-over..lock`; without a usable lock directory it runs unlocked. */ + public function testMarkingTakesTheLockAndStillWorksWhereNoLockCanBeTaken(): void + { + MigratedLanguageFileSync::markLocalChangesTakenOver($this->client_data_dir, 'de', ['alpha']); + $this->assertFileExists(MigratedLanguageFilePaths::takenOverLockFile($this->client_data_dir, 'de')); + + $elsewhere = $this->client_data_dir . '/elsewhere'; + mkdir($elsewhere); + rename($this->client_data_dir . '/lang/.locks', $this->client_data_dir . '/lang/.locks-moved'); + symlink($elsewhere, $this->client_data_dir . '/lang/.locks'); + + MigratedLanguageFileSync::markLocalChangesTakenOver($this->client_data_dir, 'de', ['beta']); + + $this->assertSame(['alpha', 'beta'], $this->recorded()); + $this->assertSame([], glob($elsewhere . '/*'), 'no lock file was created through the link'); + } + + public function testNothingIsRecordedWithoutAClientDataDirectoryAndForAnInvalidLanguage(): void + { + $this->assertSame([], MigratedLanguageFileSync::modulesWithLocalChangesTakenOver(null, 'de')); + $this->assertSame([], MigratedLanguageFileSync::modulesWithLocalChangesTakenOver($this->client_data_dir, '../de')); + MigratedLanguageFileSync::forgetLocalChangesTakenOver(null, 'de'); + MigratedLanguageFileSync::forgetLocalChangesTakenOver($this->client_data_dir, '../de'); + + $this->expectException(\InvalidArgumentException::class); + MigratedLanguageFileSync::markLocalChangesTakenOver($this->client_data_dir, '../de', ['pilot']); + } + + public function testForgettingRemovesOnlyTheRecordOfThatLanguage(): void + { + MigratedLanguageFileSync::markLocalChangesTakenOver($this->client_data_dir, 'de', ['pilot']); + MigratedLanguageFileSync::markLocalChangesTakenOver($this->client_data_dir, 'fr', ['pilot']); + + MigratedLanguageFileSync::forgetLocalChangesTakenOver($this->client_data_dir, 'de'); + + $this->assertSame([], $this->recorded()); + $this->assertSame(['pilot'], $this->recorded('fr')); + } + + /** A symbolic link is neither followed nor removed. */ + public function testASymbolicLinkInPlaceOfTheRecordIsNeitherReadNorRemoved(): void + { + $target = $this->client_data_dir . '/elsewhere.json'; + file_put_contents($target, '["pilot"]'); + mkdir(dirname($this->recordFile()), 0775, true); + symlink($target, $this->recordFile()); + + $this->assertSame([], $this->recorded()); + MigratedLanguageFileSync::forgetLocalChangesTakenOver($this->client_data_dir, 'de'); + + $this->assertTrue(is_link($this->recordFile())); + $this->assertFileExists($target); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncTestCase.php b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncTestCase.php new file mode 100644 index 000000000000..cf4af282ec5c --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncTestCase.php @@ -0,0 +1,157 @@ +fixture_directory, never written by the class under test) and the OVERLAY `.po`/`.mo` below a throwaway + * client data directory ($this->client_data_dir). + */ +abstract class MigratedLanguageFileSyncTestCase extends TestCase +{ + protected const string MODULE = 'stest'; + + protected string $fixture_directory; + protected string $client_data_dir; + protected string $ilias_root; + protected LanguageFileDirectory $directory; + protected LanguageFileDirectoryManager $manager; + + protected function setUp(): void + { + // never the build of the installation, see MigratedPoFixture::resetRuntime() + MigratedPoFixture::resetRuntime(); + parent::setUp(); + + $this->ilias_root = (string) realpath(__DIR__ . '/../../../../../'); + + $this->fixture_directory = __DIR__ . '/tmp-sync-fixtures-' . bin2hex(random_bytes(4)); + mkdir($this->fixture_directory, 0775, true); + $this->client_data_dir = sys_get_temp_dir() . '/ilias_mlfs_test_' . bin2hex(random_bytes(4)); + mkdir($this->client_data_dir, 0775, true); + + $this->directory = MigratedPoFixture::directory( + self::MODULE, + 'components/ILIAS/Language/tests/ComponentTranslation/' . basename($this->fixture_directory) . '/' + ); + $this->manager = new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), $this->directory); + } + + protected function tearDown(): void + { + MigratedPoFixture::removeDirectory($this->fixture_directory); + MigratedPoFixture::removeDirectory($this->client_data_dir); + MigratedPoFixture::resetRuntime(); + + parent::tearDown(); + } + + /** + * @param array> $entries see MigratedPoFixture::catalog() + */ + protected function seedShipped(array $entries, string $lang_key = 'de', string $module = self::MODULE): void + { + MigratedPoFixture::writePo($this->shippedPo($lang_key, $module), MigratedPoFixture::catalog($module, $entries)); + } + + /** + * @param array> $entries see MigratedPoFixture::catalog() + */ + protected function seedOverlay(array $entries, string $lang_key = 'de'): void + { + MigratedPoFixture::writePair($this->overlayBase($lang_key), MigratedPoFixture::catalog(self::MODULE, $entries)); + } + + protected function shippedPo(string $lang_key = 'de', string $module = self::MODULE): string + { + return $this->fixture_directory . '/' . $module . '_' . $lang_key . '.po'; + } + + protected function overlayBase(string $lang_key = 'de'): string + { + return MigratedPoFixture::overlayBase($this->client_data_dir, $this->directory, $lang_key); + } + + protected function overlayPo(): TranslationCatalog + { + return MigratedPoFixture::readPo($this->overlayBase() . '.po'); + } + + /** + * @param array $entries + */ + protected function sync(array $entries, bool $refresh = false, ?string $client_data_dir = 'default'): void + { + MigratedLanguageFileSync::sync( + $this->manager, + $this->ilias_root, + 'de', + self::MODULE, + $entries, + $client_data_dir === 'default' ? $this->client_data_dir : $client_data_dir, + $refresh + ); + } + + /** + * @return list + */ + protected function overlayIdentifiers(): array + { + return array_map(static fn($entry): string => $entry->getId(), $this->overlayPo()->getEntries()); + } + + protected function overlayDirectory(): string + { + return dirname($this->overlayBase()); + } + + /** + * @param list $lang_keys + * @return list + */ + protected function findUnwritable(array $lang_keys = ['de'], ?string $client_data_dir = 'default', ?LanguageFileDirectoryManager $manager = null): array + { + return MigratedLanguageFileSync::findUnwritableOverlayDirectories( + $manager ?? $this->manager, + $this->ilias_root, + $lang_keys, + $client_data_dir === 'default' ? $this->client_data_dir : $client_data_dir + ); + } + + + /** + * @return array + */ + public static function refreshFlags(): array + { + return ['admin edit (refresh = false)' => [false], 'reconciling write (refresh = true)' => [true]]; + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncUnwritableTest.php b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncUnwritableTest.php new file mode 100644 index 000000000000..0e55d6c925a8 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/MigratedLanguageFileSyncUnwritableTest.php @@ -0,0 +1,163 @@ +seedShipped(['greeting' => 'Hallo']); + mkdir(dirname($this->overlayDirectory()), 0775, true); + file_put_contents($this->overlayDirectory(), 'not a directory'); + + $this->assertSame([$this->overlayDirectory()], $this->findUnwritable()); + } + + /** A file further up (where "/lang" is created) blocks the path just as well. */ + public function testAFileInPlaceOfAParentOfTheOverlayDirectoryIsReported(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + file_put_contents($this->client_data_dir . '/lang', 'not a directory'); + + $this->assertSame([$this->overlayDirectory()], $this->findUnwritable()); + } + + /** + * A dangling symlink does not "exist" for file_exists(), but mkdir() cannot create anything in its place (overlay + * directory or a parent). + */ + #[DataProvider('danglingSymlinkPositions')] + public function testADanglingSymlinkInTheOverlayPathIsReported(\Closure $link_path): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $link = $link_path($this); + if (!is_dir(dirname($link))) { + mkdir(dirname($link), 0775, true); + } + symlink($this->client_data_dir . '/does-not-exist', $link); + + $this->assertSame([$this->overlayDirectory()], $this->findUnwritable()); + } + + /** + * @return array> + */ + public static function danglingSymlinkPositions(): array + { + return [ + 'the overlay directory' => [static fn(self $test): string => $test->overlayDirectory()], + 'a parent ("lang")' => [static fn(self $test): string => $test->client_data_dir . '/lang'], + ]; + } + + /** A symlink to an existing writable directory is fine (e.g. a mounted data volume). */ + public function testASymlinkToAWritableDirectoryIsNotReported(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + mkdir($this->client_data_dir . '/elsewhere'); + symlink($this->client_data_dir . '/elsewhere', $this->client_data_dir . '/lang'); + + $this->assertSame([], $this->findUnwritable()); + } + + /** A missing directory is fine if the closest existing parent is writable: sync() creates it. */ + public function testAMissingButCreatableOverlayDirectoryIsNotReported(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + + $this->assertDirectoryDoesNotExist($this->client_data_dir . '/lang'); + $this->assertSame([], $this->findUnwritable()); + $this->assertDirectoryDoesNotExist($this->client_data_dir . '/lang', 'the check itself creates nothing'); + } + + public function testAMissingClientDataDirWithACreatableParentIsNotReported(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + + $this->assertSame([], $this->findUnwritable(['de'], $this->client_data_dir . '/not-yet-created')); + } + + public function testAnExistingWritableOverlayDirectoryIsNotReported(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + mkdir($this->overlayDirectory(), 0775, true); + + $this->assertSame([], $this->findUnwritable()); + } + + public function testWithoutClientDataDirNothingIsReported(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + file_put_contents($this->client_data_dir . '/lang', 'not a directory'); + + $this->assertSame([], $this->findUnwritable(['de'], null)); + } + + /** + * Only modules migrated for a given language count: without a shipped `.po` no overlay is written, so a blocked + * directory is irrelevant (as for modules without contributed directory and the main directory). + */ + public function testAModuleThatIsNotMigratedForTheLanguageIsIgnored(): void + { + $this->seedShipped(['greeting' => 'Hello'], 'en'); + file_put_contents($this->client_data_dir . '/lang', 'not a directory'); + + $this->assertSame([], $this->findUnwritable(['de'])); + $this->assertSame([$this->client_data_dir . '/lang/' . self::MODULE . '/en'], $this->findUnwritable(['de', 'en'])); + } + + /** + * Each module has an overlay directory per language (`lang//`); each blocked one is reported once. + */ + public function testEachUnwritableOverlayDirectoryIsReportedOnceAcrossLanguagesAndModules(): void + { + $second = MigratedPoFixture::directory('stwo', 'components/ILIAS/Language/tests/ComponentTranslation/' . basename($this->fixture_directory) . '/sub/'); + $manager = new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), $this->directory, $second); + $this->seedShipped(['greeting' => 'Hallo'], 'de'); + $this->seedShipped(['greeting' => 'Hello'], 'en'); + MigratedPoFixture::writePo( + $this->fixture_directory . '/sub/stwo_de.po', + MigratedPoFixture::catalog('stwo', ['x' => 'y']) + ); + file_put_contents($this->client_data_dir . '/lang', 'not a directory'); + + $this->assertSame( + [ + $this->client_data_dir . '/lang/' . self::MODULE . '/de', + $this->client_data_dir . '/lang/stwo/de', + $this->client_data_dir . '/lang/' . self::MODULE . '/en', + ], + $this->findUnwritable(['de', 'en', 'de'], 'default', $manager) + ); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/MigratedTranslationsTest.php b/components/ILIAS/Language/tests/ComponentTranslation/MigratedTranslationsTest.php new file mode 100644 index 000000000000..7b4a70d97104 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/MigratedTranslationsTest.php @@ -0,0 +1,667 @@ + the warnings the component logger received + */ + private array $warnings = []; + + protected function setUp(): void + { + MigratedPoFixture::resetRuntime(); + $this->root = sys_get_temp_dir() . '/ilias_migrated_translations_' . bin2hex(random_bytes(6)); + $this->client_data_dir = $this->root . '/client'; + mkdir($this->client_data_dir, 0775, true); + + $this->warnings = []; + $logger = $this->createStub(\ilLogger::class); + $logger->method('warning')->willReturnCallback(function (string $message): void { + $this->warnings[] = $message; + }); + $factory = $this->createStub(\ilLoggerFactory::class); + $factory->method('getComponentLogger')->willReturn($logger); + $GLOBALS['DIC'] = new Container(); + $GLOBALS['DIC']['ilLoggerFactory'] = static fn() => $factory; + } + + protected function tearDown(): void + { + MigratedPoFixture::removeDirectory($this->root); + MigratedPoFixture::resetRuntime(); + } + + /** + * Module "mtr" (de: greeting, same = its own identifier, a plural item; en: greeting, only_en) and + * module "mtz" (de: other), built. + */ + private function build(): void + { + $item = new TranslationEntry('mtr', 'item'); + $item->setPlural('items', ['Eintrag', 'Einträge']); + $de = MigratedPoFixture::catalog('mtr', ['greeting' => 'Hallo', 'same' => 'same']); + $de->setHeader('Plural-Forms', 'nplurals=2; plural=(n != 1);'); + $de->add($item); + MigratedPoFixture::writePo($this->root . '/mtr/mtr_de.po', $de); + MigratedPoFixture::writePo($this->root . '/mtr/mtr_en.po', MigratedPoFixture::catalog('mtr', ['greeting' => 'Hello', 'only_en' => 'Only'])); + MigratedPoFixture::writePo($this->root . '/mtz/mtz_de.po', MigratedPoFixture::catalog('mtz', ['other' => 'Anders'])); + + $manager = new LanguageFileDirectoryManager( + new CustomizingLanguageFileDirectory(), + MigratedPoFixture::directory('mtr', 'mtr/'), + MigratedPoFixture::directory('mtz', 'mtz/') + ); + $build = MigratedPoFixture::build($manager, $this->root)['build']; + $this->assertNotNull($build); + $this->build_directory = MigratedLanguageFilePaths::buildDirectory(MigratedPoFixture::artifactDirectory(), $build); + } + + /** + * @param array $entries + * @return string the revision directory + */ + private function writeOverlay(array $entries, string $module = 'mtr', string $lang_key = 'de'): string + { + $overlay_directory = MigratedLanguageFilePaths::overlayDirectory($this->client_data_dir, $module, $lang_key); + MigratedPoFixture::writeOverlayRevision($overlay_directory . '/' . $module . '_' . $lang_key, MigratedPoFixture::catalog($module, $entries)); + + return MigratedLanguageFilePaths::overlayRevisionDirectory( + $overlay_directory, + trim((string) file_get_contents(MigratedLanguageFilePaths::overlayCurrentFile($overlay_directory))) + ); + } + + private function text(string $key, string $module = 'mtr', string $lang_key = 'de'): ?string + { + return (new TranslationGettextRepository())->getText($module, $lang_key, $key, $this->client_data_dir); + } + + /** + * @return array|null + */ + private function keys(string $module = 'mtr', string $lang_key = 'de'): ?array + { + return (new TranslationGettextRepository())->getKeys($module, $lang_key, $this->client_data_dir); + } + + public function testServesTheBuildAndTellsTranslatedAsItselfFromNotTranslated(): void + { + $this->build(); + + $this->assertSame(['greeting', 'item', 'only_en', 'same'], array_keys($this->keys() ?? []), 'the identifiers of every language of the module'); + $this->assertSame('Hallo', $this->text('greeting')); + $this->assertSame('Hello', $this->text('greeting', 'mtr', 'en')); + $this->assertSame('same', $this->text('same'), 'a value equal to its identifier is a value (marker ilias-identity)'); + $this->assertNull($this->text('only_en'), 'listed, but not translated in this language'); + $this->assertNull($this->text('unknown')); + $this->assertSame([], $this->warnings, 'an untranslated key is no problem'); + } + + public function testAModuleOrLanguageThatWasNotBuiltIsNotMigrated(): void + { + $this->build(); + + $this->assertNull($this->keys('mtz', 'en')); + $this->assertNull($this->keys('mtr', 'fr')); + $this->assertNull($this->keys('nomodule', 'de')); + $this->assertNull($this->keys('../mtr', 'de'), 'a module name is no path'); + $this->assertNull($this->text('greeting', 'mtr', 'fr')); + $this->assertSame([], $this->warnings); + } + + public function testTheValueOfAPluralMessageIsItsLastFormAndPluralTextSelectsByQuantity(): void + { + $this->build(); + + $this->assertSame('Einträge', $this->text('item'), 'the default form of a plural message is the last one (see PluralForms)'); + $this->assertSame('Eintrag', (new TranslationGettextRepository())->getPluralText('mtr', 'de', 'item', 1, $this->client_data_dir)); + $this->assertSame('Einträge', (new TranslationGettextRepository())->getPluralText('mtr', 'de', 'item', 0, $this->client_data_dir)); + $this->assertNull((new TranslationGettextRepository())->getPluralText('mtr', 'de', 'greeting', 2, $this->client_data_dir), 'no plural message'); + $this->assertNull((new TranslationGettextRepository())->getPluralText('mtr', 'de', 'unknown', 2, $this->client_data_dir)); + } + + public function testTheOverlayWinsAndBringsItsOwnIdentifiers(): void + { + $this->build(); + $this->writeOverlay(['greeting' => 'Servus', 'extra' => 'Zusatz', 'item' => 'Datensatz']); + + $this->assertSame('Servus', $this->text('greeting')); + $this->assertSame('Zusatz', $this->text('extra')); + $this->assertSame('Hello', $this->text('greeting', 'mtr', 'en'), 'the overlay of another language is not involved'); + $this->assertSame('same', $this->text('same'), 'not in the overlay: the shipped value'); + $this->assertContains('extra', array_keys($this->keys() ?? [])); + $this->assertSame('Datensatz', $this->text('item')); + $this->assertNull( + (new TranslationGettextRepository())->getPluralText('mtr', 'de', 'item', 5, $this->client_data_dir), + 'a singular value in the overlay replaces the plural message' + ); + $this->assertSame([], $this->warnings); + } + + public function testAnOverlayValueEqualToItsIdentifierIsAValueNotAMissingTranslation(): void + { + $this->build(); + $this->writeOverlay(['greeting' => 'greeting']); + + $this->assertSame('greeting', $this->text('greeting'), 'not the shipped "Hallo", not null'); + } + + /** + * @return iterable + */ + public static function unreadableOverlays(): iterable + { + yield 'current names no valid revision' => [static function (string $revision_directory): void { + file_put_contents(dirname($revision_directory) . '/current', "not-a-revision\n"); + }]; + yield 'current names a revision that is gone' => [static function (string $revision_directory): void { + MigratedPoFixture::removeDirectory($revision_directory); + }]; + yield 'keys.json is not JSON' => [static function (string $revision_directory): void { + file_put_contents($revision_directory . '/keys.json', '{nope'); + }]; + yield 'keys.json is an object' => [static function (string $revision_directory): void { + file_put_contents($revision_directory . '/keys.json', '{"greeting":"extra"}'); + }]; + yield 'keys.json holds something that is no string' => [static function (string $revision_directory): void { + file_put_contents($revision_directory . '/keys.json', '["extra", 5]'); + }]; + yield 'the catalog is not readable' => [static function (string $revision_directory): void { + file_put_contents($revision_directory . '/messages/LC_MESSAGES/mtr.de.overlay.mo', 'garbage'); + }]; + } + + /** + * @param \Closure(string): void $damage + */ + #[DataProvider('unreadableOverlays')] + public function testAnOverlayThatCannotBeReadIsLoggedOnceAndTheShippedValuesAreServed(\Closure $damage): void + { + $this->build(); + $damage($this->writeOverlay(['greeting' => 'Servus', 'extra' => 'Zusatz'])); + + for ($i = 0; $i < 3; $i++) { + $this->assertSame('Hallo', $this->text('greeting')); + $this->assertNull($this->text('extra')); + } + + $this->assertArrayNotHasKey('extra', $this->keys() ?? []); + $this->assertCount(1, $this->warnings, 'once per request, not once per lookup'); + $this->assertStringContainsString('local changes are not served', $this->warnings[0]); + } + + /** + * @return iterable + */ + public static function symbolicLinkLevels(): iterable + { + yield 'lang/' => ['module']; + yield '' => ['lang']; + yield 'current' => ['current']; + yield 'current, dangling' => ['dangling']; + yield 'the revision directory' => ['revision']; + yield 'messages' => ['messages']; + yield 'LC_MESSAGES' => ['catalogs']; + yield 'the catalog' => ['mo']; + yield 'keys.json' => ['keys']; + } + + /** + * Like the write path, the read path follows no symlink below the overlay root: the files are readable through the + * link and still not served. + */ + #[DataProvider('symbolicLinkLevels')] + public function testAnOverlayWithASymbolicLinkAnywhereBelowTheOverlayRootIsNotServed(string $level): void + { + $this->build(); + $revision_directory = $this->writeOverlay(['greeting' => 'Servus', 'extra' => 'Zusatz']); + $overlay_directory = dirname($revision_directory); + $path = match ($level) { + 'module' => dirname($overlay_directory), + 'lang' => $overlay_directory, + 'current', 'dangling' => $overlay_directory . '/current', + 'revision' => $revision_directory, + 'messages' => $revision_directory . '/messages', + 'catalogs' => $revision_directory . '/' . NativeGettext::CATALOG_DIRECTORY, + 'mo' => MigratedLanguageFilePaths::overlayMoFile($revision_directory, 'mtr', 'de'), + 'keys' => $revision_directory . '/keys.json', + default => throw new \LogicException($level), + }; + if ($level === 'dangling') { + unlink($path); + symlink($this->root . '/does-not-exist', $path); + } else { + mkdir($this->root . '/away', 0775, true); + $target = $this->root . '/away/' . bin2hex(random_bytes(4)); + rename($path, $target); + symlink($target, $path); + } + + $this->assertSame('Hallo', $this->text('greeting')); + $this->assertNull($this->text('extra')); + $this->assertArrayNotHasKey('extra', $this->keys() ?? []); + $this->assertCount(1, $this->warnings); + $this->assertStringContainsString('symbolic link', $this->warnings[0]); + } + + public function testACurrentFileLargerThanARevisionNameIsNotServedAndOnlyItsStartIsRead(): void + { + $this->build(); + $revision_directory = $this->writeOverlay(['greeting' => 'Servus']); + $revision = basename($revision_directory); + $current = dirname($revision_directory) . '/current'; + // the revision name is no longer at the start, and the file is far larger than any name + file_put_contents($current, str_repeat('x', 200) . $revision . "\n" . str_repeat('y', 1_000_000)); + + $this->assertSame('Hallo', $this->text('greeting')); + $this->assertCount(1, $this->warnings); + $this->assertStringContainsString('names no valid revision', $this->warnings[0]); + } + + public function testOnlyTheStartOfACurrentFileIsRead(): void + { + $this->build(); + $revision_directory = $this->writeOverlay(['greeting' => 'Servus']); + $current = dirname($revision_directory) . '/current'; + // the revision name, then far more than a revision file ever holds + file_put_contents($current, basename($revision_directory) . str_repeat(' ', 200) . 'trailing'); + + $this->assertSame('Servus', $this->text('greeting')); + $this->assertSame([], $this->warnings); + } + + public function testAPluralMessageIsServedAgainAfterAForeignReset(): void + { + $this->build(); + $this->assertSame('Eintrag', (new TranslationGettextRepository())->getPluralText('mtr', 'de', 'item', 1, $this->client_data_dir), 'precondition'); + setlocale(LC_MESSAGES, 'C'); + + $this->assertSame('Einträge', (new TranslationGettextRepository())->getPluralText('mtr', 'de', 'item', 5, $this->client_data_dir)); + $this->assertSame([], $this->warnings); + } + + /** + * Native gettext losing its settings without being able to restore them: nothing is served, not even the identifier + * for a value equal to it (as the overlay does for a listed identifier; txt() shows "-key-"). + */ + public function testLostNativeGettextServesNothingNotEvenTheIdentifierForAnOverlayValue(): void + { + $this->build(); + $plural = MigratedPoFixture::catalog('mtr', ['greeting' => 'Servus', 'same' => 'same']); + $plural->setHeader('Plural-Forms', 'nplurals=2; plural=(n != 1);'); + $item = new TranslationEntry('mtr', 'item'); + $item->setPlural('items', ['Datensatz', 'Datensätze']); + $plural->add($item); + $overlay_directory = MigratedLanguageFilePaths::overlayDirectory($this->client_data_dir, 'mtr', 'de'); + MigratedPoFixture::writeOverlayRevision($overlay_directory . '/mtr_de', $plural); + $this->assertSame('Servus', $this->text('greeting'), 'precondition'); + $this->assertSame('same', $this->text('same'), 'precondition'); + $this->assertSame('Datensätze', (new TranslationGettextRepository())->getPluralText('mtr', 'de', 'item', 5, $this->client_data_dir), 'precondition'); + // another part of the request resets LC_MESSAGES, and the locale cannot be activated again + setlocale(LC_MESSAGES, 'C'); + MigratedPoFixture::removeDirectory(MigratedLanguageFilePaths::buildLocaleDirectory($this->build_directory) . '/' . NativeGettext::LOCALE_NAME); + + $this->assertNull($this->text('greeting'), 'overlay value'); + $this->assertNull($this->text('same'), 'overlay value equal to its identifier'); + $this->assertNull($this->text('other', 'mtz'), 'shipped value of a module read for the first time only now'); + $this->assertNull((new TranslationGettextRepository())->getPluralText('mtr', 'de', 'item', 5, $this->client_data_dir)); + + $problem = MigratedTranslations::getProblem($this->client_data_dir); + $this->assertNotNull($problem); + $this->assertTrue($problem['fatal']); + $this->assertStringContainsString('Native gettext is not available', $problem['message']); + $this->assertCount(1, $this->warnings); + } + + public function testNativeGettextThatIsActivatedAgainServesTheOverlayValueAfterAForeignReset(): void + { + $this->build(); + $this->writeOverlay(['greeting' => 'Servus', 'same' => 'same']); + $this->assertSame('Servus', $this->text('greeting'), 'precondition'); + setlocale(LC_MESSAGES, 'C'); + + $this->assertSame('Servus', $this->text('greeting')); + $this->assertSame('same', $this->text('same')); + $this->assertSame([], $this->warnings); + } + + public function testWithoutAClientDataDirOrAnOverlayTheShippedValuesAreServedWithoutAWarning(): void + { + $this->build(); + + $this->assertSame('Hallo', (new TranslationGettextRepository())->getText('mtr', 'de', 'greeting', null)); + $this->assertSame('Hallo', $this->text('greeting'), 'no overlay of this module and language: no current file'); + $this->assertSame([], $this->warnings); + } + + public function testANewRevisionIsServedAfterInvalidateAlsoWhenTheProcessReadTheEarlierOnes(): void + { + $this->build(); + + foreach (['Servus', 'Moin', 'Grüß Gott', 'Servus'] as $value) { + $this->writeOverlay(['greeting' => $value]); + (new TranslationGettextRepository())->invalidateModule('mtr', 'de'); + + $this->assertSame($value, $this->text('greeting')); + } + $this->assertSame([], $this->warnings); + } + + public function testForgetLanguageDropsOnlyThatLanguage(): void + { + $this->build(); + $this->writeOverlay(['greeting' => 'Servus']); + $this->assertSame('Servus', $this->text('greeting')); + $this->assertSame('Hello', $this->text('greeting', 'mtr', 'en')); + $this->writeOverlay(['greeting' => 'Moin']); + $this->writeOverlay(['greeting' => 'Cheers'], 'mtr', 'en'); + + (new TranslationGettextRepository())->invalidateLanguage('de'); + + $this->assertSame('Moin', $this->text('greeting')); + $this->assertSame('Hello', $this->text('greeting', 'mtr', 'en'), 'en was not forgotten (its overlay is not read again)'); + } + + public function testWithoutABuildNothingIsMigratedAndTheProblemSaysSo(): void + { + $this->assertNull($this->keys()); + $this->assertNull($this->text('greeting')); + + $problem = MigratedTranslations::getProblem($this->client_data_dir); + $this->assertNotNull($problem); + + $this->assertStringContainsString('There is no build', $problem['message']); + $this->assertTrue($problem['fatal']); + $this->assertCount(1, $this->warnings); + } + + public function testAHealthyBuildHasNoProblem(): void + { + $this->build(); + + $this->assertNull(MigratedTranslations::getProblem($this->client_data_dir)); + $this->assertSame([], $this->warnings); + } + + public function testNoBuildIsAFatalProblemWithoutAbsolutePaths(): void + { + $problem = MigratedTranslations::getProblem($this->client_data_dir); + $this->assertNotNull($problem); + + $this->assertTrue($problem['fatal']); + $this->assertStringContainsString('"artifacts/language/current.json"', $problem['message']); + $this->assertStringNotContainsString(sys_get_temp_dir(), $problem['message']); + } + + public function testAProblemOfOneModuleIsNotFatalAndHasNoAbsolutePaths(): void + { + $this->build(); + unlink(MigratedLanguageFilePaths::buildKeysFile($this->build_directory, 'mtr')); + MigratedTranslations::reset(); + + $problem = MigratedTranslations::getProblem($this->client_data_dir); + $this->assertNotNull($problem); + + $this->assertFalse($problem['fatal']); + $this->assertStringContainsString('"artifacts/language/' . basename($this->build_directory) . '/keys/mtr.php"', $problem['message']); + $this->assertStringNotContainsString(sys_get_temp_dir(), $problem['message']); + } + + public function testAFatalProblemIsReportedBeforeAnEarlierNonFatalOne(): void + { + $this->build(); + unlink(MigratedLanguageFilePaths::buildKeysFile($this->build_directory, 'mtr')); + file_put_contents(MigratedLanguageFilePaths::buildMoFile($this->build_directory, 'mtz', 'de'), 'garbage'); + MigratedTranslations::reset(); + $this->keys('mtr'); + $this->keys('mtz'); + + $problem = MigratedTranslations::getProblem($this->client_data_dir); + $this->assertNotNull($problem); + + $this->assertTrue($problem['fatal']); + $this->assertStringContainsString('mtz.de.mo', $problem['message']); + } + + public function testAnOverlayProblemNamesItsPathRelativeToTheClientDataDirectory(): void + { + $this->build(); + $revision_directory = $this->writeOverlay(['greeting' => 'Servus']); + file_put_contents($revision_directory . '/keys.json', '{nope'); + $this->keys(); + + $problem = MigratedTranslations::getProblem($this->client_data_dir); + $this->assertNotNull($problem); + + $this->assertFalse($problem['fatal']); + $this->assertStringContainsString('"/lang/mtr/de/' . basename($revision_directory) . '"', $problem['message']); + $this->assertStringNotContainsString($this->client_data_dir, $problem['message']); + } + + public function testGetProblemChecksTheFirstModuleOfTheBuildEvenIfNothingWasUsedYet(): void + { + $this->build(); + unlink(MigratedLanguageFilePaths::buildKeysFile($this->build_directory, 'mtr')); + MigratedTranslations::reset(); + + $problem = MigratedTranslations::getProblem($this->client_data_dir); + $this->assertNotNull($problem); + + $this->assertStringContainsString('identifiers of module "mtr" cannot be read', $problem['message']); + $this->assertFalse($problem['fatal'], 'concerns one module only'); + $this->assertStringNotContainsString(MigratedPoFixture::artifactDirectory(), $problem['message'], 'no full path in the message for the GUI'); + } + + public function testABuildWithoutTheIdentifiersOfAModuleServesNothingOfIt(): void + { + $this->build(); + unlink(MigratedLanguageFilePaths::buildKeysFile($this->build_directory, 'mtr')); + MigratedTranslations::reset(); + + $this->assertSame([], $this->keys(), 'migrated, but without any identifier'); + $this->assertNull($this->text('greeting')); + $this->assertCount(1, $this->warnings); + $this->assertSame('Anders', $this->text('other', 'mtz'), 'another module is not affected'); + } + + public function testTheSameProblemOfAnotherLanguageOfTheModuleIsNotLoggedAgain(): void + { + $this->build(); + unlink(MigratedLanguageFilePaths::buildKeysFile($this->build_directory, 'mtr')); + MigratedTranslations::reset(); + + $this->assertSame([], $this->keys('mtr', 'de')); + $this->assertSame([], $this->keys('mtr', 'en')); + + $this->assertCount(1, $this->warnings, 'one message per request'); + } + + public function testACatalogOfTheBuildThatCannotBeReadIsLoggedAndNothingOfItIsServed(): void + { + $this->build(); + // never read by this process (the build checks one catalog only), so it is read as it is now + file_put_contents(MigratedLanguageFilePaths::buildMoFile($this->build_directory, 'mtz', 'de'), 'garbage'); + + $this->assertSame(['other'], array_keys($this->keys('mtz') ?? []), 'its identifiers are known'); + $this->assertNull($this->text('other', 'mtz')); + $this->assertNull($this->text('other', 'mtz')); + + $this->assertCount(1, $this->warnings); + $this->assertStringContainsString('cannot read', $this->warnings[0]); + $this->assertSame('Hallo', $this->text('greeting'), 'another module is not affected'); + } + + public function testResetForgetsTheBuildSoANewOneIsServed(): void + { + $this->build(); + $this->assertSame('Hallo', $this->text('greeting')); + + MigratedPoFixture::writePo($this->root . '/mtr/mtr_de.po', MigratedPoFixture::catalog('mtr', ['greeting' => 'Guten Tag'])); + $manager = new LanguageFileDirectoryManager( + new CustomizingLanguageFileDirectory(), + MigratedPoFixture::directory('mtr', 'mtr/'), + MigratedPoFixture::directory('mtz', 'mtz/') + ); + MigratedPoFixture::build($manager, $this->root); + MigratedTranslations::reset(); + + $this->assertSame('Guten Tag', $this->text('greeting')); + } + + public function testAnOverlayIsServedOnceTheClientDataDirectoryBecomesKnown(): void + { + $this->build(); + $this->writeOverlay(['greeting' => 'Overlay']); + + $this->assertSame('Hallo', (new TranslationGettextRepository())->getText('mtr', 'de', 'greeting', null), 'Setup before the client data directory is known'); + $this->assertSame('Hallo', (new TranslationGettextRepository())->getText('mtr', 'de', 'greeting', null), 'still unknown on the next call'); + $this->assertSame('Overlay', $this->text('greeting')); + $this->assertSame([], $this->warnings); + } + + public function testTheOverlayIsCheckedOnlyOnceAfterTheClientDataDirectoryIsKnown(): void + { + $this->build(); + + $this->assertSame('Hallo', $this->text('greeting'), 'no overlay yet'); + $this->writeOverlay(['greeting' => 'Late']); + + $this->assertSame('Hallo', $this->text('greeting'), 'not looked at again without invalidate()'); + (new TranslationGettextRepository())->invalidateModule('mtr', 'de'); + $this->assertSame('Late', $this->text('greeting')); + } + + /** The state is static: what one instance read is dropped by the invalidation of another (ilLanguage creates its own instances). */ + public function testInvalidationThroughOneInstanceReachesTheOtherInstances(): void + { + $this->build(); + $reader = new TranslationGettextRepository(); + $invalidator = new TranslationGettextRepository(); + + $this->assertSame('Hallo', $reader->getText('mtr', 'de', 'greeting', $this->client_data_dir)); + $this->writeOverlay(['greeting' => 'Late']); + $this->assertSame('Hallo', $reader->getText('mtr', 'de', 'greeting', $this->client_data_dir), 'cached'); + + $invalidator->invalidateModule('mtr', 'de'); + $this->assertSame('Late', $reader->getText('mtr', 'de', 'greeting', $this->client_data_dir)); + + $this->writeOverlay(['greeting' => 'Later']); + $invalidator->invalidateLanguage('de'); + $this->assertSame('Later', $reader->getText('mtr', 'de', 'greeting', $this->client_data_dir)); + } + + public function testAModuleIsShippedIfItIsBuiltOrHasATemplateInTheComponents(): void + { + $this->assertFalse(MigratedTranslations::isShippedModule('mtr'), 'no build, no template'); + $this->assertTrue(MigratedTranslations::isShippedModule('tos'), 'without a build: template of the TermsOfService component'); + $this->build(); + MigratedTranslations::reset(); + + $this->assertTrue(MigratedTranslations::isShippedModule('mtr'), 'built'); + $this->assertFalse(MigratedTranslations::isShippedModule('tos'), 'with a build only its recorded contributions count'); + $this->assertFalse(MigratedTranslations::isShippedModule('some_plugin_module')); + } + + public function testWithABuildTheRecordedContributionsDecideEvenForAModuleWithoutAnyPo(): void + { + mkdir($this->root . '/mtq', 0775, true); + MigratedPoFixture::writePo($this->root . '/mtr/mtr_de.po', MigratedPoFixture::catalog('mtr', ['greeting' => 'Hallo'])); + MigratedPoFixture::build( + new LanguageFileDirectoryManager( + new CustomizingLanguageFileDirectory(), + MigratedPoFixture::directory('mtr', 'mtr/'), + MigratedPoFixture::directory('mtq', 'mtq/') + ), + $this->root + ); + + $this->assertTrue(MigratedTranslations::isShippedModule('mtq'), 'contributed, no .po, no template'); + $this->assertFalse(MigratedTranslations::isShippedModule('tos'), 'a template the build did not record'); + } + + /** + * @return array whether the build has any .po + */ + public static function listsNobodyCanRelyOn(): array + { + return ['a pointer without build' => [false], 'a pointer written before the list existed' => [true]]; + } + + #[DataProvider('listsNobodyCanRelyOn')] + public function testWithoutABuildOrAListOfContributionsTheShippedTemplatesDecide(bool $with_build): void + { + mkdir($this->root . '/mtr', 0775, true); + if ($with_build) { + $this->build(); + $pointer_file = MigratedLanguageFilePaths::buildPointerFile(MigratedPoFixture::artifactDirectory()); + $data = json_decode((string) file_get_contents($pointer_file), true, 512, JSON_THROW_ON_ERROR); + unset($data['shipped']); + file_put_contents($pointer_file, json_encode($data)); + } else { + MigratedPoFixture::build( + new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), MigratedPoFixture::directory('mtr', 'mtr/')), + $this->root + ); + } + MigratedTranslations::reset(); + + $this->assertTrue(MigratedTranslations::isShippedModule('tos'), 'template of the TermsOfService component'); + $this->assertFalse(MigratedTranslations::isShippedModule('some_plugin_module')); + $this->assertSame($with_build, MigratedTranslations::isShippedModule('mtr'), 'built, but in no template'); + } + + public function testShipsPoForNeedsATemplateADefaultNamedPoAndAValidLanguageKey(): void + { + $this->assertTrue(MigratedTranslations::shipsPoFor('tos', 'de')); + $this->assertFalse(MigratedTranslations::shipsPoFor('tos', 'xx'), 'no such .po'); + $this->assertFalse(MigratedTranslations::shipsPoFor('tos', '../de'), 'no path'); + $this->assertFalse(MigratedTranslations::shipsPoFor('some_plugin_module', 'de'), 'no template'); + } + + public function testReportMissingBuildIsFatalWithoutABuildAndSilentWithOne(): void + { + $this->build(); + $this->assertFalse(MigratedTranslations::reportMissingBuild()); + $this->assertSame([], $this->warnings); + + MigratedPoFixture::resetRuntime(); + $this->assertTrue(MigratedTranslations::reportMissingBuild()); + $this->assertCount(1, $this->warnings); + $this->assertStringContainsString('There is no build', implode("\n", $this->warnings)); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/NativeGettextTest.php b/components/ILIAS/Language/tests/ComponentTranslation/NativeGettextTest.php new file mode 100644 index 000000000000..4a0390427d43 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/NativeGettextTest.php @@ -0,0 +1,359 @@ +process_state = [ + 'language' => getenv('LANGUAGE'), + 'locpath' => getenv('LOCPATH'), + 'messages' => setlocale(LC_MESSAGES, '0'), + ]; + $this->root = sys_get_temp_dir() . '/ilias_native_gettext_' . bin2hex(random_bytes(6)); + mkdir($this->root, 0775, true); + + $catalog = MigratedPoFixture::catalog('ntg', ['greeting' => 'Hallo']); + $catalog->setHeader('Plural-Forms', 'nplurals=2; plural=(n != 1);'); + $item = new TranslationEntry('ntg', 'item'); + $item->setPlural('items', ['Eintrag', 'Einträge']); + $catalog->add($item); + MigratedPoFixture::writePo($this->root . '/ntg/ntg_de.po', $catalog); + $manager = new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), MigratedPoFixture::directory('ntg', 'ntg/')); + $build = MigratedPoFixture::build($manager, $this->root)['build']; + // the build checked itself through native gettext in this process, see ShippedLanguageFilesCompiledObjective + NativeGettext::restore(); + $this->assertNotNull($build); + $this->build_directory = MigratedLanguageFilePaths::buildDirectory(MigratedPoFixture::artifactDirectory(), $build); + $this->locale_directory = MigratedLanguageFilePaths::buildLocaleDirectory($this->build_directory); + } + + protected function tearDown(): void + { + NativeGettext::resetForTests(); + // whatever a test did to the process, the next one starts as this one did + putenv($this->process_state['language'] === false ? 'LANGUAGE' : 'LANGUAGE=' . $this->process_state['language']); + putenv($this->process_state['locpath'] === false ? 'LOCPATH' : 'LOCPATH=' . $this->process_state['locpath']); + if ($this->process_state['messages'] !== false) { + setlocale(LC_MESSAGES, $this->process_state['messages']); + } + MigratedPoFixture::removeDirectory($this->root); + MigratedPoFixture::resetRuntime(); + } + + private function activateBuild(): void + { + $this->assertTrue(NativeGettext::activate($this->locale_directory), (string) NativeGettext::getProblem()); + $this->assertTrue(NativeGettext::bind(self::DOMAIN, $this->build_directory)); + } + + /** + * @return iterable + */ + public static function previousProcessSettings(): iterable + { + yield 'nothing set before' => [false, false]; + yield 'LANGUAGE set before' => ['de:fr', false]; + yield 'LOCPATH set before' => [false, '/nonexistent/locpath']; + yield 'both set before' => ['en', '/nonexistent/locpath']; + } + + #[DataProvider('previousProcessSettings')] + public function testActivateServesTheBuildAndRestoreGivesTheProcessStateBack(string|false $language, string|false $locpath): void + { + putenv($language === false ? 'LANGUAGE' : 'LANGUAGE=' . $language); + putenv($locpath === false ? 'LOCPATH' : 'LOCPATH=' . $locpath); + $messages_before = setlocale(LC_MESSAGES, '0'); + + $this->activateBuild(); + + $this->assertTrue(NativeGettext::isActive()); + $this->assertSame(NativeGettext::LOCALE_NAME, setlocale(LC_MESSAGES, '0')); + $this->assertSame(NativeGettext::CATALOG_LANGUAGE, getenv('LANGUAGE')); + $this->assertSame($locpath, getenv('LOCPATH'), 'LOCPATH only lives for the setlocale() call (no system locale is found while it is set)'); + $this->assertSame('Hallo', NativeGettext::translate(self::DOMAIN, 'greeting')); + + NativeGettext::restore(); + + $this->assertFalse(NativeGettext::isActive()); + $this->assertSame($messages_before, setlocale(LC_MESSAGES, '0')); + $this->assertSame($language, getenv('LANGUAGE')); + $this->assertSame($locpath, getenv('LOCPATH')); + $this->assertSame('greeting', NativeGettext::translate(self::DOMAIN, 'greeting'), 'without the locale native gettext answers with the message id'); + } + + public function testRestoreLeavesASettingOtherCodeChangedSinceAsItIs(): void + { + $this->activateBuild(); + setlocale(LC_MESSAGES, 'C'); + putenv('LANGUAGE=fr'); + + NativeGettext::restore(); + + $this->assertSame('C', setlocale(LC_MESSAGES, '0')); + $this->assertSame('fr', getenv('LANGUAGE')); + } + + public function testRestoreWithoutActivationChangesNothing(): void + { + putenv('LANGUAGE=de'); + $messages = setlocale(LC_MESSAGES, '0'); + + NativeGettext::restore(); + + $this->assertSame('de', getenv('LANGUAGE')); + $this->assertSame($messages, setlocale(LC_MESSAGES, '0')); + } + + /** + * @return iterable + */ + public static function directoriesWithoutAUsableLocale(): iterable + { + yield 'no locale directory' => ['none']; + yield 'an empty locale directory' => ['empty']; + } + + #[DataProvider('directoriesWithoutAUsableLocale')] + public function testActivateFailsWithAProblemAndLeavesTheProcessAsItWas(string $kind): void + { + $directory = $this->root . '/locale-' . $kind; + mkdir($directory . ($kind === 'empty' ? '/' . NativeGettext::LOCALE_NAME : ''), 0775, true); + putenv('LANGUAGE=de'); + putenv('LOCPATH=/nonexistent/locpath'); + $messages = setlocale(LC_MESSAGES, '0'); + + $this->assertFalse(NativeGettext::activate($directory)); + + $this->assertStringContainsString(NativeGettext::LOCALE_NAME, (string) NativeGettext::getProblem()); + $this->assertFalse(NativeGettext::isActive()); + $this->assertSame($messages, setlocale(LC_MESSAGES, '0')); + $this->assertSame('de', getenv('LANGUAGE')); + $this->assertSame('/nonexistent/locpath', getenv('LOCPATH')); + } + + /** + * @return iterable + */ + public static function foreignChanges(): iterable + { + yield 'LC_MESSAGES set to C' => [static function (): void { + setlocale(LC_MESSAGES, 'C'); + }]; + yield 'LC_ALL set to C (what initLocale() does)' => [static function (): void { + setlocale(LC_ALL, 'C'); + }]; + yield 'LANGUAGE changed' => [static function (): void { + putenv('LANGUAGE=de'); + }]; + yield 'LANGUAGE removed' => [static function (): void { + putenv('LANGUAGE'); + }]; + } + + #[DataProvider('foreignChanges')] + public function testReactivateIfLostRepairsWhatOtherCodeChanged(\Closure $change): void + { + $this->activateBuild(); + $change(); + $this->assertFalse(NativeGettext::isActive(), 'precondition'); + $this->assertSame('greeting', NativeGettext::translate(self::DOMAIN, 'greeting'), 'precondition: nothing is translated now'); + + $this->assertTrue(NativeGettext::reactivateIfLost()); + + $this->assertTrue(NativeGettext::isActive()); + $this->assertSame('Hallo', NativeGettext::translate(self::DOMAIN, 'greeting')); + } + + public function testReactivateIfLostDoesNothingWithoutAnActivationOrWhileActive(): void + { + // setUp()'s build activated native gettext - restore() keeps that locale for a reactivation + NativeGettext::resetForTests(); + $this->assertFalse(NativeGettext::reactivateIfLost(), 'never activated'); + $this->assertNotSame(NativeGettext::LOCALE_NAME, setlocale(LC_MESSAGES, '0')); + + $this->activateBuild(); + $this->assertFalse(NativeGettext::reactivateIfLost(), 'still active'); + } + + public function testAfterRestoreReactivateIfLostActivatesTheLocaleAgain(): void + { + $this->activateBuild(); + NativeGettext::restore(); + $this->assertFalse(NativeGettext::isActive(), 'precondition'); + + $this->assertTrue(NativeGettext::reactivateIfLost()); + $this->assertSame('Hallo', NativeGettext::translate(self::DOMAIN, 'greeting')); + } + + public function testRestoreChangesNothingInAThreadSafePhp(): void + { + $this->activateBuild(); + NativeGettext::useThreadSafeForTests(true); + + NativeGettext::restore(); + + $this->assertTrue(NativeGettext::isThreadSafe()); + $this->assertTrue(NativeGettext::isActive(), 'other threads may be using the settings'); + } + + /** + * In a thread-safe PHP restore() does nothing, but another thread may reset what activate() set; the lookup must + * repair that. + */ + #[DataProvider('foreignChanges')] + public function testReactivateIfLostRepairsAForeignResetInAThreadSafePhpToo(\Closure $change): void + { + $this->activateBuild(); + NativeGettext::useThreadSafeForTests(true); + NativeGettext::restore(); + $this->assertTrue(NativeGettext::isActive(), 'precondition: nothing was taken back'); + $change(); + $this->assertFalse(NativeGettext::isActive(), 'precondition'); + + $this->assertTrue(NativeGettext::reactivateIfLost()); + + $this->assertSame('Hallo', NativeGettext::translate(self::DOMAIN, 'greeting')); + } + + public function testReactivateIfLostFailsWithAProblemWhenTheLocaleIsGone(): void + { + $this->activateBuild(); + setlocale(LC_MESSAGES, 'C'); + MigratedPoFixture::removeDirectory($this->locale_directory . '/' . NativeGettext::LOCALE_NAME); + + $this->assertFalse(NativeGettext::reactivateIfLost()); + + $this->assertStringContainsString('is missing', (string) NativeGettext::getProblem()); + $this->assertFalse(NativeGettext::isActive()); + } + + /** + * @return iterable + */ + public static function catalogs(): iterable + { + yield 'the catalog of the build' => ['build', true]; + yield 'garbage instead of a catalog' => ['garbage', false]; + yield 'a catalog without header (not one of ours)' => ['no-header', false]; + yield 'a domain without file' => ['missing', false]; + } + + #[DataProvider('catalogs')] + public function testIsLoadedTellsAReadableCatalogOfOurOwnByItsHeader(string $kind, bool $expected): void + { + $this->activateBuild(); + $directory = $this->build_directory; + $domain = self::DOMAIN; + if ($kind !== 'build') { + $domain = 'other.' . $kind; + $directory = $this->root . '/catalogs-' . $kind; + $file = $directory . '/' . NativeGettext::CATALOG_DIRECTORY . '/' . $domain . '.mo'; + mkdir(dirname($file), 0775, true); + if ($kind === 'garbage') { + file_put_contents($file, "this is no .mo file\n"); + } elseif ($kind === 'no-header') { + $catalog = new TranslationCatalog(); + $entry = new TranslationEntry(null, 'greeting'); + $entry->translate('Hallo'); + $catalog->add($entry); + file_put_contents($file, $catalog->toMoString()); + } + } + $this->assertTrue(NativeGettext::bind($domain, $directory)); + + $this->assertSame($expected, NativeGettext::isLoaded($domain)); + } + + public function testBindRefusesADirectoryThatDoesNotExist(): void + { + $this->assertFalse(NativeGettext::bind('ntg.xx', $this->root . '/does-not-exist')); + } + + /** + * @return iterable + */ + public static function messageIdsThatCannotBeLookedUp(): iterable + { + yield 'empty (would answer with the header)' => ['']; + yield 'longer than PHP accepts' => [str_repeat('x', 4097)]; + yield 'unknown' => ['no_such_key']; + } + + #[DataProvider('messageIdsThatCannotBeLookedUp')] + public function testTranslateAnswersTheMessageIdItself(string $message_id): void + { + $this->activateBuild(); + + $this->assertSame($message_id, NativeGettext::translate(self::DOMAIN, $message_id)); + $this->assertSame($message_id, NativeGettext::translatePlural(self::DOMAIN, $message_id, 2)); + } + + /** + * @return iterable + */ + public static function quantities(): iterable + { + yield 'one' => [1, 'Eintrag']; + yield 'zero' => [0, 'Einträge']; + yield 'minus one counts like one' => [-1, 'Eintrag']; + yield 'minus five counts like five' => [-5, 'Einträge']; + yield 'the largest integer' => [PHP_INT_MAX, 'Einträge']; + yield 'the smallest integer (abs() would overflow)' => [PHP_INT_MIN, 'Einträge']; + } + + #[DataProvider('quantities')] + public function testTranslatePluralSelectsTheFormOfTheAbsoluteQuantity(int $n, string $expected): void + { + $this->activateBuild(); + + $this->assertSame( + $expected, + NativeGettext::translatePlural(self::DOMAIN, ShippedTranslations::PLURAL_CONTEXT . "\x04item", $n) + ); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/OverlayDirectoryOwnershipTest.php b/components/ILIAS/Language/tests/ComponentTranslation/OverlayDirectoryOwnershipTest.php new file mode 100644 index 000000000000..0cfb68f4a8b5 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/OverlayDirectoryOwnershipTest.php @@ -0,0 +1,252 @@ +markTestSkipped('Requires the POSIX extension (posix_getpwuid()/posix_getgrgid()).'); + } + + $this->fixture_directory = __DIR__ . '/tmp-ownership-fixtures-' . bin2hex(random_bytes(4)); + mkdir($this->fixture_directory, 0775, true); + $this->client_data_dir = sys_get_temp_dir() . '/ilias_mlfs_ownership_test_' . bin2hex(random_bytes(4)); + mkdir($this->client_data_dir, 0775, true); + + $this->directory = MigratedPoFixture::directory( + self::MODULE, + 'components/ILIAS/Language/tests/ComponentTranslation/' . basename($this->fixture_directory) . '/' + ); + $this->manager = new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), $this->directory); + MigratedPoFixture::writePo( + $this->fixture_directory . '/' . self::MODULE . '_de.po', + MigratedPoFixture::catalog(self::MODULE, ['greeting' => 'Hallo']) + ); + } + + protected function tearDown(): void + { + if (is_dir($this->overlayDirectory())) { + chmod($this->overlayDirectory(), 0775); + } + MigratedPoFixture::removeDirectory($this->fixture_directory); + MigratedPoFixture::removeDirectory($this->client_data_dir); + + parent::tearDown(); + } + + private function overlayDirectory(): string + { + return dirname(MigratedPoFixture::overlayBase($this->client_data_dir, $this->directory, 'de')); + } + + /** + * @return list + */ + private function findUnwritable(?int $for_user_id): array + { + return MigratedLanguageFileSync::findUnwritableOverlayDirectories( + $this->manager, + ILIAS_ABSOLUTE_PATH, + ['de'], + $this->client_data_dir, + $for_user_id + ); + } + + /** + * Only the leaf overlay directory gets $mode; parents stay 0775, since a restrictive intermediate mode would break + * the test process's own traversal. + */ + private function seedOverlayDirectory(int $mode): void + { + $overlay_directory = $this->overlayDirectory(); + if (!is_dir(dirname($overlay_directory))) { + mkdir(dirname($overlay_directory), 0775, true); + } + if (!is_dir($overlay_directory)) { + mkdir($overlay_directory, 0775); + } + chmod($overlay_directory, $mode); // avoid mkdir()'s own mode being masked by umask + clearstatcache(true, $overlay_directory); + } + + private function assertReported(int $mode, int $for_user_id, string $message): void + { + $this->seedOverlayDirectory($mode); + + $this->assertSame([$this->overlayDirectory()], $this->findUnwritable($for_user_id), $message); + } + + private function assertNotReported(int $mode, int $for_user_id, string $message): void + { + $this->seedOverlayDirectory($mode); + + $this->assertSame([], $this->findUnwritable($for_user_id), $message); + } + + /** + * Mutation: the `$for_user_id === 0` short-circuit being removed - root must be considered able + * to write regardless of mode (0000: nobody else could). + */ + public function testRootMayAlwaysWriteRegardlessOfMode(): void + { + $this->assertNotReported(0000, 0, 'root (uid 0) must always be able to create/replace files'); + } + + /** + * Mutation: the owner branch using the wrong mask (e.g. read instead of write+search, or a + * group/other mask) - the directory's own owner needs the OWNER write+execute bits, group and + * other bits are irrelevant to them. + */ + public function testTheOwnerNeedsTheOwnerWriteAndSearchBitsRegardlessOfGroupOrOtherBits(): void + { + if (posix_getuid() === 0) { + $this->markTestSkipped( + 'The current process is root, so its own uid would only hit the for_user_id===0 short-circuit ' + . '(see testRootMayAlwaysWriteRegardlessOfMode()) instead of the owner branch under test; ' + . 'testAnArbitraryChownedOwnerNeedsTheOwnerWriteAndSearchBits() covers the owner branch as root.' + ); + } + // the directory is created by this process, so its owner is the current user, as fileowner() would report + $owner = posix_getuid(); + + $this->assertReported( + 0577, // owner: r-x (no write), group+other: rwx - irrelevant, the owner still can't write + $owner, + 'the owner lacking the write bit must be reported even though group/other have it' + ); + $this->assertNotReported( + 0700, // owner: rwx, group+other: nothing + $owner, + 'the owner having the write+search bits must be enough on its own' + ); + } + + /** + * As above, with a directory chown()ed to a non-current uid - proves $stat['uid'] is evaluated against + * $for_user_id, not the process uid. Only possible as root. + */ + public function testAnArbitraryChownedOwnerNeedsTheOwnerWriteAndSearchBits(): void + { + if (!function_exists('posix_geteuid') || posix_geteuid() !== 0) { + $this->markTestSkipped('Requires root to chown() the overlay directory to an arbitrary owner.'); + } + $foreign_owner = 33; // www-data, present on both the reference host and the ILIAS container + $this->seedOverlayDirectory(0555); + chown($this->overlayDirectory(), $foreign_owner); + clearstatcache(true, $this->overlayDirectory()); + + $this->assertSame( + [$this->overlayDirectory()], + $this->findUnwritable($foreign_owner), + 'the chown()ed owner lacking the write bit must be reported' + ); + + chmod($this->overlayDirectory(), 0775); + clearstatcache(true, $this->overlayDirectory()); + + $this->assertSame( + [], + $this->findUnwritable($foreign_owner), + 'the chown()ed owner having the write+search bits must not be reported' + ); + } + + /** + * Mutation: the "other" branch being skipped, or using the owner/group mask instead - a uid that + * is neither the owner nor in its group is governed by the OTHER bits alone, however generous + * the owner/group bits are. + */ + public function testAForeignUidNeedsTheOtherWriteAndSearchBitsEvenWhenOwnerAndGroupHaveThem(): void + { + $foreign_uid = 1; // "daemon", present on both the reference host and the ILIAS container + + $this->assertReported( + 0775, // owner rwx, group rwx, other r-x (no write) - a stranger still can't write + $foreign_uid, + 'other lacking the write bit must be reported even though owner/group have it' + ); + $this->assertNotReported( + 0777, // other now has rwx as well + $foreign_uid, + 'other having the write+search bits must be enough for a stranger' + ); + } + + /** + * Group branch: a uid that is not the owner but shares the directory's group (chgrp()'d to $for_user_id's primary + * gid) is governed by the GROUP write+search bits. Only possible as root. + */ + public function testAGroupMemberNeedsTheGroupWriteAndSearchBitsRegardlessOfOwnerOrOtherBits(): void + { + if (!function_exists('posix_geteuid') || posix_geteuid() !== 0) { + $this->markTestSkipped('Requires root to chown()/chgrp() the overlay directory to an arbitrary owner/group.'); + } + $group_member_uid = 33; // www-data, whose own primary gid (33) is also 33 on both the + // reference host and the ILIAS container - see posix_getpwuid(33) above. + $this->seedOverlayDirectory(0750); // owner: rwx, group: r-x (no write) - not enough + chown($this->overlayDirectory(), 0); + chgrp($this->overlayDirectory(), 33); + clearstatcache(true, $this->overlayDirectory()); + + $this->assertSame( + [$this->overlayDirectory()], + $this->findUnwritable($group_member_uid), + 'the group lacking the write bit must be reported even though the (different) owner has it' + ); + + chmod($this->overlayDirectory(), 0770); // group: rwx - now enough + clearstatcache(true, $this->overlayDirectory()); + + $this->assertSame( + [], + $this->findUnwritable($group_member_uid), + 'the group having the write+search bits must be enough for a group member who is not the owner' + ); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/PlainLogTextTest.php b/components/ILIAS/Language/tests/ComponentTranslation/PlainLogTextTest.php new file mode 100644 index 000000000000..463e846bcea3 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/PlainLogTextTest.php @@ -0,0 +1,90 @@ +assertSame('Hallo Welt, äöü', PlainLogText::of('Hallo Welt, äöü')); + } + + public function testOfReplacesAnAnsiEscapeSequence(): void + { + $result = PlainLogText::of("bad\x1bkey"); + + $this->assertStringNotContainsString("\x1b", $result); + $this->assertSame('bad?key', $result); + } + + public function testOfReplacesABidirectionalOverrideCharacter(): void + { + // U+202E RIGHT-TO-LEFT OVERRIDE - a format character (\p{Cf}), not a C0 control + $result = PlainLogText::of("bad\u{202E}key"); + + $this->assertStringNotContainsString("\u{202E}", $result); + $this->assertSame('bad?key', $result); + } + + public function testOfReplacesEveryOccurrenceNotJustTheFirst(): void + { + $this->assertSame('a?b?c', PlainLogText::of("a\x01b\x02c")); + } + + public function testKeyListJoinsUpToTheLimitWithoutTruncationMarker(): void + { + $keys = array_map(static fn(int $i): string => 'key' . $i, range(1, PlainLogText::MAX_LISTED_KEYS)); + + $result = PlainLogText::keyList($keys); + + $this->assertSame(implode(', ', $keys), $result); + $this->assertStringNotContainsString('…', $result); + } + + /** One key over the limit: the boundary where truncation starts. */ + public function testKeyListTruncatesAtOneOverTheLimit(): void + { + $keys = array_map(static fn(int $i): string => 'key' . $i, range(1, PlainLogText::MAX_LISTED_KEYS + 1)); + $expected_listed = implode(', ', array_slice($keys, 0, PlainLogText::MAX_LISTED_KEYS)); + + $result = PlainLogText::keyList($keys); + + $this->assertSame($expected_listed . ' … (+1)', $result); + } + + public function testKeyListReportsTheExactCountLeftOut(): void + { + $keys = array_map(static fn(int $i): string => 'key' . $i, range(1, PlainLogText::MAX_LISTED_KEYS + 5)); + + $this->assertStringContainsString('… (+5)', PlainLogText::keyList($keys)); + } + + public function testKeyListWithNoKeysIsAnEmptyString(): void + { + $this->assertSame('', PlainLogText::keyList([])); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/PluralFormKeyTest.php b/components/ILIAS/Language/tests/ComponentTranslation/PluralFormKeyTest.php new file mode 100644 index 000000000000..f654102ce010 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/PluralFormKeyTest.php @@ -0,0 +1,91 @@ + [
]" shape of admin GUI rows and local changes of a plural message. + * of()/parse() must round-trip, and parse() must reject lookalikes (a legacy identifier ending in "[...]"). + */ +class PluralFormKeyTest extends TestCase +{ + public function testOfFormatsTheIdentifierAndForm(): void + { + $this->assertSame('poll_population [0]', PluralFormKey::of('poll_population', 0)); + $this->assertSame('poll_population [1]', PluralFormKey::of('poll_population', 1)); + } + + #[DataProvider('roundTripKeys')] + public function testOfAndParseRoundTrip(string $identifier, int $form): void + { + $this->assertSame([$identifier, $form], PluralFormKey::parse(PluralFormKey::of($identifier, $form))); + } + + /** + * @return array + */ + public static function roundTripKeys(): array + { + return [ + 'simple' => ['poll_population', 0], + 'two digit form' => ['poll_population', 10], + 'identifier containing brackets' => ['weird [legacy]', 1], + 'identifier containing a space' => ['poll population', 1], + ]; + } + + #[DataProvider('nonFormKeys')] + public function testParseReturnsNullForAnythingNotShapedLikeOf(string $key): void + { + $this->assertNull(PluralFormKey::parse($key)); + } + + /** + * @return array + */ + public static function nonFormKeys(): array + { + return [ + 'plain identifier' => ['poll_population'], + 'no space before bracket' => ['poll_population[0]'], + 'no closing bracket' => ['poll_population [0'], + 'non-numeric form' => ['poll_population [x]'], + 'leading zero form' => ['poll_population [01]'], + 'negative form' => ['poll_population [-1]'], + 'empty identifier' => [' [0]'], + 'empty string' => [''], + 'trailing characters after bracket' => ['poll_population [0] extra'], + ]; + } + + public function testParseAcceptsTheHighestSupportedTwoDigitForm(): void + { + $this->assertSame(['id', 99], PluralFormKey::parse('id [99]')); + } + + public function testParseRejectsAThreeDigitForm(): void + { + $this->assertNull(PluralFormKey::parse('id [100]')); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/PluralFormsShippedRulesTest.php b/components/ILIAS/Language/tests/ComponentTranslation/PluralFormsShippedRulesTest.php new file mode 100644 index 000000000000..adccbffe3290 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/PluralFormsShippedRulesTest.php @@ -0,0 +1,134 @@ + lang key => header + */ + private static function shippedHeaders(): array + { + $data = json_decode((string) file_get_contents(self::PLURALS_JSON), true, 512, JSON_THROW_ON_ERROR); + + return $data['plural_forms']; + } + + /** + * @return array lang key => CLDR category index of n (order of the + * categories as in the header: zero, one, two, few, many, other where present) + */ + private static function oracles(): array + { + $one_other = static fn(int $n): int => $n === 1 ? 0 : 1; + $zero = static fn(int $n): int => 0; + $many_million = static fn(int $n): int => $n !== 0 && $n % 1000000 === 0 ? 1 : 2; + $east_slavic = static fn(int $n): int => $n % 10 === 1 && $n % 100 !== 11 + ? 0 + : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 12 || $n % 100 > 14) ? 1 : 2); + $cs_sk = static fn(int $n): int => $n === 1 ? 0 : ($n >= 2 && $n <= 4 ? 1 : 2); + + return [ + 'ar' => static fn(int $n): int => match (true) { + $n === 0 => 0, + $n === 1 => 1, + $n === 2 => 2, + $n % 100 >= 3 && $n % 100 <= 10 => 3, + $n % 100 >= 11 => 4, + default => 5, + }, + 'bg' => $one_other, 'da' => $one_other, 'de' => $one_other, 'el' => $one_other, + 'en' => $one_other, 'et' => $one_other, 'hu' => $one_other, 'ka' => $one_other, + 'nl' => $one_other, 'sq' => $one_other, 'sv' => $one_other, 'tr' => $one_other, + 'fa' => static fn(int $n): int => $n <= 1 ? 0 : 1, + 'ja' => $zero, 'vi' => $zero, 'zh' => $zero, + 'cs' => $cs_sk, 'sk' => $cs_sk, + 'es' => static fn(int $n): int => $n === 1 ? 0 : $many_million($n), + 'it' => static fn(int $n): int => $n === 1 ? 0 : $many_million($n), + 'fr' => static fn(int $n): int => $n <= 1 ? 0 : $many_million($n), + 'pt' => static fn(int $n): int => $n <= 1 ? 0 : $many_million($n), + 'hr' => $east_slavic, 'ru' => $east_slavic, 'sr' => $east_slavic, 'uk' => $east_slavic, + 'pl' => static fn(int $n): int => $n === 1 + ? 0 + : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 12 || $n % 100 > 14) ? 1 : 2), + 'lt' => static fn(int $n): int => $n % 10 === 1 && ($n % 100 < 11 || $n % 100 > 19) + ? 0 + : ($n % 10 >= 2 && ($n % 100 < 11 || $n % 100 > 19) ? 1 : 2), + 'ro' => static fn(int $n): int => $n === 1 + ? 0 + : ($n === 0 || ($n % 100 >= 1 && $n % 100 <= 19) ? 1 : 2), + 'sl' => static fn(int $n): int => match (true) { + $n % 100 === 1 => 0, + $n % 100 === 2 => 1, + $n % 100 === 3, $n % 100 === 4 => 2, + default => 3, + }, + ]; + } + + /** + * @return array + */ + public static function languages(): array + { + $rows = []; + foreach (self::shippedHeaders() as $lang => $header) { + $rows[$lang] = [$lang, $header]; + } + + return $rows; + } + + public function testEveryShippedLanguageHasAnOracleAndViceVersa(): void + { + $this->assertEqualsCanonicalizing( + array_keys(self::shippedHeaders()), + array_keys(self::oracles()), + 'plurals.json and the oracles of this test must list the same languages' + ); + } + + #[DataProvider('languages')] + public function testShippedHeaderSelectsTheCldrCategoryForEveryInteger(string $lang, string $header): void + { + $forms = PluralForms::fromHeader($header); + $oracle = self::oracles()[$lang]; + + $samples = [...range(0, 2000), 10000, 100000, 999999, 1000000, 1000001, 2000000, 2147483647]; + foreach ($samples as $n) { + $this->assertSame($oracle($n), $forms->formIndexFor($n), sprintf('%s, n = %d', $lang, $n)); + } + // header and the largest index used agree, so no form of the .po is never selected + $used = array_unique(array_map($oracle, $samples)); + $this->assertSame(max($used) + 1, $forms->getCount(), $lang); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/PluralFormsTest.php b/components/ILIAS/Language/tests/ComponentTranslation/PluralFormsTest.php new file mode 100644 index 000000000000..8d7eafb24095 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/PluralFormsTest.php @@ -0,0 +1,472 @@ + $expected n => form index + */ + #[DataProvider('wellKnownHeaders')] + public function testFormIndexForMatchesTheKnownRuleOfTheLanguage(string $header, int $count, array $expected): void + { + $forms = PluralForms::fromHeader($header); + + $this->assertSame($count, $forms->getCount()); + foreach ($expected as $n => $index) { + $this->assertSame($index, $forms->formIndexFor($n), sprintf('n = %d', $n)); + } + } + + /** + * @return array}> + */ + public static function wellKnownHeaders(): array + { + return [ + 'Germanic (en/de)' => [ + 'nplurals=2; plural=(n != 1);', + 2, + [0 => 1, 1 => 0, 2 => 1, 100 => 1], + ], + 'French' => [ + 'nplurals=2; plural=(n > 1);', + 2, + [0 => 0, 1 => 0, 2 => 1, 100 => 1], + ], + 'single form (ja)' => [ + 'nplurals=1; plural=0;', + 1, + [0 => 0, 1 => 0, 2 => 0, 100 => 0], + ], + 'Russian' => [ + 'nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);', + 3, + [1 => 0, 21 => 0, 2 => 1, 3 => 1, 4 => 1, 22 => 1, 5 => 2, 11 => 2, 100 => 2], + ], + 'Polish' => [ + 'nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);', + 3, + [1 => 0, 2 => 1, 5 => 2, 12 => 2, 22 => 1], + ], + 'Czech' => [ + 'nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);', + 3, + [1 => 0, 2 => 1, 4 => 1, 5 => 2, 0 => 2], + ], + 'Arabic' => [ + 'nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);', + 6, + [0 => 0, 1 => 1, 2 => 2, 3 => 3, 10 => 3, 11 => 4, 99 => 4, 100 => 5, 101 => 5], + ], + ]; + } + + /** + * "==" binds tighter than "?:", and "?:" is right-associative: "a ? b : c ? d : e" reads as + * "a ? b : (c ? d : e)" - a left-associative (or wrong-precedence) parser would reject the header + * outright (the sampled range includes n's failing for the wrong tree) or select the wrong form. + */ + public function testTernaryIsRightAssociativeAndBindsLooserThanComparisons(): void + { + // n==1 -> 0 ; n==2 -> 1 ; else -> 2 - only correct if grouped as n==1 ? 0 : (n==2 ? 1 : 2) + $forms = PluralForms::fromHeader('nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;'); + + $this->assertSame(0, $forms->formIndexFor(1)); + $this->assertSame(1, $forms->formIndexFor(2)); + $this->assertSame(2, $forms->formIndexFor(3)); + } + + /** + * "%" binds tighter than the comparisons, which bind tighter than "&&"/"||": "n%10==1 && n%100!=11" + * must be "((n%10)==1) && ((n%100)!=11)". + */ + public function testModuloBindsTighterThanComparisonsAndComparisonsTighterThanLogicalAnd(): void + { + $forms = PluralForms::fromHeader('nplurals=2; plural=(n%10==1 && n%100!=11) ? 0 : 1;'); + + $this->assertSame(0, $forms->formIndexFor(21)); + $this->assertSame(1, $forms->formIndexFor(11)); + } + + public function testBinaryOperatorsAreLeftAssociative(): void + { + // (1-... not available: "-" is not part of the grammar) use "%" chained: (n % 5) % 2 + $forms = PluralForms::fromHeader('nplurals=2; plural=n%5%2;'); + + // n=7 -> 7%5=2, 2%2=0 ; if evaluated right-associatively (5%2=1, n%1=0) it would differ for n=6 + $this->assertSame(0, $forms->formIndexFor(7)); + $forms2 = PluralForms::fromHeader('nplurals=2; plural=n%6%2;'); + $this->assertSame(0, $forms2->formIndexFor(6), '6%6=0, 0%2=0'); + } + + /** + * The default form is always the LAST one (CLDR's "other", the most general category), never fixed at index 1 + * regardless of the form count. + */ + #[DataProvider('countsAndDefaultIndex')] + public function testDefaultFormIndexForCountIsTheLastForm(int $count, int $expected): void + { + $this->assertSame($expected, PluralForms::defaultFormIndexForCount($count)); + } + + /** + * @return array + */ + public static function countsAndDefaultIndex(): array + { + return [ + 'single form (ja/vi/zh)' => [1, 0], + 'two forms (en/de)' => [2, 1], + 'three forms (cs/pl/ru)' => [3, 2], + 'four forms (sl)' => [4, 3], + 'six forms (ar)' => [6, 5], + ]; + } + + public function testDefaultValueOfFallsBackDownwardsWhenTheLastFormIsEmpty(): void + { + $forms = PluralForms::fromHeader('nplurals=2; plural=(n != 1);'); + + $this->assertSame('Eintrag', $forms->defaultValueOf(['Eintrag', ''])); + } + + public function testDefaultValueOfFallsBackDownwardsWhenTheLastFormIsMissingEntirely(): void + { + $forms = PluralForms::fromHeader('nplurals=2; plural=(n != 1);'); + + $this->assertSame('Eintrag', $forms->defaultValueOf([0 => 'Eintrag'])); + } + + public function testDefaultValueOfPrefersTheLastFormWhenItIsNotEmpty(): void + { + $forms = PluralForms::fromHeader('nplurals=2; plural=(n != 1);'); + + $this->assertSame('Einträge', $forms->defaultValueOf(['Eintrag', 'Einträge'])); + } + + public function testDefaultValueOfUsesFormZeroForASingleFormLanguage(): void + { + $forms = PluralForms::fromHeader('nplurals=1; plural=0;'); + + $this->assertSame('Eintrag', $forms->defaultValueOf(['Eintrag'])); + } + + public function testDefaultValueOfWithNoFormsAtAllIsEmpty(): void + { + $forms = PluralForms::fromHeader('nplurals=2; plural=(n != 1);'); + + $this->assertSame('', $forms->defaultValueOf([])); + } + + /** + * Three forms (e.g. Czech): the last one (index 2, "many") is preferred over the earlier ones. + */ + public function testDefaultValueOfPrefersTheLastOfThreeForms(): void + { + $forms = PluralForms::fromHeader('nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);'); + + $this->assertSame('mnoho', $forms->defaultValueOf(['jeden', 'dva', 'mnoho'])); + } + + /** + * A gap in the middle (index 1 empty) is not the fallback target: the search from the last form + * downward skips straight to the next non-empty one before it, not to index 0. + */ + public function testDefaultValueOfSkipsAnEmptyFormInTheMiddleWhileSearchingDownwards(): void + { + $forms = PluralForms::fromHeader('nplurals=4; plural=(n%100==1?0:(n%100==2?1:(n%100==3||n%100==4?2:3)));'); + + $this->assertSame( + 'dve', + $forms->defaultValueOf(['ena', 'dve', '', '']), + 'form 3 (the actual default) and form 2 are both empty - form 1 is the closest non-empty one' + ); + } + + /** + * Every form empty: no non-empty value exists anywhere to fall back to. + */ + public function testDefaultValueOfIsEmptyWhenEveryFormIsEmpty(): void + { + $forms = PluralForms::fromHeader('nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);'); + + $this->assertSame('', $forms->defaultValueOf(['', '', ''])); + } + + /** + * A formula that fails to evaluate for a sampled n (a division by zero only that n reaches, see + * testFormIndexForFallsBackToTheDefaultFormWhenTheFormulaDividesByZeroForThisN below) falls back + * to the LAST form even for a language with more than two forms - not to index 1. + */ + public function testFormIndexForFallsBackToTheLastFormOnEvaluationFailureForAMultiFormLanguage(): void + { + $forms = PluralForms::fromHeader('nplurals=3; plural=(n % (n==300 ? 0 : 3));'); + + $this->assertSame(2, $forms->formIndexFor(300)); + } + + public function testIsOneSingularOtherPluralIsTrueForTheGermanicRule(): void + { + $this->assertTrue(PluralForms::germanic()->isOneSingularOtherPlural()); + } + + public function testIsOneSingularOtherPluralIsFalseForFrenchWhichTreatsZeroAsSingular(): void + { + $this->assertFalse(PluralForms::fromHeader('nplurals=2; plural=(n > 1);')->isOneSingularOtherPlural()); + } + + public function testIsOneSingularOtherPluralIsFalseForAnyNonTwoFormCount(): void + { + $this->assertFalse(PluralForms::fromHeader('nplurals=1; plural=0;')->isOneSingularOtherPlural()); + $this->assertFalse(PluralForms::fromHeader('nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);')->isOneSingularOtherPlural()); + } + + public function testFormIndexForTreatsANegativeNAsItsAbsoluteValueLikeGettext(): void + { + $forms = PluralForms::fromHeader('nplurals=2; plural=(n != 1);'); + + $this->assertSame($forms->formIndexFor(1), $forms->formIndexFor(-1)); + $this->assertSame($forms->formIndexFor(5), $forms->formIndexFor(-5)); + } + + /** + * abs(PHP_INT_MIN) overflows a native int - must not throw or produce a bogus result. + */ + public function testFormIndexForHandlesPhpIntMinWithoutOverflowing(): void + { + $forms = PluralForms::fromHeader('nplurals=2; plural=(n != 1);'); + + $this->assertSame(1, $forms->formIndexFor(\PHP_INT_MIN)); + } + + /** + * A division by zero (here: modulo) only reached for a particular n (not one of the n's + * fromHeader() itself samples while validating the header, or construction would already have + * thrown) falls back to the default form for that n instead of throwing out of formIndexFor(). + */ + public function testFormIndexForFallsBackToTheDefaultFormWhenTheFormulaDividesByZeroForThisN(): void + { + $forms = PluralForms::fromHeader('nplurals=2; plural=(n % (n==300 ? 0 : 1));'); + + $this->assertSame($forms->defaultFormIndex(), $forms->formIndexFor(300)); + } + + #[DataProvider('invalidHeaders')] + public function testFromHeaderThrowsForAnInvalidHeader(string $header): void + { + $this->expectException(InvalidArgumentException::class); + PluralForms::fromHeader($header); + } + + /** + * @return array + */ + public static function invalidHeaders(): array + { + return [ + 'empty' => [''], + 'missing plural=' => ['nplurals=2;'], + 'missing nplurals=' => ['plural=(n != 1);'], + 'nplurals zero' => ['nplurals=0; plural=0;'], + 'nplurals negative' => ['nplurals=-1; plural=0;'], + 'nplurals too large (11)' => ['nplurals=11; plural=n%11;'], + 'not a number nplurals' => ['nplurals=x; plural=0;'], + 'identifier other than n' => ['nplurals=2; plural=(m != 1);'], + 'function call' => ['nplurals=2; plural=intdiv(n,2);'], + 'variable' => ['nplurals=2; plural=$n;'], + 'semicolon injection' => ['nplurals=2; plural=(n != 1); system("x");'], + 'assignment' => ['nplurals=2; plural=(n = 1);'], + 'unary minus' => ['nplurals=2; plural=(-n != 1);'], + 'unsupported operator +' => ['nplurals=2; plural=(n + 1) % 2;'], + 'unbalanced parenthesis' => ['nplurals=2; plural=(n != 1;'], + 'trailing garbage' => ['nplurals=2; plural=(n != 1) x;'], + 'empty ternary branch' => ['nplurals=2; plural=n ? : 1;'], + 'dangling operator' => ['nplurals=2; plural=n ==;'], + 'formula too long' => ['nplurals=2; plural=' . str_repeat('(n!=1)&&', 100) . '(n!=1);'], + 'integer with too many digits' => ['nplurals=2; plural=n==1000000000 ? 0 : 1;'], + 'index equal to count (out of range)' => ['nplurals=2; plural=2;'], + 'deeply nested parentheses beyond the depth limit' => [ + 'nplurals=2; plural=' . str_repeat('(', 100) . 'n!=1' . str_repeat(')', 100) . ';', + ], + ]; + } + + public function testFromHeaderAcceptsMaximumNplurals(): void + { + $forms = PluralForms::fromHeader('nplurals=10; plural=n%10;'); + + $this->assertSame(10, $forms->getCount()); + } + + /** + * ReDoS guard: an overlong header (e.g. a long whitespace run before a literal that never matches) is rejected by a + * strlen() check before the regex runs - proven by an execution time bound far below catastrophic backtracking, not + * just by the exception type. + */ + public function testAnOverlongHeaderIsRejectedBeforeTheRegularExpressionRunsOnIt(): void + { + $header = str_repeat(' ', 10000) . 'x'; // never matches "nplurals..." - would force backtracking + $started = microtime(true); + + try { + PluralForms::fromHeader($header); + $this->fail('Expected an InvalidArgumentException'); + } catch (InvalidArgumentException $e) { + $this->assertStringContainsString('too long', $e->getMessage()); + } + + $this->assertLessThan(1.0, microtime(true) - $started, 'rejected in well under a second - no backtracking took place'); + } + + public function testGetHeaderRoundTripsTheParsedHeader(): void + { + $forms = PluralForms::fromHeader('nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);'); + + $this->assertSame(3, PluralForms::fromHeader($forms->getHeader())->getCount()); + $this->assertSame($forms->formIndexFor(5), PluralForms::fromHeader($forms->getHeader())->formIndexFor(5)); + } + + public function testFromHeaderOrGermanicReturnsTheParsedRuleForAValidHeader(): void + { + $forms = PluralForms::fromHeaderOrGermanic('nplurals=1; plural=0;'); + + $this->assertSame(1, $forms->getCount()); + } + + public function testFromHeaderOrGermanicFallsBackAndReportsForANullHeader(): void + { + $messages = []; + $forms = PluralForms::fromHeaderOrGermanic(null, function (string $message) use (&$messages): void { + $messages[] = $message; + }); + + $this->assertSame(2, $forms->getCount()); + $this->assertTrue($forms->isOneSingularOtherPlural()); + $this->assertCount(1, $messages); + $this->assertStringContainsString('Missing Plural-Forms', $messages[0]); + } + + public function testFromHeaderOrGermanicFallsBackAndReportsForABlankHeader(): void + { + $messages = []; + PluralForms::fromHeaderOrGermanic(' ', function (string $message) use (&$messages): void { + $messages[] = $message; + }); + + $this->assertCount(1, $messages); + } + + public function testFromHeaderOrGermanicFallsBackAndReportsForAnInvalidHeader(): void + { + $messages = []; + $forms = PluralForms::fromHeaderOrGermanic('garbage', function (string $message) use (&$messages): void { + $messages[] = $message; + }); + + $this->assertSame(2, $forms->getCount()); + $this->assertCount(1, $messages); + $this->assertStringContainsString('Invalid Plural-Forms header "garbage"', $messages[0]); + } + + public function testFromHeaderOrGermanicWorksWithoutACallback(): void + { + $forms = PluralForms::fromHeaderOrGermanic('garbage'); + + $this->assertSame(2, $forms->getCount()); + } + + public function testGermanicIsTheDocumentedFallbackHeader(): void + { + $this->assertSame('nplurals=2; plural=(n != 1);', PluralForms::GERMANIC_HEADER); + $this->assertSame(2, PluralForms::germanic()->getCount()); + } + + /** + * For every form of the new rule, the forms of the previous rule that served the same sampled + * quantities - the basis of taking local values over by meaning, not by index. + * + * @param array> $expected new form => previous forms + */ + #[DataProvider('ruleChanges')] + public function testPreviousFormsOfListsThePreviousFormsServingTheSameQuantities(string $previous, string $rule, array $expected): void + { + $this->assertSame($expected, PluralForms::fromHeader($rule)->previousFormsOf(PluralForms::fromHeader($previous))); + } + + /** + * @return array>}> + */ + public static function ruleChanges(): array + { + $one = 'nplurals=1; plural=0;'; + $germanic = 'nplurals=2; plural=(n != 1);'; + $three = 'nplurals=3; plural=(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);'; + + return [ + 'vi: 1 -> 2 forms (CLDR 49)' => [$one, 'nplurals=2; plural=n > 1;', [0 => [0], 1 => [0]]], + '2 -> 3 forms' => [$germanic, $three, [0 => [0], 1 => [1], 2 => [1]]], + '3 -> 2 forms' => [$three, $germanic, [0 => [0], 1 => [1, 2]]], + 'the same rule is the identity' => [$three, $three, [0 => [0], 1 => [1], 2 => [2]]], + 'a form only large quantities select (es: millions)' => [ + 'nplurals=3; plural=(n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2);', $germanic, [0 => [0], 1 => [1, 2]], + ], + 'a form no sampled quantity selects' => [$germanic, 'nplurals=3; plural=(n == 1 ? 0 : 1);', [0 => [0], 1 => [1], 2 => []]], + ]; + } + + #[DataProvider('sameFormsRules')] + public function testSelectsSameFormsAsComparesTheSelectedFormsNotTheSpelling(string $header, string $other, bool $expected): void + { + $this->assertSame($expected, PluralForms::fromHeader($header)->selectsSameFormsAs(PluralForms::fromHeader($other))); + $this->assertSame($expected, PluralForms::fromHeader($other)->selectsSameFormsAs(PluralForms::fromHeader($header))); + } + + /** + * @return array + */ + public static function sameFormsRules(): array + { + return [ + 'white space and parentheses' => ['nplurals=2; plural=n != 1;', 'nplurals=2; plural=( n!=1 );', true], + 'another formula, same forms' => ['nplurals=2; plural=n != 1;', 'nplurals=2; plural=n == 1 ? 0 : 1;', true], + 'another number of forms' => ['nplurals=1; plural=0;', 'nplurals=2; plural=0;', false], + 'same number, another formula' => ['nplurals=2; plural=n != 1;', 'nplurals=2; plural=n > 1;', false], + 'differs only for a large n' => [ + 'nplurals=2; plural=n != 1;', + 'nplurals=2; plural=(n != 1 && n != 1000000 ? 1 : 0);', + false, + ], + ]; + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/ShippedPoMergerTest.php b/components/ILIAS/Language/tests/ComponentTranslation/ShippedPoMergerTest.php new file mode 100644 index 000000000000..5239c90203f2 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/ShippedPoMergerTest.php @@ -0,0 +1,968 @@ +fixture_directory), the only + * files this class may write, and the OVERLAY `.po`/`.mo` below a throwaway client data directory + * ($this->client_data_dir). + */ +class ShippedPoMergerTest extends TestCase +{ + private const string MODULE = 'mtest'; + private const string LANG = 'de'; + + private string $fixture_directory; + private string $client_data_dir; + private string $backup_directory; + private LanguageFileDirectory $directory; + private LanguageFileDirectoryManager $manager; + + protected function setUp(): void + { + // never the build of the installation, see MigratedPoFixture::resetRuntime() + MigratedPoFixture::resetRuntime(); + parent::setUp(); + + if (!defined('ILIAS_ABSOLUTE_PATH')) { + define('ILIAS_ABSOLUTE_PATH', realpath(__DIR__ . '/../../../../../')); + } + + $this->fixture_directory = __DIR__ . '/tmp-shipped-po-merger-' . bin2hex(random_bytes(4)); + mkdir($this->fixture_directory, 0775, true); + $this->client_data_dir = sys_get_temp_dir() . '/ilias_spm_test_client_' . bin2hex(random_bytes(4)); + mkdir($this->client_data_dir, 0775, true); + // AtomicFileWriter confines a shipped-.po backup write to below ILIAS_ABSOLUTE_PATH (like the + // shipped .po/.pot themselves) - unlike the overlay, which lives below CLIENT_DATA_DIR + $this->backup_directory = $this->fixture_directory . '-backup'; + mkdir($this->backup_directory, 0775, true); + + $this->directory = MigratedPoFixture::directory( + self::MODULE, + 'components/ILIAS/Language/tests/ComponentTranslation/' . basename($this->fixture_directory) . '/' + ); + $this->manager = new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), $this->directory); + } + + protected function tearDown(): void + { + MigratedPoFixture::removeDirectory($this->fixture_directory); + MigratedPoFixture::removeDirectory($this->client_data_dir); + MigratedPoFixture::removeDirectory($this->backup_directory); + + parent::tearDown(); + } + + private function shippedPo(string $lang_key = self::LANG): string + { + return $this->fixture_directory . '/' . self::MODULE . '_' . $lang_key . '.po'; + } + + private function templatePo(): string + { + return $this->fixture_directory . '/' . self::MODULE . '.pot'; + } + + /** + * @param array> $entries see MigratedPoFixture::catalog() + */ + private function seedShipped(array $entries, string $lang_key = self::LANG): void + { + MigratedPoFixture::writePo($this->shippedPo($lang_key), MigratedPoFixture::catalog(self::MODULE, $entries)); + } + + /** + * @param array> $entries plain value, or the forms of a plural message + */ + private function seedShippedPlural(array $entries): void + { + $catalog = new TranslationCatalog(); + $catalog->setHeader('Content-Type', 'text/plain; charset=UTF-8'); + $catalog->setHeader('Plural-Forms', 'nplurals=2; plural=(n != 1);'); + foreach ($entries as $identifier => $value) { + $entry = new TranslationEntry(self::MODULE, (string) $identifier); + if (is_array($value)) { + $entry->setPlural($identifier . '_plural', $value); + } else { + $entry->translate($value); + } + $catalog->add($entry); + } + MigratedPoFixture::writePo($this->shippedPo(), $catalog); + } + + /** + * @param array> $entries + */ + private function seedTemplate(array $entries): void + { + MigratedPoFixture::writePo($this->templatePo(), MigratedPoFixture::catalog(self::MODULE, $entries)); + } + + private function overlayBase(string $lang_key = self::LANG): string + { + return MigratedPoFixture::overlayBase($this->client_data_dir, $this->directory, $lang_key); + } + + /** + * A local change written the ordinary way (like an admin edit), with the overlay's production + * "original"/"local_change" bookkeeping. + * + * @param array $entries + * @param array|null $remarks + */ + private function seedOverlay(array $entries, ?array $remarks = null): void + { + MigratedLanguageFileSync::sync( + $this->manager, + ILIAS_ABSOLUTE_PATH, + self::LANG, + self::MODULE, + $entries, + $this->client_data_dir, + false, + null, + $remarks + ); + } + + /** + * Writes a single overlay entry directly, bypassing sync() - for shapes sync()'s flat + * identifier => value map cannot produce (a plural overlay message, an entry with an empty + * msgstr[0] next to other forms). + */ + private function seedManualOverlayEntry(TranslationEntry $entry): void + { + $catalog = new TranslationCatalog(); + $catalog->add($entry); + // .po only: a plural message with an empty msgstr[0] next to other forms (exactly the shape + // some of these tests need) cannot be compiled into a `.mo` at all (see toMoString()) - the + // overlay is read from its `.po` regardless (see readOverlayCatalog()). + MigratedPoFixture::writePo($this->overlayBase() . '.po', $catalog); + } + + private function readShippedPo(string $lang_key = self::LANG): TranslationCatalog + { + return TranslationCatalog::fromPoFile($this->shippedPo($lang_key)); + } + + /** + * @return array{ + * written: array, skipped: array, + * invalid_markup: array>>, not_merged: array>, + * unwritten_database: array, unmarked_overlay: array + * } + */ + private function merge(): array + { + return ShippedPoMerger::merge( + $this->manager, + ILIAS_ABSOLUTE_PATH, + self::LANG, + $this->client_data_dir, + $this->backup_directory + ); + } + + public function testMergeTakesOverTheOverlayValueRemovesFuzzyAndReconcilesTheOverlay(): void + { + $this->seedShipped(['greeting' => ['value' => 'Hallo', 'fuzzy' => true]]); + $this->seedOverlay(['greeting' => 'Servus']); + + $result = $this->merge(); + + $this->assertSame(['mtest' => $this->shippedPo()], $result['written']); + $this->assertSame([], $result['skipped'] + $result['invalid_markup'] + $result['not_merged']); + + $entry = $this->readShippedPo()->find(self::MODULE, 'greeting'); + $this->assertSame('Servus', $entry?->getTranslation()); + $this->assertFalse($entry->hasFlag('fuzzy')); + // the overlay is left as it is: the build (only "setup build") still holds the former value, + // "setup update" drops the entry once it equals the shipped one + $this->assertSame('Servus', MigratedPoFixture::readPo($this->overlayBase() . '.po')->find(null, 'greeting')?->getTranslation()); + } + + public function testMergeBacksUpTheShippedPoByteForByteBeforeWriting(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $original_bytes = (string) file_get_contents($this->shippedPo()); + $this->seedOverlay(['greeting' => 'Servus']); + + $this->merge(); + + $backup_file = $this->backup_directory . '/' . self::MODULE . '_' . self::LANG . '.po'; + $this->assertFileExists($backup_file); + $this->assertSame($original_bytes, file_get_contents($backup_file)); + } + + public function testASecondMergeRunWithoutFurtherLocalChangesDoesNothing(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->seedOverlay(['greeting' => 'Servus']); + $this->merge(); + $shipped_after_first_merge = (string) file_get_contents($this->shippedPo()); + + $result = $this->merge(); + + $this->assertSame( + ['written' => [], 'skipped' => [], 'invalid_markup' => [], 'not_merged' => [], 'unwritten_database' => [], 'unmarked_overlay' => []], + $result + ); + $this->assertSame($shipped_after_first_merge, file_get_contents($this->shippedPo())); + } + + /** An admin remark becomes a translator comment, unless identical to the note the entry shows. */ + public function testMergeAddsAnAdminRemarkAsTranslatorCommentWithoutDuplicatingAnIdenticalOne(): void + { + $shipped = MigratedPoFixture::catalog(self::MODULE, ['farewell' => 'Tschüss']); + $shipped->find(self::MODULE, 'farewell')->addExtractedComment('Old note'); + MigratedPoFixture::writePo($this->shippedPo(), $shipped); + // value unchanged, but a remark - and a second one identical to the existing extracted comment + $this->seedOverlay(['farewell' => 'Tschüss'], ['farewell' => 'Old note']); + + $result = $this->merge(); + + // nothing new to take over: the shipped .po is not written at all + $this->assertSame([], $result['written']); + $this->assertSame(['Old note'], $this->readShippedPo()->find(self::MODULE, 'farewell')?->getExtractedComments()); + $this->assertSame([], $this->readShippedPo()->find(self::MODULE, 'farewell')?->getTranslatorComments()); + $this->assertTrue(is_file($this->overlayBase() . '.po'), 'the overlay is left as it is'); + } + + /** A new remark becomes "# " next to a kept "#."; one equal to the shown note adds nothing. */ + public function testMergeWithAChangedValueAddsOnlyADifferingRemarkAsTranslatorComment(): void + { + $shipped = MigratedPoFixture::catalog(self::MODULE, ['farewell' => 'Tschüss', 'greeting' => 'Hallo']); + $shipped->find(self::MODULE, 'farewell')->addExtractedComment('Old note'); + $shipped->find(self::MODULE, 'greeting')->addTranslatorNote('Own note'); + MigratedPoFixture::writePo($this->shippedPo(), $shipped); + $this->seedOverlay( + ['farewell' => 'Servus', 'greeting' => 'Moin'], + ['farewell' => 'New note', 'greeting' => 'Own note'] + ); + + $this->merge(); + + $farewell = $this->readShippedPo()->find(self::MODULE, 'farewell'); + $this->assertSame('Servus', $farewell?->getTranslation()); + $this->assertSame(['Old note'], $farewell->getExtractedComments()); + $this->assertSame(['New note'], $farewell->getTranslatorComments()); + $greeting = $this->readShippedPo()->find(self::MODULE, 'greeting'); + $this->assertSame('Moin', $greeting?->getTranslation()); + $this->assertSame(['Own note'], $greeting->getTranslatorComments()); + } + + /** With an own note the reference note is hidden, so an equal remark is written; compared as stored. */ + public function testARemarkEqualToAHiddenReferenceNoteIsWrittenAndOneEqualToTheStoredNoteIsNot(): void + { + $shipped = MigratedPoFixture::catalog(self::MODULE, ['farewell' => 'Tschüss', 'greeting' => 'Hallo']); + $shipped->find(self::MODULE, 'farewell')->addExtractedComment('en note'); + $shipped->find(self::MODULE, 'farewell')->addTranslatorNote('eigene Notiz'); + $shipped->find(self::MODULE, 'greeting')->addTranslatorNote('a b'); + MigratedPoFixture::writePo($this->shippedPo(), $shipped); + $this->seedOverlay(['farewell' => 'Tschüss', 'greeting' => 'Hallo'], ['farewell' => 'en note', 'greeting' => "a\tb"]); + + $result = $this->merge(); + + $this->assertArrayHasKey(self::MODULE, $result['written']); + $farewell = $this->readShippedPo()->find(self::MODULE, 'farewell'); + $this->assertSame(['eigene Notiz', 'en note'], $farewell?->getTranslatorComments()); + $this->assertSame(['en note'], $farewell->getExtractedComments()); + $this->assertSame(['a b'], $this->readShippedPo()->find(self::MODULE, 'greeting')?->getTranslatorComments()); + } + + public function testMergeSkipsAValueWithDisallowedMarkupAndKeepsItInTheOverlay(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->seedOverlay(['greeting' => '']); + + $result = $this->merge(); + + $this->assertSame([], $result['written']); + $this->assertArrayHasKey('mtest', $result['invalid_markup']); + $this->assertArrayHasKey('greeting', $result['invalid_markup']['mtest']); + $this->assertSame('Hallo', $this->readShippedPo()->find(self::MODULE, 'greeting')?->getTranslation()); + $this->assertTrue(is_file($this->overlayBase() . '.po')); + } + + public function testMergeSkipsAPluralOverlayForASingularShippedEntryAndKeepsItInTheOverlay(): void + { + $this->seedShipped(['items' => 'Element']); + $entry = new TranslationEntry(self::MODULE, 'items'); + $entry->setPlural('items_plural', ['Kein Element', 'Elemente']); + $this->seedManualOverlayEntry($entry); + + $result = $this->merge(); + + $this->assertSame([], $result['written']); + $this->assertSame(['mtest' => ['items']], $result['not_merged']); + $this->assertSame('Element', $this->readShippedPo()->find(self::MODULE, 'items')?->getTranslation()); + $this->assertTrue(is_file($this->overlayBase() . '.po')); + } + + public function testMergeSkipsAPluralWithAnEmptyFirstFormNextToOtherFormsAndKeepsItInTheOverlay(): void + { + $shipped = new TranslationEntry(self::MODULE, 'items'); + $shipped->setPlural('items_plural', ['Kein Element', 'Elemente']); + $catalog = new TranslationCatalog(); + $catalog->add($shipped); + MigratedPoFixture::writePo($this->shippedPo(), $catalog); + + $entry = new TranslationEntry(self::MODULE, 'items'); + $entry->setPlural('items_plural', ['', 'Elemente (lokal)']); + $this->seedManualOverlayEntry($entry); + + $result = $this->merge(); + + $this->assertSame([], $result['written']); + $this->assertSame(['mtest' => ['items']], $result['not_merged']); + $this->assertTrue(is_file($this->overlayBase() . '.po')); + } + + /** + * An identifier of the form " []" would be read back as a plural form + * (PluralFormKey) - a new key added locally in that shape is not taken over. + */ + public function testMergeDoesNotAddANewKeyShapedLikeAPluralFormAndKeepsItInTheOverlay(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->seedOverlay(['newkey [0]' => 'Wert']); + + $result = $this->merge(); + + $this->assertSame([], $result['written']); + $this->assertSame(['mtest' => ['newkey [0]']], $result['not_merged']); + $this->assertNull($this->readShippedPo()->find(self::MODULE, 'newkey [0]')); + $this->assertTrue(is_file($this->overlayBase() . '.po')); + } + + /** + * A new identifier is inserted into the shipped `.po` in id order and, empty, into the template + * (`.pot`) - the `.po` of another language is left untouched. + */ + public function testMergeAddsANewKeySortedIntoThePoAndEmptyIntoThePotOtherLanguageStaysUnchanged(): void + { + $this->seedShipped(['aaa' => 'A', 'zzz' => 'Z']); + $this->seedTemplate(['aaa' => '', 'zzz' => '']); + $this->seedShipped(['aaa' => 'A (en)', 'zzz' => 'Z (en)'], 'en'); + $other_language_bytes = (string) file_get_contents($this->shippedPo('en')); + $this->seedOverlay(['mmm' => 'M']); + + $result = $this->merge(); + + $this->assertSame(['mtest' => $this->shippedPo()], $result['written']); + $ids = array_map(static fn(TranslationEntry $e): string => $e->getId(), $this->readShippedPo()->getEntries()); + $this->assertSame(['aaa', 'mmm', 'zzz'], $ids); + // a new entry is added without context - the shipped .po of a single module need not repeat + // its name in every entry (see MigratedLanguageFileSync::findModuleEntry()) + $this->assertSame('M', $this->readShippedPo()->find(null, 'mmm')?->getTranslation()); + + $template_entry = TranslationCatalog::fromPoFile($this->templatePo())->find(null, 'mmm'); + $this->assertNotNull($template_entry); + $this->assertSame('', $template_entry->getTranslation()); + + $this->assertSame($other_language_bytes, file_get_contents($this->shippedPo('en'))); + } + + public function testMergeSkipsTheWholeModuleWhenTheTemplateForANewKeyIsMissing(): void + { + $this->seedShipped(['aaa' => 'A']); + // no .pot at all + $this->seedOverlay(['mmm' => 'M']); + + $result = $this->merge(); + + $this->assertSame([], $result['written']); + $this->assertArrayHasKey('mtest', $result['skipped']); + $this->assertNull($this->readShippedPo()->find(self::MODULE, 'mmm')); + } + + public function testBackupShippedPoFilesCopiesTheShippedPoNamedLikeTheFile(): void + { + $this->seedShipped(['aaa' => 'A']); + + $failed = ShippedPoMerger::backupShippedPoFiles($this->manager, ILIAS_ABSOLUTE_PATH, self::LANG, $this->backup_directory, ILIAS_ABSOLUTE_PATH); + + $this->assertSame([], $failed); + $this->assertSame( + file_get_contents($this->shippedPo()), + file_get_contents($this->backup_directory . '/' . self::MODULE . '_' . self::LANG . '.po') + ); + } + + /** + * Two modules whose shipped `.po` share a file name (both use the "shared_%s" pattern, see + * NamesShippedLanguageFiles, each in its own directory) collide on the backup file name: neither is backed up, + * rather than one overwriting the other. + */ + public function testBackupShippedPoFilesReportsAModuleWhoseShippedFileNameIsNotUnique(): void + { + $other_module = self::MODULE . '2'; + $other_directory = $this->directoryNamedSharedByLanguage( + $other_module, + 'components/ILIAS/Language/tests/ComponentTranslation/' . basename($this->fixture_directory) . '-other/' + ); + $shared_directory = $this->directoryNamedSharedByLanguage( + self::MODULE, + 'components/ILIAS/Language/tests/ComponentTranslation/' . basename($this->fixture_directory) . '/' + ); + MigratedPoFixture::writePo( + $this->fixture_directory . '/shared_' . self::LANG . '.po', + MigratedPoFixture::catalog(self::MODULE, ['aaa' => 'A']) + ); + mkdir($this->fixture_directory . '-other', 0775, true); + MigratedPoFixture::writePo( + $this->fixture_directory . '-other/shared_' . self::LANG . '.po', + MigratedPoFixture::catalog($other_module, ['bbb' => 'B']) + ); + $manager = new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), $shared_directory, $other_directory); + + try { + $failed = ShippedPoMerger::backupShippedPoFiles($manager, ILIAS_ABSOLUTE_PATH, self::LANG, $this->backup_directory, ILIAS_ABSOLUTE_PATH); + + $this->assertSame([self::MODULE, $other_module], $failed); + } finally { + MigratedPoFixture::removeDirectory($this->fixture_directory . '-other'); + } + } + + private function directoryNamedSharedByLanguage(string $prefix, string $path): LanguageFileDirectory + { + return new class ($prefix, $path) implements LanguageFileDirectory, \ILIAS\Language\ComponentTranslation\NamesShippedLanguageFiles { + public function __construct(private string $prefix, private string $path) + { + } + + public function getPrefix(): string + { + return $this->prefix; + } + + public function getPath(): string + { + return $this->path; + } + + public function getSuffix(): string + { + return ''; + } + + public function isLocal(): bool + { + return false; + } + + public function getShippedFileNamePattern(): string + { + return 'shared_%s'; + } + }; + } + + public function testFindShippedChangesSinceBackupReportsWhatChangedSinceTheBackup(): void + { + $this->seedShipped(['aaa' => 'A', 'bbb' => 'B']); + ShippedPoMerger::backupShippedPoFiles($this->manager, ILIAS_ABSOLUTE_PATH, self::LANG, $this->backup_directory, ILIAS_ABSOLUTE_PATH); + // changed after the backup, directly on the shipped file (simulating a later ILIAS update) + $this->seedShipped(['aaa' => 'A (geändert)', 'bbb' => 'B']); + + $changes = ShippedPoMerger::findShippedChangesSinceBackup($this->manager, ILIAS_ABSOLUTE_PATH, self::LANG, $this->backup_directory); + + $this->assertSame(['mtest' => ['aaa' => 'A (geändert)']], $changes['changes']); + $this->assertSame([], $changes['without_backup']); + } + + public function testFindShippedChangesSinceBackupListsAModuleWithoutABackupInstead(): void + { + $this->seedShipped(['aaa' => 'A']); + // no backup written at all + + $changes = ShippedPoMerger::findShippedChangesSinceBackup($this->manager, ILIAS_ABSOLUTE_PATH, self::LANG, $this->backup_directory); + + $this->assertSame([], $changes['changes']); + $this->assertSame(['mtest'], $changes['without_backup']); + } + + /** + * The "conflicts" filter compares plural messages form by form (" []"); an entry + * added to the shipped .po after the backup is a change, an entry removed after it is not (there + * is no current shipped value to show). + */ + public function testFindShippedChangesSinceBackupReportsPluralFormsNewEntriesAndIgnoresRemovedOnes(): void + { + $this->seedShippedPlural(['items' => ['Element', 'Elemente'], 'gone' => 'Weg', 'same' => 'Gleich']); + ShippedPoMerger::backupShippedPoFiles($this->manager, ILIAS_ABSOLUTE_PATH, self::LANG, $this->backup_directory, ILIAS_ABSOLUTE_PATH); + $this->seedShippedPlural(['items' => ['Element', 'Elemente (neu)'], 'added' => 'Neu', 'same' => 'Gleich']); + + $changes = ShippedPoMerger::findShippedChangesSinceBackup($this->manager, ILIAS_ABSOLUTE_PATH, self::LANG, $this->backup_directory); + + $this->assertSame( + ['mtest' => ['items [1]' => 'Elemente (neu)', 'added' => 'Neu']], + $changes['changes'] + ); + $this->assertSame([], $changes['without_backup']); + } + + public function testFindShippedChangesSinceBackupListsAModuleWithoutReadableBackupEvenIfItChanged(): void + { + $this->seedShipped(['aaa' => 'A']); + ShippedPoMerger::backupShippedPoFiles($this->manager, ILIAS_ABSOLUTE_PATH, self::LANG, $this->backup_directory, ILIAS_ABSOLUTE_PATH); + file_put_contents($this->backup_directory . '/' . self::MODULE . '_' . self::LANG . '.po', "msgid \"broken\nmsgstr"); + $this->seedShipped(['aaa' => 'A (geändert)']); + + $changes = ShippedPoMerger::findShippedChangesSinceBackup($this->manager, ILIAS_ABSOLUTE_PATH, self::LANG, $this->backup_directory); + + $this->assertSame([], $changes['changes']); + $this->assertSame(['mtest'], $changes['without_backup']); + } + + public function testMergeTakesOverAllFormsOfAPluralOverlayMessageAndKeepsTheShippedPluralId(): void + { + $this->seedShippedPlural(['items' => ['Element', 'Elemente']]); + $entry = new TranslationEntry(self::MODULE, 'items'); + $entry->setPlural('other_plural_id', ['Ein Ding', 'Dinge']); + $this->seedManualOverlayEntry($entry); + + $result = $this->merge(); + + $this->assertSame(['mtest' => $this->shippedPo()], $result['written']); + $this->assertSame([], $result['not_merged']); + $merged = $this->readShippedPo()->find(self::MODULE, 'items'); + $this->assertTrue($merged->isPlural()); + $this->assertSame('items_plural', $merged->getPluralId()); + $this->assertSame(['Ein Ding', 'Dinge'], $merged->getPluralTranslations()); + } + + /** + * A plain value for a shipped plural message is its default form (the last one, see + * PluralForms); the other forms keep their shipped value. + */ + public function testMergeOfASingularOverlayValueReplacesOnlyTheDefaultFormOfAShippedPluralMessage(): void + { + $this->seedShippedPlural(['items' => ['Element', 'Elemente']]); + $entry = new TranslationEntry(self::MODULE, 'items'); + $entry->translate('Dinge'); + $this->seedManualOverlayEntry($entry); + + $result = $this->merge(); + + $this->assertSame([], $result['not_merged']); + $merged = $this->readShippedPo()->find(self::MODULE, 'items'); + $this->assertTrue($merged->isPlural()); + $this->assertSame(['Element', 'Dinge'], $merged->getPluralTranslations()); + } + + /** + * $after_module (the database write) failing for one module must not stop the others: the files + * of every module are written regardless, only the failing one is reported in + * unwritten_database. + */ + public function testMergeContinuesOtherModulesWhenTheDatabaseCallbackThrowsForOne(): void + { + $other_module = self::MODULE . '2'; + $other_directory = MigratedPoFixture::directory( + $other_module, + 'components/ILIAS/Language/tests/ComponentTranslation/' . basename($this->fixture_directory) . '-other2/' + ); + mkdir($this->fixture_directory . '-other2', 0775, true); + MigratedPoFixture::writePo( + $this->fixture_directory . '-other2/' . $other_module . '_' . self::LANG . '.po', + MigratedPoFixture::catalog($other_module, ['bbb' => 'B']) + ); + $manager = new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), $this->directory, $other_directory); + $this->seedShipped(['aaa' => 'A']); + $this->seedOverlay(['aaa' => 'A (lokal)']); + MigratedLanguageFileSync::sync( + $manager, + ILIAS_ABSOLUTE_PATH, + self::LANG, + $other_module, + ['bbb' => 'B (lokal)'], + $this->client_data_dir + ); + + try { + $calls = []; + $result = ShippedPoMerger::merge( + $manager, + ILIAS_ABSOLUTE_PATH, + self::LANG, + $this->client_data_dir, + $this->backup_directory, + static function (string $module) use (&$calls): void { + $calls[] = $module; + if ($module === self::MODULE) { + throw new RuntimeException('database is down'); + } + } + ); + + $this->assertSame([self::MODULE, $other_module], $calls); + $this->assertArrayHasKey(self::MODULE, $result['unwritten_database']); + $this->assertArrayNotHasKey($other_module, $result['unwritten_database']); + // both files are written regardless of the database failure + $this->assertCount(2, $result['written']); + $this->assertSame('A (lokal)', $this->readShippedPo()->find(self::MODULE, 'aaa')?->getTranslation()); + $this->assertSame( + 'B (lokal)', + TranslationCatalog::fromPoFile($this->fixture_directory . '-other2/' . $other_module . '_' . self::LANG . '.po') + ->find($other_module, 'bbb')?->getTranslation() + ); + } finally { + MigratedPoFixture::removeDirectory($this->fixture_directory . '-other2'); + } + } + + /** + * @return array path relative to $directory => hash of the content, of every file + */ + private static function snapshot(string $directory): array + { + $files = []; + foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($directory, \FilesystemIterator::SKIP_DOTS)) as $file) { + $files[substr($file->getPathname(), strlen($directory))] = (string) hash_file('sha256', $file->getPathname()); + } + ksort($files); + + return $files; + } + + /** + * The web server does not build: merge writes the shipped `.po`, but leaves the build and the + * overlay as they are - the runtime keeps serving the local change from the overlay until + * "setup build" and "setup update" ran. + */ + public function testMergeNeitherBuildsNorTouchesTheOverlay(): void + { + $this->seedShipped(['aaa' => 'A']); + $this->seedOverlay(['aaa' => 'A (lokal)']); + MigratedPoFixture::build($this->manager, ILIAS_ABSOLUTE_PATH); + $pointer_before = (string) file_get_contents(MigratedLanguageFilePaths::buildPointerFile(MigratedPoFixture::artifactDirectory())); + $overlay_before = (string) file_get_contents($this->overlayBase() . '.po'); + $current_before = (string) file_get_contents(MigratedPoFixture::overlayCurrent($this->overlayBase())); + $artifacts_before = self::snapshot(MigratedPoFixture::artifactDirectory()); + $overlay_before_tree = self::snapshot(dirname($this->overlayBase())); + + $result = $this->merge(); + + $this->assertSame($artifacts_before, self::snapshot(MigratedPoFixture::artifactDirectory()), 'nothing written below artifacts/language'); + $overlay_tree = self::snapshot(dirname($this->overlayBase())); + unset($overlay_tree['/mtest_de.po'], $overlay_before_tree['/mtest_de.po']); + $this->assertSame($overlay_before_tree, $overlay_tree, 'no new revision, nothing removed - only the .po gets the marks'); + $this->assertSame(['mtest' => $this->shippedPo()], $result['written']); + $this->assertSame('A (lokal)', $this->readShippedPo()->find(self::MODULE, 'aaa')?->getTranslation(), 'the shipped .po was written'); + $this->assertSame($pointer_before, (string) file_get_contents(MigratedLanguageFilePaths::buildPointerFile(MigratedPoFixture::artifactDirectory()))); + $merged_entry = MigratedPoFixture::readPo($this->overlayBase() . '.po')->find(null, 'aaa'); + $this->assertSame('A (lokal)', $merged_entry?->getTranslation(), 'the value stays in the overlay'); + $this->assertTrue(\ILIAS\Language\ComponentTranslation\LocalChangeComments::isMergedIntoShipped($merged_entry), 'marked as taken over'); + $this->assertNotSame($overlay_before, (string) file_get_contents($this->overlayBase() . '.po')); + $this->assertSame($current_before, (string) file_get_contents(MigratedPoFixture::overlayCurrent($this->overlayBase()))); + $this->assertSame( + 'A (lokal)', + (new TranslationGettextRepository())->getText(self::MODULE, self::LANG, 'aaa', $this->client_data_dir), + 'served from the overlay until the next setup build/update' + ); + } + + /** + * Another write of the module after merge but before "setup build" (an admin edit of another key, an import, "setup + * update" without build) must not drop the taken-over entry: its value equals the new shipped one, but the build + * still serves the former `.po`. Only after "setup build" does the next reconciling write drop it. + */ + public function testATakenOverValueStaysServedUntilTheBuildServesTheWrittenPo(): void + { + $this->seedShipped(['aaa' => 'A', 'bbb' => 'B']); + $this->seedOverlay(['aaa' => 'A (lokal)', 'bbb' => 'B']); + MigratedPoFixture::build($this->manager, ILIAS_ABSOLUTE_PATH); + + $this->merge(); + $this->seedOverlay(['aaa' => 'A (lokal)', 'bbb' => 'B (lokal)']); + + $overlay = MigratedPoFixture::readPo($this->overlayBase() . '.po'); + $this->assertSame('A (lokal)', $overlay->find(null, 'aaa')?->getTranslation(), 'kept although it equals the shipped value now'); + $this->assertSame('A (lokal)', (new TranslationGettextRepository())->getText(self::MODULE, self::LANG, 'aaa', $this->client_data_dir)); + $this->assertSame('B (lokal)', (new TranslationGettextRepository())->getText(self::MODULE, self::LANG, 'bbb', $this->client_data_dir)); + + // "setup build", then "setup update" (a reconciling write) + MigratedPoFixture::build($this->manager, ILIAS_ABSOLUTE_PATH); + MigratedLanguageFileSync::sync( + $this->manager, + ILIAS_ABSOLUTE_PATH, + self::LANG, + self::MODULE, + ['aaa' => 'A (lokal)', 'bbb' => 'B (lokal)'], + $this->client_data_dir, + true + ); + + $overlay = MigratedPoFixture::readPo($this->overlayBase() . '.po'); + $this->assertNull($overlay->find(null, 'aaa'), 'served by the build now'); + $this->assertSame('B (lokal)', $overlay->find(null, 'bbb')?->getTranslation()); + $this->assertSame('A (lokal)', (new TranslationGettextRepository())->getText(self::MODULE, self::LANG, 'aaa', $this->client_data_dir)); + } + + /** + * @param array $entries + */ + private function reconcile(array $entries): void + { + MigratedLanguageFileSync::sync($this->manager, ILIAS_ABSOLUTE_PATH, self::LANG, self::MODULE, $entries, $this->client_data_dir, true); + } + + public function testATakenOverPluralMessageStaysServedUntilTheBuildServesTheWrittenPo(): void + { + $this->seedShippedPlural(['items' => ['Element', 'Elemente']]); + $local = ['items [0]' => 'Ein Ding', 'items [1]' => 'Dinge']; + $this->seedOverlay($local); + MigratedPoFixture::build($this->manager, ILIAS_ABSOLUTE_PATH); + + $this->merge(); + $this->assertSame(['Ein Ding', 'Dinge'], $this->readShippedPo()->find(self::MODULE, 'items')?->getPluralTranslations(), 'precondition: taken over'); + $this->reconcile($local); + + $overlay_entry = MigratedPoFixture::readPo($this->overlayBase() . '.po')->find(null, 'items'); + $this->assertNotNull($overlay_entry, 'kept although it equals the shipped message now'); + $this->assertSame(['Ein Ding', 'Dinge'], $overlay_entry->getPluralTranslations()); + $this->assertSame('Ein Ding', (new TranslationGettextRepository())->getPluralText(self::MODULE, self::LANG, 'items', 1, $this->client_data_dir)); + $this->assertSame('Dinge', (new TranslationGettextRepository())->getPluralText(self::MODULE, self::LANG, 'items', 2, $this->client_data_dir)); + + MigratedPoFixture::build($this->manager, ILIAS_ABSOLUTE_PATH); + $this->reconcile($local); + + $this->assertFileDoesNotExist($this->overlayBase() . '.po', 'served by the build now, nothing left to keep'); + $this->assertSame('Ein Ding', (new TranslationGettextRepository())->getPluralText(self::MODULE, self::LANG, 'items', 1, $this->client_data_dir)); + $this->assertSame('Dinge', (new TranslationGettextRepository())->getPluralText(self::MODULE, self::LANG, 'items', 2, $this->client_data_dir)); + } + + public function testTheMarkOfAPluralMessageIsDroppedOnceTheBuildServesTheWrittenPoAndTheMessageIsChangedAgain(): void + { + $this->seedShippedPlural(['items' => ['Element', 'Elemente']]); + $this->seedOverlay(['items [0]' => 'Ein Ding', 'items [1]' => 'Dinge']); + MigratedPoFixture::build($this->manager, ILIAS_ABSOLUTE_PATH); + $this->merge(); + $this->assertTrue(\ILIAS\Language\ComponentTranslation\LocalChangeComments::isMergedIntoShipped( + MigratedPoFixture::readPo($this->overlayBase() . '.po')->find(null, 'items') + ), 'precondition'); + MigratedPoFixture::build($this->manager, ILIAS_ABSOLUTE_PATH); + + $this->reconcile(['items [0]' => 'Ein Ding', 'items [1]' => 'Viele Dinge']); + + $entry = MigratedPoFixture::readPo($this->overlayBase() . '.po')->find(null, 'items'); + $this->assertSame(['Ein Ding', 'Viele Dinge'], $entry?->getPluralTranslations()); + $this->assertFalse(\ILIAS\Language\ComponentTranslation\LocalChangeComments::isMergedIntoShipped($entry)); + } + + /** + * The mark only keeps the value that was taken over: an administrator who changes it before the + * next build has a local change of his own - for good, not only until the build. + */ + public function testAMarkedEntryChangedToAThirdValueBeforeTheBuildIsAPlainLocalChange(): void + { + $this->seedShipped(['aaa' => 'A']); + $this->seedOverlay(['aaa' => 'A (lokal)']); + MigratedPoFixture::build($this->manager, ILIAS_ABSOLUTE_PATH); + $this->merge(); + + $this->reconcile(['aaa' => 'A (dritte)']); + + $entry = MigratedPoFixture::readPo($this->overlayBase() . '.po')->find(null, 'aaa'); + $this->assertSame('A (dritte)', $entry?->getTranslation()); + $this->assertFalse(\ILIAS\Language\ComponentTranslation\LocalChangeComments::isMergedIntoShipped($entry), 'a changed value is no taken over one any more - already before the build'); + $this->assertSame('A (dritte)', (new TranslationGettextRepository())->getText(self::MODULE, self::LANG, 'aaa', $this->client_data_dir)); + + MigratedPoFixture::build($this->manager, ILIAS_ABSOLUTE_PATH); + $this->reconcile(['aaa' => 'A (dritte)']); + + $entry = MigratedPoFixture::readPo($this->overlayBase() . '.po')->find(null, 'aaa'); + $this->assertSame('A (dritte)', $entry?->getTranslation(), 'still a local change against the written shipped value'); + $this->assertFalse(\ILIAS\Language\ComponentTranslation\LocalChangeComments::isMergedIntoShipped($entry), 'the mark is gone once the build serves the written .po'); + $this->assertSame('A (dritte)', (new TranslationGettextRepository())->getText(self::MODULE, self::LANG, 'aaa', $this->client_data_dir)); + } + + public function testMarkMergedIntoShippedMarksOnlyTheNamedEntriesAndChangesNothingServed(): void + { + $this->seedShipped(['aaa' => 'A', 'bbb' => 'B']); + $this->seedOverlay(['aaa' => 'A (lokal)', 'bbb' => 'B (lokal)']); + $revision_before = (string) file_get_contents(MigratedPoFixture::overlayCurrent($this->overlayBase())); + + MigratedLanguageFileSync::markMergedIntoShipped($this->manager, self::LANG, self::MODULE, ['aaa', 'unknown'], $this->client_data_dir, ILIAS_ABSOLUTE_PATH); + + $overlay = MigratedPoFixture::readPo($this->overlayBase() . '.po'); + $this->assertTrue(\ILIAS\Language\ComponentTranslation\LocalChangeComments::isMergedIntoShipped($overlay->find(null, 'aaa'))); + $this->assertFalse(\ILIAS\Language\ComponentTranslation\LocalChangeComments::isMergedIntoShipped($overlay->find(null, 'bbb'))); + $this->assertSame('B (lokal)', $overlay->find(null, 'bbb')?->getTranslation()); + $this->assertSame($revision_before, (string) file_get_contents(MigratedPoFixture::overlayCurrent($this->overlayBase())), 'only the .po is written'); + } + + public function testMarkMergedIntoShippedWithoutAnOverlayWritesNothing(): void + { + $this->seedShipped(['aaa' => 'A']); + + MigratedLanguageFileSync::markMergedIntoShipped($this->manager, self::LANG, self::MODULE, ['aaa'], $this->client_data_dir, ILIAS_ABSOLUTE_PATH); + MigratedLanguageFileSync::markMergedIntoShipped($this->manager, self::LANG, self::MODULE, ['aaa'], null, ILIAS_ABSOLUTE_PATH); + + $this->assertFileDoesNotExist($this->overlayBase() . '.po'); + $this->assertDirectoryDoesNotExist(dirname($this->overlayBase()), 'neither the overlay directory nor a lock file is created'); + } + + public function testMarkMergedIntoShippedWithAnUnreadableOverlayThrowsAndLeavesItAsItIs(): void + { + $this->seedShipped(['aaa' => 'A']); + $this->seedOverlay(['aaa' => 'A (lokal)']); + file_put_contents($this->overlayBase() . '.po', 'msgid "broken'); + + try { + MigratedLanguageFileSync::markMergedIntoShipped($this->manager, self::LANG, self::MODULE, ['aaa'], $this->client_data_dir, ILIAS_ABSOLUTE_PATH); + $this->fail('an overlay that cannot be read must be reported'); + } catch (\RuntimeException) { + } + + $this->assertSame('msgid "broken', file_get_contents($this->overlayBase() . '.po')); + } + + /** + * Makes the overlay directory read-only (the marking cannot write its temporary file there) and + * returns the restore callback - or skips the test if the permission does not bind (root). + */ + private function makeOverlayDirectoryReadOnly(): void + { + $directory = dirname($this->overlayBase()); + chmod($directory, 0555); + clearstatcache(); + if (is_writable($directory)) { + chmod($directory, 0775); + $this->markTestSkipped('The file permissions do not bind in this environment (root).'); + } + } + + private function restoreOverlayDirectory(): void + { + chmod(dirname($this->overlayBase()), 0775); + clearstatcache(); + } + + public function testAFailingMarkingOfTheOverlayIsReportedAndTheFilesStayWrittenAndTheNextMergeMakesUpForIt(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->seedOverlay(['greeting' => 'Servus']); + $this->makeOverlayDirectoryReadOnly(); + + try { + $calls = []; + $result = ShippedPoMerger::merge( + $this->manager, + ILIAS_ABSOLUTE_PATH, + self::LANG, + $this->client_data_dir, + $this->backup_directory, + static function (string $module) use (&$calls): void { + $calls[] = $module; + } + ); + } finally { + $this->restoreOverlayDirectory(); + } + + $this->assertSame(['mtest' => $this->shippedPo()], $result['written']); + $this->assertSame([], $result['skipped']); + $this->assertSame([self::MODULE], $calls, 'the database callback runs regardless'); + $this->assertSame([self::MODULE], array_keys($result['unmarked_overlay'])); + $this->assertNotSame('', $result['unmarked_overlay'][self::MODULE]); + $this->assertSame([], $result['unwritten_database']); + $this->assertSame('Servus', $this->readShippedPo()->find(self::MODULE, 'greeting')?->getTranslation()); + $this->assertFalse( + \ILIAS\Language\ComponentTranslation\LocalChangeComments::isMergedIntoShipped(MigratedPoFixture::readPo($this->overlayBase() . '.po')->find(null, 'greeting')), + 'not marked yet' + ); + + // cause removed: the shipped .po is already written, the marking is made up for + $second = $this->merge(); + + $this->assertSame([], $second['written']); + $this->assertSame([], $second['unmarked_overlay']); + $this->assertSame([], $second['skipped']); + $overlay_entry = MigratedPoFixture::readPo($this->overlayBase() . '.po')->find(null, 'greeting'); + $this->assertTrue(\ILIAS\Language\ComponentTranslation\LocalChangeComments::isMergedIntoShipped($overlay_entry)); + $this->assertSame('Servus', $overlay_entry->getTranslation()); + } + + public function testARepeatedMergeDoesNotRewriteTheAlreadyMarkedOverlay(): void + { + $this->seedShipped(['greeting' => 'Hallo']); + $this->seedOverlay(['greeting' => 'Servus']); + $this->merge(); + $overlay_po = $this->overlayBase() . '.po'; + $content = (string) file_get_contents($overlay_po); + $in_the_past = time() - 86400; + touch($overlay_po, $in_the_past); + + $this->merge(); + MigratedLanguageFileSync::markMergedIntoShipped($this->manager, self::LANG, self::MODULE, ['greeting'], $this->client_data_dir, ILIAS_ABSOLUTE_PATH); + + clearstatcache(); + $this->assertSame($in_the_past, filemtime($overlay_po), 'not written again'); + $this->assertSame($content, file_get_contents($overlay_po)); + } + + /** + * A module whose shipped directory is reached through a symbolic link pointing outside + * ILIAS_ABSOLUTE_PATH is skipped entirely - AtomicFileWriter refuses to write there (CWE-59), the + * shipped `.po` stays exactly as it was. + */ + public function testMergeSkipsAModuleWhoseShippedDirectoryIsASymlinkOutsideTheIliasRoot(): void + { + $outside = sys_get_temp_dir() . '/ilias_spm_outside_' . bin2hex(random_bytes(4)); + mkdir($outside, 0775, true); + MigratedPoFixture::writePo($outside . '/' . self::MODULE . '_' . self::LANG . '.po', MigratedPoFixture::catalog(self::MODULE, ['aaa' => 'A'])); + $linked_relative = 'components/ILIAS/Language/tests/ComponentTranslation/' . basename($this->fixture_directory) . '-link/'; + symlink($outside, rtrim(ILIAS_ABSOLUTE_PATH, '/') . '/' . rtrim($linked_relative, '/')); + $linked_directory = MigratedPoFixture::directory(self::MODULE, $linked_relative); + $manager = new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), $linked_directory); + MigratedLanguageFileSync::sync($manager, ILIAS_ABSOLUTE_PATH, self::LANG, self::MODULE, ['aaa' => 'A (lokal)'], $this->client_data_dir); + + try { + $result = ShippedPoMerger::merge($manager, ILIAS_ABSOLUTE_PATH, self::LANG, $this->client_data_dir, $this->backup_directory); + + $this->assertSame([], $result['written']); + $this->assertArrayHasKey(self::MODULE, $result['skipped']); + $this->assertSame( + 'A', + TranslationCatalog::fromPoFile($outside . '/' . self::MODULE . '_' . self::LANG . '.po')->find(self::MODULE, 'aaa')?->getTranslation() + ); + } finally { + @unlink(rtrim(ILIAS_ABSOLUTE_PATH, '/') . '/' . rtrim($linked_relative, '/')); + MigratedPoFixture::removeDirectory($outside); + } + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/ShippedPoModulesConsistencyTest.php b/components/ILIAS/Language/tests/ComponentTranslation/ShippedPoModulesConsistencyTest.php new file mode 100644 index 000000000000..8cd4436fe890 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/ShippedPoModulesConsistencyTest.php @@ -0,0 +1,155 @@ +>, unparsed: list} + * module => contributions; component classes with a contribution in another notation + */ + private static function contributions(): array + { + static $cache = null; + if ($cache !== null) { + return $cache; + } + $modules = []; + $unparsed = []; + foreach (glob(self::root() . '/components/*/*/*.php') ?: [] as $file) { + if (basename($file, '.php') !== basename(dirname($file))) { + continue; + } + $code = self::code($file); + $calls = preg_match_all(self::CALL, $code); + $parsed = preg_match_all(self::CONTRIBUTION, $code, $matches, PREG_SET_ORDER); + if ($calls !== $parsed) { + $unparsed[] = substr($file, strlen(self::root()) + 1); + } + foreach ($matches as $match) { + $module = $match[2]; + $path = ($match[4] ?? '') === '' ? 'lang/' : $match[4]; + $modules[$module][] = [ + 'file' => $file, + 'lang_dir' => dirname($file) . '/' . trim($path, '/'), + 'pattern' => ($match[6] ?? '') === '' ? $module . '_%s' : $match[6], + ]; + } + } + ksort($modules); + + return $cache = ['modules' => $modules, 'unparsed' => $unparsed]; + } + + /** @return array */ + public static function moduleProvider(): array + { + $cases = []; + foreach (array_keys(self::contributions()['modules']) as $module) { + $cases[$module] = [$module]; + } + + return $cases; + } + + public function testContributionsAreFound(): void + { + self::assertGreaterThan(60, count(self::contributions()['modules'])); + self::assertSame([], self::contributions()['unparsed'], 'ComponentLanguageFileDirectory with arguments other than string literals'); + } + + public function testEveryShippedPotIsContributed(): void + { + $contributed = []; + foreach (self::contributions()['modules'] as $module => $contributions) { + foreach ($contributions as $contribution) { + $contributed[$contribution['lang_dir'] . '/' . MigratedLanguageFilePaths::templateFileName($contribution['pattern'], $module)] = true; + } + } + $uncontributed = []; + foreach (glob(self::root() . '/components/*/*/lang/*.pot') ?: [] as $pot) { + if (!isset($contributed[$pot])) { + $uncontributed[] = substr($pot, strlen(self::root()) + 1); + } + } + + self::assertSame([], $uncontributed, '.pot without ComponentLanguageFileDirectory contribution'); + } + + #[DataProvider('moduleProvider')] + public function testModuleIsContributedExactlyOnce(string $module): void + { + $contributions = self::contributions()['modules'][$module]; + self::assertCount(1, $contributions, "module '$module' contributed more than once: " . json_encode(array_column($contributions, 'file'))); + } + + #[DataProvider('moduleProvider')] + public function testModuleShipsPotAndEnglishPo(string $module): void + { + foreach (self::contributions()['modules'][$module] as ['lang_dir' => $dir, 'pattern' => $pattern]) { + self::assertFileExists("$dir/" . MigratedLanguageFilePaths::templateFileName($pattern, $module), "module '$module': .pot missing"); + self::assertFileExists("$dir/" . sprintf($pattern, 'en') . '.po', "module '$module': English .po missing"); + } + } + + #[DataProvider('moduleProvider')] + public function testModuleIsRemovedFromLegacyLangFiles(string $module): void + { + $offending = []; + foreach (glob(self::root() . '/lang/ilias_*.lang') ?: [] as $file) { + foreach (new SplFileObject($file) as $number => $line) { + if (str_starts_with((string) $line, $module . '#:#')) { + $offending[] = basename($file) . ':' . ($number + 1); + } + } + } + + self::assertSame([], $offending, "module '$module' still has lines in lang/ilias_*.lang"); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/ShippedTranslationsBuildTest.php b/components/ILIAS/Language/tests/ComponentTranslation/ShippedTranslationsBuildTest.php new file mode 100644 index 000000000000..57dc6a93ad57 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/ShippedTranslationsBuildTest.php @@ -0,0 +1,884 @@ +root = sys_get_temp_dir() . '/ilias_shipped_build_test_' . bin2hex(random_bytes(6)); + mkdir($this->root, 0775, true); + $this->artifacts = MigratedLanguageFilePaths::shippedArtifactDirectory($this->root); + } + + protected function tearDown(): void + { + MigratedPoFixture::removeDirectory($this->root); + MigratedPoFixture::resetRuntime(); + } + + /** + * @param array $entries + */ + private function ship(string $module, string $lang_key, array $entries): void + { + MigratedPoFixture::writePo($this->root . '/' . $module . '/' . $module . '_' . $lang_key . '.po', MigratedPoFixture::catalog($module, $entries)); + } + + /** + * @param list $modules + * @param list $messages filled with what the build informs about + * @return array{build: ?string, compiled: int, unchanged: bool, rebuilt: bool, removed: int, warnings: list, collisions: list, collision_summary: list, manifest: ?string} + */ + private function build(array $modules, ?string $locale_source = null, array &$messages = [], ?\Closure $on_inform = null): array + { + $manager = new LanguageFileDirectoryManager( + new CustomizingLanguageFileDirectory(), + ...array_map(static fn(string $module): LanguageFileDirectory => MigratedPoFixture::directory($module, $module . '/'), $modules) + ); + + return (new ShippedTranslationsBuild($manager, $this->root, new ShippedTranslations(), $locale_source))->run( + static function (string $message) use (&$messages, $on_inform): void { + $messages[] = $message; + if ($on_inform !== null) { + $on_inform($message); + } + } + ); + } + + /** + * @return list the names in the artifact directory + */ + private function artifactEntries(): array + { + return array_values(array_diff(scandir($this->artifacts) ?: [], ['.', '..'])); + } + + private function pointerFile(): string + { + return MigratedLanguageFilePaths::buildPointerFile($this->artifacts); + } + + private function buildDirectory(string $build): string + { + return MigratedLanguageFilePaths::buildDirectory($this->artifacts, $build); + } + + /** + * @return array + */ + private function manifest(string $build): array + { + return json_decode((string) file_get_contents($this->buildDirectory($build) . '/manifest.json'), true, 512, JSON_THROW_ON_ERROR); + } + + private function breakPo(string $module, string $lang_key): void + { + file_put_contents($this->root . '/' . $module . '/' . $module . '_' . $lang_key . '.po', "msgid \"kaputt\n"); + } + + /** + * @return array + */ + private function servedValues(string $build, string $module, string $lang_key): array + { + return MigratedPoFixture::readMo(MigratedLanguageFilePaths::buildMoFile($this->buildDirectory($build), $module, $lang_key)); + } + + /** + * A locale directory the C library cannot load (see findLocaleSource(): it only looks for the file). + */ + private function brokenLocaleSource(): string + { + $source = $this->root . '/broken-locale'; + mkdir($source, 0775, true); + file_put_contents($source . '/LC_CTYPE', 'this is no locale file'); + + return $source; + } + + public function testIdentifiersWithDifferentValuesInSeveralModulesAreListedPerLanguageAndOnEveryRun(): void + { + $this->ship('mca', 'de', ['dup' => 'Eins', 'same' => 'Gleich', 'only_a' => 'A']); + $this->ship('mcb', 'de', ['dup' => 'Zwei', 'same' => 'Gleich']); + $this->ship('mca', 'en', ['dup' => 'One']); + $this->ship('mcb', 'en', ['dup' => 'Two']); + $this->ship('mcc', 'en', ['dup' => 'One']); + + $first = $this->build(['mca', 'mcb', 'mcc']); + $second = $this->build(['mca', 'mcb', 'mcc']); + + $expected = [ + 'Key "dup" has different values in the modules mca, mcb (languages: de) - txt() serves the one of the module loaded last.', + 'Key "dup" has different values in the modules mca, mcb, mcc (languages: en) - txt() serves the one of the module loaded last.', + ]; + $this->assertSame($expected, $first['collisions'], '"same" has one value everywhere, "only_a" is in one module only'); + $this->assertSame($expected, $second['collisions'], 'listed again by an unchanged build, not only by the one that wrote it'); + $this->assertSame($expected, $this->manifest((string) $first['build'])['collisions'] ?? null, 'kept in the manifest of the build'); + } + + public function testCollisionsAreSummarizedPerSetOfModulesOnlyByTheRunThatWritesTheBuild(): void + { + $this->ship('mca', 'de', ['one' => 'A1', 'two' => 'A2', 'three' => 'A3']); + $this->ship('mcb', 'de', ['one' => 'B1', 'two' => 'B2']); + $this->ship('mcc', 'de', ['three' => 'C3']); + + $first = $this->build(['mca', 'mcb', 'mcc']); + $second = $this->build(['mca', 'mcb', 'mcc']); + + $this->assertTrue($first['rebuilt']); + $this->assertCount(3, $first['collisions']); + $this->assertSame([ + '2 key(s) with different values in the modules mca, mcb - txt() serves the one of the module loaded last: one, two', + '1 key(s) with different values in the modules mca, mcc - txt() serves the one of the module loaded last: three', + ], $first['collision_summary']); + + $this->assertFalse($second['rebuilt']); + $this->assertSame([], $second['collision_summary']); + $this->assertSame($first['collisions'], $second['collisions']); + $this->assertSame($this->buildDirectory((string) $first['build']) . '/manifest.json', $second['manifest']); + $this->assertFileExists((string) $second['manifest']); + } + + public function testCountsTheMarkupWarningsOfABuildApartFromTheOthers(): void + { + $this->ship('mca', 'de', ['greeting' => 'Hallo']); + $this->ship('mcb', 'de', ['plain' => 'Hallo']); + $this->breakPo('mcb', 'de'); + + $result = $this->build(['mca', 'mcb']); + + $markup = array_values(array_diff($result['warnings'], $result['other_warnings'])); + $this->assertSame(1, $result['markup_warnings']); + $this->assertCount(1, $markup); + $this->assertStringContainsString('(module "mca", key "greeting")', $markup[0]); + $this->assertGreaterThan(count($markup), count($result['warnings']), 'the broken .po warning is no markup warning'); + } + + public function testOnlyFilesOfNoModuleInTheSameDirectoryAreReportedAsWithoutLanguageKey(): void + { + MigratedPoFixture::writePo($this->root . '/shared/chat_de.po', MigratedPoFixture::catalog('chat', ['room' => 'Raum'])); + MigratedPoFixture::writePo($this->root . '/shared/chat_adm_de.po', MigratedPoFixture::catalog('chat_adm', ['server' => 'Server'])); + MigratedPoFixture::writePo($this->root . '/shared/chat_pt_BR.po', MigratedPoFixture::catalog('chat', ['room' => 'Sala'])); + $manager = new LanguageFileDirectoryManager( + new CustomizingLanguageFileDirectory(), + MigratedPoFixture::directory('chat', 'shared/'), + MigratedPoFixture::directory('chat_adm', 'shared/') + ); + $messages = []; + + $result = (new ShippedTranslationsBuild($manager, $this->root, new ShippedTranslations()))->run( + static function (string $message) use (&$messages): void { + $messages[] = $message; + } + ); + + $this->assertSame(2, $result['compiled']); + $without_key = array_values(array_filter($messages, static fn(string $m): bool => str_contains($m, 'no valid language key'))); + $this->assertSame( + ['WARNING: "shared/chat_pt_BR.po" is not compiled: its name contains no valid language key.'], + $without_key, + '"chat_adm_de.po" matches "chat_*.po" but belongs to the module "chat_adm"' + ); + } + + public function testABuildNativeGettextCannotServeLeavesCurrentAndThePreviousBuildAsTheyAreAndNoRemnants(): void + { + $this->ship('mfa', 'de', ['greeting' => 'Hallo']); + $good = $this->build(['mfa']); + $pointer_before = (string) file_get_contents($this->pointerFile()); + $entries_before = $this->artifactEntries(); + $this->ship('mfa', 'de', ['greeting' => 'Moin']); + // as in a fresh Setup process: nothing active that could let the broken locale pass + NativeGettext::resetForTests(); + + try { + $this->build(['mfa'], $this->brokenLocaleSource()); + $this->fail('the build must not be accepted'); + } catch (RuntimeException $e) { + $this->assertStringContainsString('Native gettext is not available', $e->getMessage()); + } + + $this->assertSame($pointer_before, (string) file_get_contents($this->pointerFile())); + $this->assertSame($entries_before, $this->artifactEntries(), 'neither the rejected build nor a temporary directory is left'); + $this->assertDirectoryExists($this->buildDirectory((string) $good['build'])); + } + + public function testABuildWithoutAnyTranslatedValueCannotBeCheckedAndIsRefused(): void + { + $this->ship('mfa', 'de', ['greeting' => 'Hallo']); + $this->build(['mfa']); + $pointer_before = (string) file_get_contents($this->pointerFile()); + $entries_before = $this->artifactEntries(); + // a value equal to its identifier is no proof of anything, an empty one is no message at all + $this->ship('mfa', 'de', ['same' => 'same', 'empty' => '']); + + try { + $this->build(['mfa']); + $this->fail('the build must not be accepted'); + } catch (RuntimeException $e) { + $this->assertStringContainsString('nothing to check native gettext with', $e->getMessage()); + } + + $this->assertSame($pointer_before, (string) file_get_contents($this->pointerFile())); + $this->assertSame($entries_before, $this->artifactEntries(), 'the aborted build left nothing'); + } + + public function testMissingLocaleOfTheCLibraryAbortsBeforeAnythingIsWritten(): void + { + $this->ship('mfa', 'de', ['greeting' => 'Hallo']); + $this->build(['mfa']); + $pointer_before = (string) file_get_contents($this->pointerFile()); + $entries_before = $this->artifactEntries(); + + try { + $this->build(['mfa'], $this->root . '/no-such-locale'); + $this->fail('a build without a locale to ship must not be accepted'); + } catch (RuntimeException $e) { + $this->assertStringContainsString('"C.utf8" of the C library was not found', $e->getMessage()); + $this->assertStringContainsString('no-such-locale', $e->getMessage()); + } + + $this->assertSame($pointer_before, (string) file_get_contents($this->pointerFile())); + $this->assertSame($entries_before, $this->artifactEntries()); + } + + public function testAnArtifactDirectoryThatCannotBeLockedAbortsTheBuild(): void + { + $this->ship('mfa', 'de', ['greeting' => 'Hallo']); + mkdir($this->artifacts . '/build.lock', 0775, true); + + try { + $this->build(['mfa']); + $this->fail('a build must not run without its lock'); + } catch (RuntimeException $e) { + $this->assertStringContainsString('Could not lock', $e->getMessage()); + } + + $this->assertFileDoesNotExist($this->pointerFile()); + } + + public function testBuildsAreSerializedByTheLockFileAndTheLockIsReleasedAfterwards(): void + { + $this->ship('mla', 'de', ['greeting' => 'Hallo']); + $lock_file = $this->artifacts . '/build.lock'; + $held_during_the_build = null; + + // the warning for the invalid module name is informed while the build runs + $this->build(['mla', 'invalid module'], on_inform: function () use ($lock_file, &$held_during_the_build): void { + $handle = fopen($lock_file, 'c'); + $this->assertNotFalse($handle); + $held_during_the_build ??= !flock($handle, LOCK_EX | LOCK_NB); + fclose($handle); + }); + + $this->assertTrue($held_during_the_build, 'nobody else can lock while a build runs'); + $handle = fopen($lock_file, 'c'); + $this->assertNotFalse($handle); + $this->assertTrue(flock($handle, LOCK_EX | LOCK_NB), 'released after the build'); + fclose($handle); + } + + public function testTheLockIsReleasedAfterAFailedBuildToo(): void + { + $this->ship('mla', 'de', ['greeting' => 'Hallo']); + + try { + $this->build(['mla'], $this->root . '/no-such-locale'); + } catch (RuntimeException) { + } + + $handle = fopen($this->artifacts . '/build.lock', 'c'); + $this->assertNotFalse($handle); + $this->assertTrue(flock($handle, LOCK_EX | LOCK_NB)); + fclose($handle); + } + + public function testOnlyTheCurrentAndThePreviousBuildStayAndUnrelatedFilesAreLeftAlone(): void + { + $builds = []; + foreach (['Eins', 'Zwei', 'Drei'] as $value) { + $this->ship('mba', 'de', ['greeting' => $value]); + $result = $this->build(['mba']); + $builds[] = (string) $result['build']; + if ($value === 'Eins') { + // things in the artifact directory that are none of the build's business + mkdir($this->artifacts . '/keep-me'); + file_put_contents($this->artifacts . '/keep-me.txt', 'x'); + mkdir($this->artifacts . '/de'); + file_put_contents($this->artifacts . '/de/notes.txt', 'not a catalog'); + // the former layout `/.mo` is a build's business + mkdir($this->artifacts . '/fr'); + file_put_contents($this->artifacts . '/fr/old.mo', 'catalog'); + } + } + + $this->assertCount(3, array_unique($builds)); + $this->assertDirectoryDoesNotExist($this->buildDirectory($builds[0]), 'two builds back'); + $this->assertDirectoryExists($this->buildDirectory($builds[1]), 'the previous build: running requests may still read it'); + $this->assertDirectoryExists($this->buildDirectory($builds[2])); + $pointer = ShippedTranslationsBuild::readPointer($this->artifacts); + $this->assertSame($builds[2], $pointer['build'] ?? null); + $this->assertSame($builds[1], $pointer['previous'] ?? null); + $expected = ['build.lock', 'current.json', 'de', 'keep-me', 'keep-me.txt', $builds[1], $builds[2]]; + $actual = $this->artifactEntries(); + sort($expected); + sort($actual); + $this->assertSame($expected, $actual); + } + + public function testASecondRunWithNothingChangedRewritesNothing(): void + { + $this->ship('mua', 'de', ['greeting' => 'Hallo']); + $first = $this->build(['mua']); + $mo = MigratedLanguageFilePaths::buildMoFile($this->buildDirectory((string) $first['build']), 'mua', 'de'); + $pointer = $this->pointerFile(); + $identity = [fileinode($mo), fileinode($pointer)]; + clearstatcache(); + + $second = $this->build(['mua']); + + $this->assertFalse($first['unchanged']); + $this->assertSame(1, $first['compiled']); + $this->assertTrue($second['unchanged']); + $this->assertSame(0, $second['compiled']); + $this->assertSame(0, $second['removed']); + $this->assertSame($first['build'], $second['build']); + $this->assertSame($identity, [fileinode($mo), fileinode($pointer)], 'neither the build nor current.json were written again'); + } + + public function testRebuildingAnEarlierStateSwitchesBackWithoutLosingThePreviousBuild(): void + { + $this->ship('mra', 'de', ['greeting' => 'Hallo']); + $a = (string) $this->build(['mra'])['build']; + $this->ship('mra', 'de', ['greeting' => 'Moin']); + $b = (string) $this->build(['mra'])['build']; + $this->ship('mra', 'de', ['greeting' => 'Hallo']); + + $c = $this->build(['mra']); + + $this->assertSame($a, $c['build'], 'the build id is a fingerprint of the content'); + $pointer = ShippedTranslationsBuild::readPointer($this->artifacts); + $this->assertSame($a, $pointer['build'] ?? null); + $this->assertSame($b, $pointer['previous'] ?? null); + $this->assertDirectoryExists($this->buildDirectory($b)); + $this->assertFalse($c['unchanged'], 'the build served before was another one'); + } + + public function testServesShippedPoIsTrueOnlyForThePoTheBuildWasMadeFrom(): void + { + $po = $this->root . '/msp/msp_de.po'; + $this->ship('msp', 'de', ['greeting' => 'Hallo']); + $this->ship('msp', 'en', ['greeting' => 'Hello']); + $serves = fn(string $module, string $lang_key, string $file): bool => ShippedTranslationsBuild::servesShippedPo($this->artifacts, $module, $lang_key, $file); + + $this->assertFalse($serves('msp', 'de', $po), 'no build at all'); + + $this->build(['msp']); + $this->assertTrue($serves('msp', 'de', $po)); + $this->assertTrue($serves('msp', 'en', $this->root . '/msp/msp_en.po')); + $this->assertFalse($serves('msp', 'de', $this->root . '/msp/msp_en.po'), 'the hash of another language'); + $this->assertFalse($serves('msp', 'fr', $po), 'a language that was not built'); + $this->assertFalse($serves('other', 'de', $po), 'a module that was not built'); + $this->assertFalse($serves('msp', 'de', $this->root . '/msp/missing.po'), 'a file that does not exist'); + + $this->ship('msp', 'de', ['greeting' => 'Moin']); + $this->assertFalse($serves('msp', 'de', $po), 'written after the build (e.g. by merge)'); + $this->assertTrue($serves('msp', 'en', $this->root . '/msp/msp_en.po'), 'another language is not affected'); + + $this->build(['msp']); + $this->assertTrue($serves('msp', 'de', $po)); + } + + /** The manifests are cached per build directory: each variant changes the file before the first call. */ + public function testServesShippedPoIsFalseWhenTheManifestOfTheCurrentBuildHasNoHashes(): void + { + $this->ship('msp', 'de', ['greeting' => 'Hallo']); + $build = (string) $this->build(['msp'])['build']; + $manifest = $this->manifest($build); + unset($manifest['hashes']); + file_put_contents($this->buildDirectory($build) . '/manifest.json', json_encode($manifest)); + + $this->assertFalse(ShippedTranslationsBuild::servesShippedPo($this->artifacts, 'msp', 'de', $this->root . '/msp/msp_de.po')); + } + + public function testServesShippedPoIsFalseWhenTheManifestOfTheCurrentBuildIsGone(): void + { + $this->ship('msp', 'de', ['greeting' => 'Hallo']); + $build = (string) $this->build(['msp'])['build']; + unlink($this->buildDirectory($build) . '/manifest.json'); + + $this->assertFalse(ShippedTranslationsBuild::servesShippedPo($this->artifacts, 'msp', 'de', $this->root . '/msp/msp_de.po')); + } + + public function testCurrentJsonHoldsExactlyTheBuildThePreviousBuildAndTheModules(): void + { + $this->ship('mpa', 'de', ['greeting' => 'Hallo']); + $this->ship('mpa', 'en', ['greeting' => 'Hello']); + $first = (string) $this->build(['mpa'])['build']; + $this->ship('mpa', 'de', ['greeting' => 'Moin']); + $second = (string) $this->build(['mpa'])['build']; + + $data = json_decode((string) file_get_contents($this->pointerFile()), true, 512, JSON_THROW_ON_ERROR); + + $keys = array_keys($data); + sort($keys); + $this->assertSame(['build', 'modules', 'previous', 'shipped'], $keys); + sort($data['modules']['mpa']); + $this->assertSame(['build' => $second, 'previous' => $first, 'modules' => ['mpa' => ['de', 'en']], 'shipped' => ['mpa']], $data); + } + + /** + * @return array, 1: list|string|null}> the "shipped" entry written, what readPointer() gives + */ + public static function writtenShippedLists(): array + { + return [ + 'written before the list existed' => [[], null], + 'null' => [['shipped' => null], null], + 'invalid and non-string entries are dropped' => [['shipped' => ['mpa', 'Bad Name', 5, '../x', 'mpb']], ['mpa', 'mpb']], + // only the list is lost: the runtime falls back to the templates + 'not a list' => [['shipped' => ['a' => 'mpa']], null], + 'a string' => [['shipped' => 'mpa'], null], + ]; + } + + /** + * @param array $changes + * @param list|string|null $expected "invalid": the whole pointer is rejected + */ + #[DataProvider('writtenShippedLists')] + public function testReadPointerTakesOnlyValidModulesOfTheShippedList(array $changes, array|string|null $expected): void + { + $this->ship('mpa', 'de', ['greeting' => 'Hallo']); + $this->build(['mpa']); + $data = json_decode((string) file_get_contents($this->pointerFile()), true, 512, JSON_THROW_ON_ERROR); + unset($data['shipped']); + file_put_contents($this->pointerFile(), json_encode($changes + $data)); + + $pointer = ShippedTranslationsBuild::readPointer($this->artifacts); + + if ($expected === 'invalid') { + $this->assertNull($pointer); + } else { + $this->assertNotNull($pointer); + $this->assertSame($expected, $pointer['shipped']); + $this->assertSame(['mpa' => ['de']], $pointer['modules'], 'the rest of an old file is still read'); + } + } + + public function testEveryContributedModuleIsRecordedAlsoWithoutAnyPoAndWithoutABuild(): void + { + $this->ship('mpa', 'de', ['greeting' => 'Hallo']); + mkdir($this->root . '/mpz', 0775, true); + + $this->build(['mpz', 'mpa']); + + $this->assertSame(['mpa', 'mpz'], ShippedTranslationsBuild::readPointer($this->artifacts)['shipped'] ?? null, 'sorted, "mpz" has no .po'); + + MigratedPoFixture::removeDirectory($this->root . '/mpa'); + $result = $this->build(['mpz', 'mpa']); + + $this->assertNull($result['build']); + $this->assertSame( + ['build' => null, 'previous' => null, 'modules' => [], 'shipped' => ['mpa', 'mpz']], + ShippedTranslationsBuild::readPointer($this->artifacts), + 'without any .po no build, the contributions are still recorded' + ); + } + + private function directoryWithPattern(string $path, string $pattern): LanguageFileDirectory + { + return new class ($path, $pattern) implements LanguageFileDirectory, NamesShippedLanguageFiles { + public function __construct(private string $path, private string $pattern) + { + } + + public function getPrefix(): string + { + return 'mtp'; + } + + public function getPath(): string + { + return $this->path; + } + + public function getSuffix(): string + { + return ''; + } + + public function isLocal(): bool + { + return false; + } + + public function getShippedFileNamePattern(): string + { + return $this->pattern; + } + }; + } + + /** + * @return array directory, pattern of the .po files, + * template to create, whether a warning is expected + */ + public static function templateLayouts(): array + { + return [ + 'lang/.pot of a component' => ['components/Vendor/Comp/lang/', null, 'mtp.pot', false], + 'no template' => ['components/Vendor/Comp/lang/', null, '', true], + 'template outside components///lang/' => ['mtp/', null, 'mtp.pot', true], + 'template named by the pattern, not the module' => ['components/Vendor/Comp/lang/', 'ilias_%s', 'ilias.pot', true], + ]; + } + + #[DataProvider('templateLayouts')] + public function testAContributionWithoutItsTemplateInTheComponentsLangDirectoryIsWarnedAbout( + string $path, + ?string $pattern, + string $template, + bool $expect_warning + ): void { + MigratedPoFixture::writePo( + $this->root . '/' . $path . ($pattern === null ? 'mtp_de' : 'ilias_de') . '.po', + MigratedPoFixture::catalog('mtp', ['greeting' => 'Hallo']) + ); + if ($template !== '') { + file_put_contents($this->root . '/' . $path . $template, ''); + } + $directory = $pattern === null + ? MigratedPoFixture::directory('mtp', $path) + : $this->directoryWithPattern($path, $pattern); + $messages = []; + + (new ShippedTranslationsBuild( + new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), $directory), + $this->root, + new ShippedTranslations() + ))->run(static function (string $message) use (&$messages): void { + $messages[] = $message; + }); + + $warnings = array_values(array_filter($messages, static fn(string $m): bool => str_contains($m, 'has no template'))); + $this->assertSame( + $expect_warning ? ['WARNING: Module "mtp" has no template "components///lang/mtp.pot" - without a build Setup and CLI do not recognise it as shipped.'] : [], + $warnings + ); + } + + /** The file name pattern is invalid, so nothing is compiled - the module is still recorded as shipped (never read from the database). */ + public function testAContributionWithAnInvalidFileNamePatternIsStillRecordedAsShipped(): void + { + $messages = []; + + (new ShippedTranslationsBuild( + new LanguageFileDirectoryManager(new CustomizingLanguageFileDirectory(), $this->directoryWithPattern('mtp/', '%s_%s')), + $this->root, + new ShippedTranslations() + ))->run(static function (string $message) use (&$messages): void { + $messages[] = $message; + }); + + $this->assertNotEmpty(array_filter($messages, static fn(string $m): bool => str_contains($m, 'The language files of module "mtp" are not compiled'))); + $this->assertSame(['mtp'], ShippedTranslationsBuild::readPointer($this->artifacts)['shipped'] ?? null); + } + + public function testReadPointerIgnoresFieldsAFormerVersionWroteIntoCurrentJson(): void + { + $this->ship('mpa', 'de', ['greeting' => 'Hallo']); + $build = (string) $this->build(['mpa'])['build']; + $pointer = ShippedTranslationsBuild::readPointer($this->artifacts); + $data = json_decode((string) file_get_contents($this->pointerFile()), true, 512, JSON_THROW_ON_ERROR); + $data['hashes'] = ['mpa' => ['de' => str_repeat('a', 64)]]; + $data['warnings'] = ['old warning']; + $data['collisions'] = ['old collision']; + file_put_contents($this->pointerFile(), json_encode($data)); + + $this->assertSame(['build' => $build, 'previous' => null, 'modules' => ['mpa' => ['de']], 'shipped' => ['mpa']], ShippedTranslationsBuild::readPointer($this->artifacts)); + $this->assertSame($pointer, ShippedTranslationsBuild::readPointer($this->artifacts)); + $this->assertTrue($this->build(['mpa'])['unchanged'], 'a current.json of the former layout is no reason to rebuild'); + } + + public function testABrokenPoIsServedFromTheServedBuildAndIsNotCountedAsCompiled(): void + { + $this->ship('mfa', 'de', ['greeting' => 'Hallo']); + $this->ship('mfb', 'de', ['greeting' => 'Servus']); + $good = (string) $this->build(['mfa', 'mfb'])['build']; + $this->breakPo('mfa', 'de'); + + $result = $this->build(['mfa', 'mfb']); + + $this->assertNotSame($good, $result['build']); + $this->assertSame(['greeting' => 'Hallo'], $this->servedValues((string) $result['build'], 'mfa', 'de')); + $this->assertSame(['greeting' => 'Servus'], $this->servedValues((string) $result['build'], 'mfb', 'de')); + $this->assertSame(1, $result['compiled'], 'only "mfb"; the catalog of "mfa" is taken over, not compiled'); + $this->assertCount(1, $result['warnings']); + $this->assertStringContainsString('mfa_de.po', $result['warnings'][0]); + $this->assertStringContainsString($good, $result['warnings'][0], 'names the build it is served from'); + $this->assertSame($result['warnings'], $this->manifest((string) $result['build'])['warnings']); + $this->assertSame(['mfa' => ['de'], 'mfb' => ['de']], ShippedTranslationsBuild::readPointer($this->artifacts)['modules'] ?? null); + $this->assertSame($good, ShippedTranslationsBuild::readPointer($this->artifacts)['previous'] ?? null); + $this->assertFalse(ShippedTranslationsBuild::servesShippedPo($this->artifacts, 'mfa', 'de', $this->root . '/mfa/mfa_de.po'), 'the broken .po is not what is served'); + $this->assertTrue(ShippedTranslationsBuild::servesShippedPo($this->artifacts, 'mfb', 'de', $this->root . '/mfb/mfb_de.po')); + } + + public function testTheFallbackChainsOverSeveralBuildsAndWarnsOnEveryRun(): void + { + $this->ship('mfa', 'de', ['greeting' => 'Hallo']); + $this->ship('mfb', 'de', ['greeting' => 'Servus']); + $this->build(['mfa', 'mfb']); + $this->breakPo('mfa', 'de'); + $second = $this->build(['mfa', 'mfb']); + // another module changes, the broken file stays broken: the catalog of "mfa" comes from the second build + $this->ship('mfb', 'de', ['greeting' => 'Moin']); + + $third = $this->build(['mfa', 'mfb']); + + $this->assertNotSame($second['build'], $third['build']); + $this->assertSame(['greeting' => 'Hallo'], $this->servedValues((string) $third['build'], 'mfa', 'de')); + $this->assertSame(['greeting' => 'Moin'], $this->servedValues((string) $third['build'], 'mfb', 'de')); + $this->assertCount(1, $third['warnings']); + $this->assertFalse(ShippedTranslationsBuild::servesShippedPo($this->artifacts, 'mfa', 'de', $this->root . '/mfa/mfa_de.po')); + // an unchanged run repeats the warning + $this->assertSame($third['warnings'], $this->build(['mfa', 'mfb'])['warnings']); + } + + public function testABrokenPoIsServedFromThePreviousBuildWhenTheServedOneIsDamaged(): void + { + $this->ship('mfa', 'de', ['greeting' => 'Hallo']); + $this->ship('mfb', 'de', ['greeting' => 'Servus']); + $first = (string) $this->build(['mfa', 'mfb'])['build']; + $this->ship('mfb', 'de', ['greeting' => 'Moin']); + $second = (string) $this->build(['mfa', 'mfb'])['build']; + // the C library keeps what it read from a path: damage a file of a path it has not seen + MigratedPoFixture::moveArtifactsToFreshDirectory(); + $this->artifacts = MigratedLanguageFilePaths::shippedArtifactDirectory($this->root); + $damaged = MigratedLanguageFilePaths::buildMoFile($this->buildDirectory($second), 'mfa', 'de'); + $content = (string) file_get_contents($damaged); + file_put_contents($damaged, substr($content, 0, -1) . ($content[-1] === "\x00" ? "\x01" : "\x00")); + $this->breakPo('mfa', 'de'); + + $result = $this->build(['mfa', 'mfb']); + + $this->assertSame(['greeting' => 'Hallo'], $this->servedValues((string) $result['build'], 'mfa', 'de')); + $this->assertStringContainsString($first, $result['warnings'][0], 'the intact previous build, not the damaged served one'); + } + + public function testADamagedCatalogOfTheFormerBuildIsNotTakenOver(): void + { + $this->ship('mfa', 'de', ['greeting' => 'Hallo']); + $good = (string) $this->build(['mfa'])['build']; + MigratedPoFixture::moveArtifactsToFreshDirectory(); + $this->artifacts = MigratedLanguageFilePaths::shippedArtifactDirectory($this->root); + $damaged = MigratedLanguageFilePaths::buildMoFile($this->buildDirectory($good), 'mfa', 'de'); + $content = (string) file_get_contents($damaged); + file_put_contents($damaged, substr($content, 0, -1) . ($content[-1] === "\x00" ? "\x01" : "\x00")); + $this->assertSame(strlen($content), strlen((string) file_get_contents($damaged)), 'precondition: same size, other hash'); + $this->breakPo('mfa', 'de'); + $this->ship('mfb', 'de', ['greeting' => 'Servus']); + + $result = $this->build(['mfa', 'mfb']); + + $this->assertCount(1, $result['warnings']); + $this->assertStringContainsString('"mfa" is not served for "de"', $result['warnings'][0]); + $this->assertSame(['mfb' => ['de']], ShippedTranslationsBuild::readPointer($this->artifacts)['modules'] ?? null, 'the damaged catalog is not taken over'); + } + + public function testABrokenPoWithoutAFormerBuildIsNotServedAndTheBuildGoesOn(): void + { + $this->ship('mfa', 'de', ['greeting' => 'Hallo']); + $this->ship('mfb', 'de', ['greeting' => 'Servus']); + $this->breakPo('mfb', 'de'); + + $result = $this->build(['mfa', 'mfb']); + + $this->assertNotNull($result['build']); + $this->assertSame(1, $result['compiled']); + $this->assertCount(1, $result['warnings']); + $this->assertStringContainsString('mfb_de.po', $result['warnings'][0]); + $this->assertStringContainsString('"mfb" is not served for "de"', $result['warnings'][0]); + $this->assertSame(['mfa' => ['de']], ShippedTranslationsBuild::readPointer($this->artifacts)['modules'] ?? null); + $this->assertSame(['greeting' => 'Hallo'], $this->servedValues((string) $result['build'], 'mfa', 'de')); + $this->assertFalse(ShippedTranslationsBuild::servesShippedPo($this->artifacts, 'mfb', 'de', $this->root . '/mfb/mfb_de.po')); + } + + public function testABrokenPoOfANewModuleIsNotServedAndTheBuildIsSwitched(): void + { + $this->ship('mfa', 'de', ['greeting' => 'Hallo']); + $good = (string) $this->build(['mfa'])['build']; + $this->ship('mfb', 'de', ['greeting' => 'Servus']); + $this->breakPo('mfb', 'de'); + $this->ship('mfa', 'de', ['greeting' => 'Moin']); + + $result = $this->build(['mfa', 'mfb']); + + $this->assertNotSame($good, $result['build']); + $this->assertStringContainsString('"mfb" is not served for "de"', $result['warnings'][0] ?? ''); + $pointer = ShippedTranslationsBuild::readPointer($this->artifacts); + $this->assertSame($result['build'], $pointer['build'] ?? null); + $this->assertSame($good, $pointer['previous'] ?? null); + $this->assertSame(['mfa' => ['de']], $pointer['modules'] ?? null); + $this->assertSame(['greeting' => 'Moin'], $this->servedValues((string) $result['build'], 'mfa', 'de')); + } + + /** + * Builds "mfa"/"mfb" and moves the artifacts to a path the C library has not seen (it caches per path). + * + * @return array{string, string} build id, path of the `.mo` + */ + private function formerBuildWithMovedArtifacts(): array + { + $this->ship('mfa', 'de', ['greeting' => 'Hallo']); + $this->ship('mfb', 'de', ['greeting' => 'Servus']); + $good = (string) $this->build(['mfa', 'mfb'])['build']; + MigratedPoFixture::moveArtifactsToFreshDirectory(); + $this->artifacts = MigratedLanguageFilePaths::shippedArtifactDirectory($this->root); + + return [$good, MigratedLanguageFilePaths::buildMoFile($this->buildDirectory($good), 'mfa', 'de')]; + } + + /** + * @param array $changes + */ + private function changeManifest(string $build, array $changes): void + { + file_put_contents( + $this->buildDirectory($build) . '/manifest.json', + json_encode($changes + $this->manifest($build), JSON_THROW_ON_ERROR) + ); + } + + private function assertMfaIsNotServed(): void + { + $result = $this->build(['mfa', 'mfb']); + + $this->assertCount(1, $result['warnings']); + $this->assertStringContainsString('"mfa" is not served for "de"', $result['warnings'][0]); + $this->assertSame(['mfb' => ['de']], ShippedTranslationsBuild::readPointer($this->artifacts)['modules'] ?? null); + } + + public function testACatalogOfABuildCompiledByOtherCodeIsNotTakenOver(): void + { + [$good] = $this->formerBuildWithMovedArtifacts(); + $this->changeManifest($good, ['compatibility' => 'compiled by other code']); + $this->breakPo('mfa', 'de'); + + $this->assertMfaIsNotServed(); + } + + /** Control of the tests above: with nothing manipulated the catalog of the former build is taken over. */ + public function testTheCatalogOfAFormerBuildOfTheSameCodeIsTakenOver(): void + { + [$good] = $this->formerBuildWithMovedArtifacts(); + $this->breakPo('mfa', 'de'); + + $result = $this->build(['mfa', 'mfb']); + + $this->assertCount(1, $result['warnings']); + $this->assertStringContainsString($good, $result['warnings'][0], 'names the build it is served from'); + $this->assertSame(['mfa' => ['de'], 'mfb' => ['de']], ShippedTranslationsBuild::readPointer($this->artifacts)['modules'] ?? null); + $this->assertSame(['greeting' => 'Hallo'], $this->servedValues((string) $result['build'], 'mfa', 'de')); + } + + /** The value a build writes into its manifest covers the format version and the files of the classes that make up a catalog. */ + public function testTheCompatibilityOfABuildHashesTheFormatVersionAndTheCatalogClasses(): void + { + $this->ship('mfa', 'de', ['greeting' => 'Hallo']); + $build = (string) $this->build(['mfa'])['build']; + + $reflection = new \ReflectionClass(ShippedTranslationsBuild::class); + $classes = $reflection->getReflectionConstant('CATALOG_CLASSES')->getValue(); + $hashes = array_map( + static fn(string $class): string => hash_file('sha256', (string) (new \ReflectionClass($class))->getFileName()), + $classes + ); + $expected = hash('sha256', $reflection->getReflectionConstant('FORMAT_VERSION')->getValue() . '|' . hash('sha256', implode('|', $hashes))); + + $this->assertSame($expected, $this->manifest($build)['compatibility']); + } + + public function testTheCatalogClassesIncludeThoseThatDetermineTheBytesOfACatalog(): void + { + $classes = (new \ReflectionClass(ShippedTranslationsBuild::class))->getReflectionConstant('CATALOG_CLASSES')->getValue(); + + foreach ([TranslationCatalog::class, TranslationEntry::class, PluralForms::class, ShippedTranslations::class, TranslationMarkupPolicy::class] as $class) { + $this->assertContains($class, $classes); + } + } + + public function testACatalogOfABuildWithoutACompatibilityValueIsNotTakenOver(): void + { + [$good] = $this->formerBuildWithMovedArtifacts(); + $manifest = $this->manifest($good); + unset($manifest['compatibility']); + file_put_contents($this->buildDirectory($good) . '/manifest.json', json_encode($manifest, JSON_THROW_ON_ERROR)); + $this->breakPo('mfa', 'de'); + + $this->assertMfaIsNotServed(); + } + + public function testACatalogWithMarkupThePolicyDisallowsIsNotTakenOver(): void + { + [$good, $mo_file] = $this->formerBuildWithMovedArtifacts(); + // an intact file as far as the manifest tells (size and hash fit), but with a value no build would write + $mo = MigratedPoFixture::catalog('mfa', ['greeting' => 'Hallo'])->toMoString(); + file_put_contents($mo_file, $mo); + $manifest = $this->manifest($good); + $manifest['files'][substr($mo_file, strlen($this->buildDirectory($good)) + 1)] = [strlen($mo), hash('sha256', $mo)]; + file_put_contents($this->buildDirectory($good) . '/manifest.json', json_encode($manifest, JSON_THROW_ON_ERROR)); + $this->breakPo('mfa', 'de'); + + $this->assertMfaIsNotServed(); + } + + public function testACatalogReachedOnlyThroughASymlinkOutOfTheBuildIsNotTakenOver(): void + { + [, $mo_file] = $this->formerBuildWithMovedArtifacts(); + // size and hash fit: only the location tells + $outside = $this->root . '/outside.mo'; + rename($mo_file, $outside); + symlink($outside, $mo_file); + $this->breakPo('mfa', 'de'); + + $this->assertMfaIsNotServed(); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/ShippedTranslationsTest.php b/components/ILIAS/Language/tests/ComponentTranslation/ShippedTranslationsTest.php new file mode 100644 index 000000000000..ca99599517fb --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/ShippedTranslationsTest.php @@ -0,0 +1,158 @@ +root = sys_get_temp_dir() . '/ilias_shipped_translations_' . bin2hex(random_bytes(6)); + mkdir($this->root, 0775, true); + $this->shipped_translations = new ShippedTranslations(); + } + + protected function tearDown(): void + { + \MigratedPoFixture::removeDirectory($this->root); + } + + private function shippedPoPath(string $module, string $lang_key): string + { + return $this->root . '/' . $module . '_' . $lang_key . '.po'; + } + + /** + * Only the messages of the requested module (context) are compiled - a shipped `.po` may in + * principle carry other contexts, and they must not leak into a different module's artifact. + */ + /** + * @return array what native gettext serves for txt() from the compiled `.mo` + */ + private static function served(string $mo): array + { + $served = []; + foreach (\MigratedPoFixture::moStrings($mo) as [$original, $translated]) { + if ($original !== '' && !str_contains($original, "\x04")) { + $served[$original] = $translated; + } + } + + return $served; + } + + public function testCompileOnlyIncludesEntriesOfTheRequestedModuleContext(): void + { + $catalog = new TranslationCatalog(); + $catalog->add(\MigratedPoFixture::entry('itest', 'greeting', 'Hallo')); + $catalog->add(\MigratedPoFixture::entry('other', 'greeting', 'Servus')); + \MigratedPoFixture::writePo($this->shippedPoPath('itest', 'de'), $catalog); + + $compiled = $this->shipped_translations->compile($this->shippedPoPath('itest', 'de'), 'itest'); + + $this->assertSame(['greeting' => 'Hallo'], self::served($compiled['mo'])); + } + + /** + * compile() follows TranslationCatalog::toMoString(): fuzzy messages compiled in, empty + * translations left out - and serves every message without its context. + */ + public function testCompileMatchesToMoStringSemanticsForFuzzyAndEmptyMessages(): void + { + $catalog = \MigratedPoFixture::catalog('itest', [ + 'fuzzy_included' => ['value' => 'Ungeprüft', 'fuzzy' => true], + 'empty_excluded' => '', + 'normal' => 'Normal', + ]); + \MigratedPoFixture::writePo($this->shippedPoPath('itest', 'de'), $catalog); + + $compiled = $this->shipped_translations->compile($this->shippedPoPath('itest', 'de'), 'itest'); + + $this->assertSame( + ['fuzzy_included' => 'Ungeprüft', 'normal' => 'Normal'], + self::served($compiled['mo']) + ); + $this->assertSame(['fuzzy_included' => 'Ungeprüft', 'normal' => 'Normal'], $compiled['values']); + } + + /** + * A value with markup TranslationMarkupPolicy does not allow is compiled sanitized, and the + * callback is invoked with the identifier and the violations that were removed - a value that is + * already allowed never triggers it. + */ + public function testCompileSanitizesDisallowedMarkupAndReportsIt(): void + { + $catalog = \MigratedPoFixture::catalog('itest', [ + 'bad' => 'Hallo', + 'good' => 'Hallo', + ]); + \MigratedPoFixture::writePo($this->shippedPoPath('itest', 'de'), $catalog); + + $reported = []; + $compiled = $this->shipped_translations->compile( + $this->shippedPoPath('itest', 'de'), + 'itest', + static function (string $identifier, array $violations) use (&$reported): void { + $reported[$identifier] = $violations; + } + ); + + $translations = self::served($compiled['mo']); + $this->assertStringNotContainsString('assertStringContainsString('Hallo', $translations['bad']); + $this->assertSame('Hallo', $translations['good']); + $this->assertArrayHasKey('bad', $reported); + $this->assertArrayNotHasKey('good', $reported); + } + + /** A value cleaned to nothing (e.g. "shipped_translations->compileShippedCatalog( + \MigratedPoFixture::catalog('itest', ['role' => ' 'Altro']), + 'itest' + ); + + $this->assertSame(['other' => 'Altro'], $compiled['values']); + $this->assertArrayNotHasKey('role', self::served($compiled['mo'])); + } + + public function testCompileThrowsForAnUnreadableShippedPo(): void + { + $this->expectException(RuntimeException::class); + + $this->shipped_translations->compile($this->shippedPoPath('itest', 'de'), 'itest'); + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/TranslationInMemoryRepository.php b/components/ILIAS/Language/tests/ComponentTranslation/TranslationInMemoryRepository.php new file mode 100644 index 000000000000..ccee4a6606f7 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/TranslationInMemoryRepository.php @@ -0,0 +1,63 @@ +>> $texts module => language => identifier => value + * @param array>>> $plurals module => language => identifier => forms + */ + public function __construct( + private array $texts = [], + private array $plurals = [], + ) { + } + + public function getKeys(string $module, string $lang_key, ?string $client_data_dir): ?array + { + if (!isset($this->texts[$module][$lang_key]) && !isset($this->plurals[$module][$lang_key])) { + return null; + } + $keys = []; + foreach (array_merge(array_keys($this->texts[$module][$lang_key] ?? []), array_keys($this->plurals[$module][$lang_key] ?? [])) as $key) { + $keys[(string) $key] = $module; + } + + return $keys; + } + + public function getText(string $module, string $lang_key, string $key, ?string $client_data_dir): ?string + { + return $this->texts[$module][$lang_key][$key] ?? null; + } + + public function getPluralText(string $module, string $lang_key, string $key, int $n, ?string $client_data_dir): ?string + { + $forms = $this->plurals[$module][$lang_key][$key] ?? null; + + return $forms === null ? null : $forms[$n === 1 ? 0 : 1] ?? null; + } +} diff --git a/components/ILIAS/Language/tests/ComponentTranslation/TranslationMarkupPolicyTest.php b/components/ILIAS/Language/tests/ComponentTranslation/TranslationMarkupPolicyTest.php new file mode 100644 index 000000000000..98fbeeaa0f08 --- /dev/null +++ b/components/ILIAS/Language/tests/ComponentTranslation/TranslationMarkupPolicyTest.php @@ -0,0 +1,546 @@ +policy = new TranslationMarkupPolicy(); + } + + #[DataProvider('allowedValues')] + public function testAllowedValuesAreByteIdenticalAndHaveNoViolations(string $value): void + { + $this->assertTrue($this->policy->isAllowed($value)); + $this->assertSame([], $this->policy->findViolations($value)); + $this->assertSame($value, $this->policy->sanitize($value)); + } + + /** + * @return array + */ + public static function allowedValues(): array + { + return [ + 'plain text' => ['Hallo Welt'], + 'no angle bracket at all' => ['a <= b und c >= d, aber ohne Tag'], + 'less-than followed by a digit is not a tag start' => ['a<3 und b<5, kein Tag'], + 'a with allowed attributes' => ['Link'], + 'relative href' => ['Link'], + 'fragment only href' => ['Sprung'], + 'mailto href' => ['Mail'], + 'img with src and alt' => ['Logo'], + 'relative img src' => ['Logo'], + 'span with class and style' => ['wichtig'], + 'div align' => ['
Text
'], + 'p align' => ['

Text

'], + 'br self-closing stays as written' => ['Zeile 1
Zeile 2'], + 'br plain' => ['Zeile 1
Zeile 2'], + 'nested formatting' => ['fett kursiv'], + 'list' => ['
  • eins
  • zwei
'], + 'ordered list' => ['
  1. eins
'], + 'placeholder in href is a relative URL' => ['Platzhalter'], + 'gap tag without attributes' => [''], + 'b and i crossed (adoption agency, no surrounding element)' => ['x'], + 'li without end tag (omitted per HTML5)' => ['
  • eins
  • zwei
'], + 'p without end tag (omitted per HTML5)' => ['

Absatz eins

Absatz zwei'], + 'h3 heading' => ['

Überschrift

'], + 'sub and sup' => ['H2O und x2'], + 'code and pre' => ['
echo 1;
'], + ]; + } + + #[DataProvider('violatingValues')] + public function testViolatingValuesAreDetected(string $value, string $expected_violation_substring): void + { + $this->assertFalse($this->policy->isAllowed($value)); + $violations = $this->policy->findViolations($value); + $this->assertNotEmpty($violations); + $found = false; + foreach ($violations as $violation) { + if (str_contains($violation, $expected_violation_substring)) { + $found = true; + break; + } + } + $this->assertTrue($found, sprintf( + 'Expected a violation containing "%s", got: %s', + $expected_violation_substring, + implode('; ', $violations) + )); + } + + /** + * @return array + */ + public static function violatingValues(): array + { + return [ + 'script tag' => ['', 'tag " alt="x">', 'URL "data:'], + 'body onload' => ['x', 'attribute "onload"'], + 'html attribute' => ['x', 'attribute "onmouseover"'], + // // are not in ALLOWED_ATTRIBUTES at all - the table-context parse (which + // alone turns a bare into an element) reports the tag itself as the violation + 'td is not an allowed tag at all' => ['x', 'tag '], + 'comment' => ['', 'comment'], + 'broken closing tag becomes a comment' => ['', 'comment'], + 'unknown tag' => ['x', 'tag '], + 'disallowed attribute on allowed tag' => ['fett', 'attribute "class" of '], + 'end tags without start tags' => ['

Fake

', 'unbalanced markup'], + 'div closed inside li, li closed after it' => ['
  • ', 'closes a surrounding
    '], + 'the same inside a list' => ['
    ', 'closes a surrounding
    '], + 'div closed inside span' => ['
    ', 'unclosed tag '], + 'unclosed a' => ['Klick', 'unclosed tag '], + 'style with url()' => ['x', 'style "background-color:url('], + 'style with position' => ['x', 'style "position:fixed'], + 'style on unstyled tag' => ['

    x

    ', 'attribute "style" of

    '], + // a value ending inside an unfinished tag - harmless alone, but a browser completes it with the markup + // following the value on the page + 'unfinished img tag with a dangling attribute at the end' => [' [""' => ['y/