diff --git a/.gitignore b/.gitignore index 24fcb0d..9034277 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,7 @@ .AppleDouble .LSOverride -transifexAuth.json +.transifexrc **/css/bourbon **/.sass-cache node_modules/ \ No newline at end of file diff --git a/.tx/config b/.tx/config new file mode 100644 index 0000000..7812c74 --- /dev/null +++ b/.tx/config @@ -0,0 +1,17 @@ +[main] +host = https://www.transifex.com + +[gridfieldbulkeditingtools.yml] +file_filter = lang/.yml +minimum_perc = 0 +source_file = lang/en.yml +source_lang = en +type = YML + +[gridfieldbulkeditingtools.js] +file_filter = client/src/lang/.json +minimum_perc = 0 +source_file = client/src/lang/en.json +source_lang = en +type = JSON + diff --git a/README.md b/README.md index 6828762..f5b14a1 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,10 @@ $config->addComponent(new \Colymba\BulkManager\BulkManager()); See [BULK_MANAGER.md](docs/en//BULK_MANAGER.md) for detailed configuration. +## Tooling +* `npm run watch` for development +* `npm run dist` before pushing to the repo + ## Translations Translations of the natural language strings are managed through a third party translation interface, transifex.com. diff --git a/client/lang/cs.js b/client/lang/cs.js index e24606e..44efd1a 100644 --- a/client/lang/cs.js +++ b/client/lang/cs.js @@ -1,9 +1,7 @@ -// DO NOT MODIFY. Generated by build task. -// Contribute here: https://www.transifex.com/projects/p/gridfieldbulkeditingtools/ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') { if(typeof(console) != 'undefined') console.error('Class ss.i18n not defined'); } else { - ss.i18n.addDictionary('cs', { + ss.i18n.addDictionary(cs, { "GRIDFIELD_BULK_UPLOAD.PROGRESS_INFO": "Uploading %s file(s). %s done. %s error(s).", "GRIDFIELD_BULK_MANAGER.BULKACTION_EMPTY_SELECT": "Musíte vybrat alespoň jednu položku.", "GRIDFIELD_BULK_MANAGER.CONFIRM_DESTRUCTIVE_ACTION": "Data budou nenávratně ztracena. Opravdu chcete pokračovat?" diff --git a/client/lang/de.js b/client/lang/de.js index a0e0574..4a4ec35 100644 --- a/client/lang/de.js +++ b/client/lang/de.js @@ -1,9 +1,7 @@ -// DO NOT MODIFY. Generated by build task. -// Contribute here: https://www.transifex.com/projects/p/gridfieldbulkeditingtools/ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') { if(typeof(console) != 'undefined') console.error('Class ss.i18n not defined'); } else { - ss.i18n.addDictionary('de', { + ss.i18n.addDictionary(de, { "GRIDFIELD_BULK_UPLOAD.PROGRESS_INFO": "Übertrage %s Datei(en). %s erfolgreich übertragen. %s Fehler.", "GRIDFIELD_BULK_MANAGER.BULKACTION_EMPTY_SELECT": "Sie müssen mindestens ein Element auswählen.", "GRIDFIELD_BULK_MANAGER.CONFIRM_DESTRUCTIVE_ACTION": "Wollen Sie dieses Element wirklich unwiderruflich löschen?" diff --git a/client/lang/en.js b/client/lang/en.js index ea786e5..dcafa17 100644 --- a/client/lang/en.js +++ b/client/lang/en.js @@ -1,11 +1,9 @@ -// DO NOT MODIFY. Generated by build task. -// Contribute here: https://www.transifex.com/projects/p/gridfieldbulkeditingtools/ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') { if(typeof(console) != 'undefined') console.error('Class ss.i18n not defined'); } else { - ss.i18n.addDictionary('en', { - "GRIDFIELD_BULK_UPLOAD.PROGRESS_INFO": "Uploading %s file(s). %s done. %s error(s).", - "GRIDFIELD_BULK_MANAGER.BULKACTION_EMPTY_SELECT": "You must select at least one record.", - "GRIDFIELD_BULK_MANAGER.CONFIRM_DESTRUCTIVE_ACTION": "The data will be lost permanently. Do you want to continue?" + ss.i18n.addDictionary(en, { + "GRIDFIELD_BULK_UPLOAD.PROGRESS_INFO": "Uploading %s file(s). %s done. %s error(s).", + "GRIDFIELD_BULK_MANAGER.BULKACTION_EMPTY_SELECT": "You must select at least one record.", + "GRIDFIELD_BULK_MANAGER.CONFIRM_DESTRUCTIVE_ACTION": "The data will be lost permanently. Do you want to continue?" }); } \ No newline at end of file diff --git a/client/lang/fi.js b/client/lang/fi.js index c4ea7b7..3f2b2d7 100644 --- a/client/lang/fi.js +++ b/client/lang/fi.js @@ -1,9 +1,7 @@ -// DO NOT MODIFY. Generated by build task. -// Contribute here: https://www.transifex.com/projects/p/gridfieldbulkeditingtools/ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') { if(typeof(console) != 'undefined') console.error('Class ss.i18n not defined'); } else { - ss.i18n.addDictionary('fi', { + ss.i18n.addDictionary(fi, { "GRIDFIELD_BULK_UPLOAD.PROGRESS_INFO": "Lataa %s tiedosto(ja). %s Valmis. %s virhe(itä).", "GRIDFIELD_BULK_MANAGER.BULKACTION_EMPTY_SELECT": "Sinun täytyy valita vähintään yksi tallenne. ", "GRIDFIELD_BULK_MANAGER.CONFIRM_DESTRUCTIVE_ACTION": "Tiedostosi häviävät pysyvästi. Haluatko jatkaa?" diff --git a/client/lang/fr.js b/client/lang/fr.js index 02547e2..12094ad 100644 --- a/client/lang/fr.js +++ b/client/lang/fr.js @@ -1,9 +1,7 @@ -// DO NOT MODIFY. Generated by build task. -// Contribute here: https://www.transifex.com/projects/p/gridfieldbulkeditingtools/ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') { if(typeof(console) != 'undefined') console.error('Class ss.i18n not defined'); } else { - ss.i18n.addDictionary('fr', { + ss.i18n.addDictionary(fr, { "GRIDFIELD_BULK_UPLOAD.PROGRESS_INFO": "%s fichier(s) en transfert. %s terminer. %s erreur(s).", "GRIDFIELD_BULK_MANAGER.BULKACTION_EMPTY_SELECT": "Vous devez sélectionner au moins une entrée.", "GRIDFIELD_BULK_MANAGER.CONFIRM_DESTRUCTIVE_ACTION": "Les données serons perdu définitivement. Voulez vous continuer?" diff --git a/client/lang/it.js b/client/lang/it.js index 407a327..bcb00eb 100644 --- a/client/lang/it.js +++ b/client/lang/it.js @@ -1,9 +1,7 @@ -// DO NOT MODIFY. Generated by build task. -// Contribute here: https://www.transifex.com/projects/p/gridfieldbulkeditingtools/ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') { if(typeof(console) != 'undefined') console.error('Class ss.i18n not defined'); } else { - ss.i18n.addDictionary('it', { + ss.i18n.addDictionary(it, { "GRIDFIELD_BULK_UPLOAD.PROGRESS_INFO": "Caricamento del/dei file(s) %s. %s completato. %s errore(i).", "GRIDFIELD_BULK_MANAGER.BULKACTION_EMPTY_SELECT": "Devi selezionare almeno una voce.", "GRIDFIELD_BULK_MANAGER.CONFIRM_DESTRUCTIVE_ACTION": "I dati saranno persi per sempre. Vuoi continuare?" diff --git a/client/lang/nl.js b/client/lang/nl.js index 3693fd7..d2bfd3f 100644 --- a/client/lang/nl.js +++ b/client/lang/nl.js @@ -1,9 +1,7 @@ -// DO NOT MODIFY. Generated by build task. -// Contribute here: https://www.transifex.com/projects/p/gridfieldbulkeditingtools/ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') { if(typeof(console) != 'undefined') console.error('Class ss.i18n not defined'); } else { - ss.i18n.addDictionary('nl', { + ss.i18n.addDictionary(nl, { "GRIDFIELD_BULK_UPLOAD.PROGRESS_INFO": "Uploading %s file(s). %s done. %s error(s).", "GRIDFIELD_BULK_MANAGER.BULKACTION_EMPTY_SELECT": "U moet minstens een item te selecteren.", "GRIDFIELD_BULK_MANAGER.CONFIRM_DESTRUCTIVE_ACTION": "De gegevens zullen permanent verloren. Weet je zeker dat je de pagina wilt verlaten?" diff --git a/client/lang/pl.js b/client/lang/pl.js index 872ba31..f4474b5 100644 --- a/client/lang/pl.js +++ b/client/lang/pl.js @@ -1,9 +1,7 @@ -// DO NOT MODIFY. Generated by build task. -// Contribute here: https://www.transifex.com/projects/p/gridfieldbulkeditingtools/ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') { if(typeof(console) != 'undefined') console.error('Class ss.i18n not defined'); } else { - ss.i18n.addDictionary('pl', { + ss.i18n.addDictionary(pl, { "GRIDFIELD_BULK_UPLOAD.PROGRESS_INFO": "Wgrywanie %s plików. Ukończono %s. %s błędów.", "GRIDFIELD_BULK_MANAGER.BULKACTION_EMPTY_SELECT": "Musisz wybrać przynajmniej jedną pozycję.", "GRIDFIELD_BULK_MANAGER.CONFIRM_DESTRUCTIVE_ACTION": "Dane zostaną bezpowrotnie usunięte. Czy chcesz kontynuować?" diff --git a/client/lang/ru.js b/client/lang/ru.js new file mode 100644 index 0000000..e3e7e1a --- /dev/null +++ b/client/lang/ru.js @@ -0,0 +1,9 @@ +if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') { + if(typeof(console) != 'undefined') console.error('Class ss.i18n not defined'); +} else { + ss.i18n.addDictionary(ru, { + "GRIDFIELD_BULK_UPLOAD.PROGRESS_INFO": "Загружается %s файл(ов). %s завершено. %s ошибка(и).", + "GRIDFIELD_BULK_MANAGER.BULKACTION_EMPTY_SELECT": "Вы должны выбрать как минимум одну запись.", + "GRIDFIELD_BULK_MANAGER.CONFIRM_DESTRUCTIVE_ACTION": "Ваши данные будут безвозвратно удалены. Вы хотите продолжить?" +}); +} \ No newline at end of file diff --git a/client/lang/sk.js b/client/lang/sk.js index 872e96b..58736c3 100644 --- a/client/lang/sk.js +++ b/client/lang/sk.js @@ -1,9 +1,7 @@ -// DO NOT MODIFY. Generated by build task. -// Contribute here: https://www.transifex.com/projects/p/gridfieldbulkeditingtools/ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') { if(typeof(console) != 'undefined') console.error('Class ss.i18n not defined'); } else { - ss.i18n.addDictionary('sk', { + ss.i18n.addDictionary(sk, { "GRIDFIELD_BULK_UPLOAD.PROGRESS_INFO": "Nahrávam %s súbor(y/ov). %s hotovo. %s chyb(a/y).", "GRIDFIELD_BULK_MANAGER.BULKACTION_EMPTY_SELECT": "Musíte vybrať aspoň jednu položku.", "GRIDFIELD_BULK_MANAGER.CONFIRM_DESTRUCTIVE_ACTION": "Dáta budú nenávratne stratené. Chcete pokračovať?" diff --git a/client/src/lang/cs.json b/client/src/lang/cs.json new file mode 100644 index 0000000..d529fed --- /dev/null +++ b/client/src/lang/cs.json @@ -0,0 +1,5 @@ +{ + "GRIDFIELD_BULK_UPLOAD.PROGRESS_INFO": "Uploading %s file(s). %s done. %s error(s).", + "GRIDFIELD_BULK_MANAGER.BULKACTION_EMPTY_SELECT": "Musíte vybrat alespoň jednu položku.", + "GRIDFIELD_BULK_MANAGER.CONFIRM_DESTRUCTIVE_ACTION": "Data budou nenávratně ztracena. Opravdu chcete pokračovat?" +} \ No newline at end of file diff --git a/client/src/lang/de.json b/client/src/lang/de.json new file mode 100644 index 0000000..d07413c --- /dev/null +++ b/client/src/lang/de.json @@ -0,0 +1,5 @@ +{ + "GRIDFIELD_BULK_UPLOAD.PROGRESS_INFO": "Übertrage %s Datei(en). %s erfolgreich übertragen. %s Fehler.", + "GRIDFIELD_BULK_MANAGER.BULKACTION_EMPTY_SELECT": "Sie müssen mindestens ein Element auswählen.", + "GRIDFIELD_BULK_MANAGER.CONFIRM_DESTRUCTIVE_ACTION": "Wollen Sie dieses Element wirklich unwiderruflich löschen?" +} \ No newline at end of file diff --git a/client/src/lang/fi.json b/client/src/lang/fi.json new file mode 100644 index 0000000..3e62a00 --- /dev/null +++ b/client/src/lang/fi.json @@ -0,0 +1,5 @@ +{ + "GRIDFIELD_BULK_UPLOAD.PROGRESS_INFO": "Lataa %s tiedosto(ja). %s Valmis. %s virhe(itä).", + "GRIDFIELD_BULK_MANAGER.BULKACTION_EMPTY_SELECT": "Sinun täytyy valita vähintään yksi tallenne. ", + "GRIDFIELD_BULK_MANAGER.CONFIRM_DESTRUCTIVE_ACTION": "Tiedostosi häviävät pysyvästi. Haluatko jatkaa?" +} \ No newline at end of file diff --git a/client/src/lang/fr.json b/client/src/lang/fr.json new file mode 100644 index 0000000..21a41bd --- /dev/null +++ b/client/src/lang/fr.json @@ -0,0 +1,5 @@ +{ + "GRIDFIELD_BULK_UPLOAD.PROGRESS_INFO": "%s fichier(s) en transfert. %s terminer. %s erreur(s).", + "GRIDFIELD_BULK_MANAGER.BULKACTION_EMPTY_SELECT": "Vous devez sélectionner au moins une entrée.", + "GRIDFIELD_BULK_MANAGER.CONFIRM_DESTRUCTIVE_ACTION": "Les données serons perdu définitivement. Voulez vous continuer?" +} \ No newline at end of file diff --git a/client/src/lang/it.json b/client/src/lang/it.json new file mode 100644 index 0000000..204e71d --- /dev/null +++ b/client/src/lang/it.json @@ -0,0 +1,5 @@ +{ + "GRIDFIELD_BULK_UPLOAD.PROGRESS_INFO": "Caricamento del/dei file(s) %s. %s completato. %s errore(i).", + "GRIDFIELD_BULK_MANAGER.BULKACTION_EMPTY_SELECT": "Devi selezionare almeno una voce.", + "GRIDFIELD_BULK_MANAGER.CONFIRM_DESTRUCTIVE_ACTION": "I dati saranno persi per sempre. Vuoi continuare?" +} \ No newline at end of file diff --git a/client/src/lang/nl.json b/client/src/lang/nl.json new file mode 100644 index 0000000..94c050f --- /dev/null +++ b/client/src/lang/nl.json @@ -0,0 +1,5 @@ +{ + "GRIDFIELD_BULK_UPLOAD.PROGRESS_INFO": "Uploading %s file(s). %s done. %s error(s).", + "GRIDFIELD_BULK_MANAGER.BULKACTION_EMPTY_SELECT": "U moet minstens een item te selecteren.", + "GRIDFIELD_BULK_MANAGER.CONFIRM_DESTRUCTIVE_ACTION": "De gegevens zullen permanent verloren. Weet je zeker dat je de pagina wilt verlaten?" +} \ No newline at end of file diff --git a/client/src/lang/pl.json b/client/src/lang/pl.json new file mode 100644 index 0000000..7198fd9 --- /dev/null +++ b/client/src/lang/pl.json @@ -0,0 +1,5 @@ +{ + "GRIDFIELD_BULK_UPLOAD.PROGRESS_INFO": "Wgrywanie %s plików. Ukończono %s. %s błędów.", + "GRIDFIELD_BULK_MANAGER.BULKACTION_EMPTY_SELECT": "Musisz wybrać przynajmniej jedną pozycję.", + "GRIDFIELD_BULK_MANAGER.CONFIRM_DESTRUCTIVE_ACTION": "Dane zostaną bezpowrotnie usunięte. Czy chcesz kontynuować?" +} \ No newline at end of file diff --git a/client/src/lang/ru.json b/client/src/lang/ru.json new file mode 100644 index 0000000..966f5e0 --- /dev/null +++ b/client/src/lang/ru.json @@ -0,0 +1,5 @@ +{ + "GRIDFIELD_BULK_UPLOAD.PROGRESS_INFO": "Загружается %s файл(ов). %s завершено. %s ошибка(и).", + "GRIDFIELD_BULK_MANAGER.BULKACTION_EMPTY_SELECT": "Вы должны выбрать как минимум одну запись.", + "GRIDFIELD_BULK_MANAGER.CONFIRM_DESTRUCTIVE_ACTION": "Ваши данные будут безвозвратно удалены. Вы хотите продолжить?" +} \ No newline at end of file diff --git a/client/src/lang/sk.json b/client/src/lang/sk.json new file mode 100644 index 0000000..1f22089 --- /dev/null +++ b/client/src/lang/sk.json @@ -0,0 +1,5 @@ +{ + "GRIDFIELD_BULK_UPLOAD.PROGRESS_INFO": "Nahrávam %s súbor(y/ov). %s hotovo. %s chyb(a/y).", + "GRIDFIELD_BULK_MANAGER.BULKACTION_EMPTY_SELECT": "Musíte vybrať aspoň jednu položku.", + "GRIDFIELD_BULK_MANAGER.CONFIRM_DESTRUCTIVE_ACTION": "Dáta budú nenávratne stratené. Chcete pokračovať?" +} \ No newline at end of file diff --git a/lang/cs.yml b/lang/cs.yml index c1afcc7..67c0b24 100644 --- a/lang/cs.yml +++ b/lang/cs.yml @@ -1,10 +1,4 @@ -# DO NOT MODIFY. Generated by build task. -# Contribute here: https://www.transifex.com/projects/p/gridfieldbulkeditingtools/ cs: - GRIDFIELD_BULK_UPLOAD: - FINISH_BTN_LABEL: Dokončit - CANCEL_BTN_LABEL: Storno - EDIT_ALL_BTN_LABEL: Upravit vše GRIDFIELD_BULK_MANAGER: EDIT_SELECT_LABEL: Upravit UNLINK_SELECT_LABEL: Odstranit vazbu @@ -13,4 +7,4 @@ cs: SELECT_ALL_LABEL: Vybrat vše GRIDFIELD_BULKMANAGER_EDIT_HANDLER: SAVE_BTN_LABEL: Uložit vše - CANCEL_BTN_LABEL: Storno \ No newline at end of file + CANCEL_BTN_LABEL: Storno diff --git a/lang/de.yml b/lang/de.yml index 009de00..e27bbc7 100644 --- a/lang/de.yml +++ b/lang/de.yml @@ -1,11 +1,4 @@ -# DO NOT MODIFY. Generated by build task. -# Contribute here: https://www.transifex.com/projects/p/gridfieldbulkeditingtools/ de: - GRIDFIELD_BULK_UPLOAD: - FINISH_BTN_LABEL: Fertigstellen - CANCEL_BTN_LABEL: Abbrechen - CLEAR_ERROR_BTN_LABEL: Fehler löschen - EDIT_ALL_BTN_LABEL: Alle bearbeiten GRIDFIELD_BULK_MANAGER: COMPONENT_TITLE: Einen oder mehrere Einträge gleichzeitig bearbeiten EDIT_SELECT_LABEL: Bearbeiten @@ -18,4 +11,4 @@ de: TOGGLE_ALL_LINK: Alle Anzeigen/Verbergen SAVE_BTN_LABEL: Alle speichern CANCEL_BTN_LABEL: Abbrechen - SAVE_RESULT_TEXT: '{count} {class} erfolgreich gespeichert.' \ No newline at end of file + SAVE_RESULT_TEXT: '{count} {class} erfolgreich gespeichert.' diff --git a/lang/en.yml b/lang/en.yml index 74b63b7..23f7cc1 100644 --- a/lang/en.yml +++ b/lang/en.yml @@ -1,9 +1,5 @@ en: GRIDFIELD_BULK_UPLOAD: - FINISH_BTN_LABEL: Finish - CANCEL_BTN_LABEL: Cancel - CLEAR_ERROR_BTN_LABEL: Clear errors - EDIT_ALL_BTN_LABEL: Edit all GRIDFIELD_BULK_MANAGER: COMPONENT_TITLE: Modify one or more entry at a time. EDIT_SELECT_LABEL: Edit diff --git a/lang/fi.yml b/lang/fi.yml index 6c1939b..0bd9d9e 100644 --- a/lang/fi.yml +++ b/lang/fi.yml @@ -1,11 +1,4 @@ -# DO NOT MODIFY. Generated by build task. -# Contribute here: https://www.transifex.com/projects/p/gridfieldbulkeditingtools/ fi: - GRIDFIELD_BULK_UPLOAD: - FINISH_BTN_LABEL: Valmis - CANCEL_BTN_LABEL: Peruuta - CLEAR_ERROR_BTN_LABEL: Selvitä virheet - EDIT_ALL_BTN_LABEL: Muokkaa kaikki GRIDFIELD_BULK_MANAGER: COMPONENT_TITLE: Muokkaa yhtä tai useampaa merkintää kerrallaan. EDIT_SELECT_LABEL: Muokkaa @@ -17,4 +10,4 @@ fi: HEADER_TEXT: Muokkaa {count} {class} TOGGLE_ALL_LINK: Näytä/Piilota kaikki SAVE_BTN_LABEL: Tallenna kaikki - CANCEL_BTN_LABEL: Peruuta \ No newline at end of file + CANCEL_BTN_LABEL: Peruuta diff --git a/lang/fr.yml b/lang/fr.yml index 186e320..0a2ed89 100644 --- a/lang/fr.yml +++ b/lang/fr.yml @@ -1,11 +1,4 @@ -# DO NOT MODIFY. Generated by build task. -# Contribute here: https://www.transifex.com/projects/p/gridfieldbulkeditingtools/ fr: - GRIDFIELD_BULK_UPLOAD: - FINISH_BTN_LABEL: Terminer - CANCEL_BTN_LABEL: Annuler - CLEAR_ERROR_BTN_LABEL: Effacer les erreurs - EDIT_ALL_BTN_LABEL: Tout éditer GRIDFIELD_BULK_MANAGER: COMPONENT_TITLE: Modifier une ou plusieurs entrée à la fois. EDIT_SELECT_LABEL: Editer @@ -18,4 +11,4 @@ fr: TOGGLE_ALL_LINK: Afficher/Masquer tout SAVE_BTN_LABEL: Sauvegarder tout CANCEL_BTN_LABEL: Annuler - SAVE_RESULT_TEXT: '{count} {class} sauvegardés avec succès.' \ No newline at end of file + SAVE_RESULT_TEXT: '{count} {class} sauvegardés avec succès.' diff --git a/lang/it.yml b/lang/it.yml index b678c9c..c18a2b5 100644 --- a/lang/it.yml +++ b/lang/it.yml @@ -1,11 +1,4 @@ -# DO NOT MODIFY. Generated by build task. -# Contribute here: https://www.transifex.com/projects/p/gridfieldbulkeditingtools/ it: - GRIDFIELD_BULK_UPLOAD: - FINISH_BTN_LABEL: Termina - CANCEL_BTN_LABEL: Annulla - CLEAR_ERROR_BTN_LABEL: Cancella errori - EDIT_ALL_BTN_LABEL: Modifica tutti GRIDFIELD_BULK_MANAGER: COMPONENT_TITLE: Modifica una o più voci alla volta. EDIT_SELECT_LABEL: Modifica @@ -18,4 +11,4 @@ it: TOGGLE_ALL_LINK: Mostra/Nascondi tutto SAVE_BTN_LABEL: Salva tutto CANCEL_BTN_LABEL: Annulla - SAVE_RESULT_TEXT: '{count} {class} salvati con successo.' \ No newline at end of file + SAVE_RESULT_TEXT: '{count} {class} salvati con successo.' diff --git a/lang/nl.yml b/lang/nl.yml index a59e599..1bef891 100644 --- a/lang/nl.yml +++ b/lang/nl.yml @@ -1,11 +1,4 @@ -# DO NOT MODIFY. Generated by build task. -# Contribute here: https://www.transifex.com/projects/p/gridfieldbulkeditingtools/ nl: - GRIDFIELD_BULK_UPLOAD: - FINISH_BTN_LABEL: Afronden - CANCEL_BTN_LABEL: Annuleren - CLEAR_ERROR_BTN_LABEL: Verwijder fouten - EDIT_ALL_BTN_LABEL: Alles bewerken GRIDFIELD_BULK_MANAGER: COMPONENT_TITLE: Bewerk één of meerdere items tegelijkertijd EDIT_SELECT_LABEL: Bewerken @@ -17,4 +10,4 @@ nl: HEADER_TEXT: '{count} {class} aan het bewerken' TOGGLE_ALL_LINK: Toon/verberg alle SAVE_BTN_LABEL: Alles opslaan - CANCEL_BTN_LABEL: Annuleren \ No newline at end of file + CANCEL_BTN_LABEL: Annuleren diff --git a/lang/pl.yml b/lang/pl.yml index 4582699..fb10c47 100644 --- a/lang/pl.yml +++ b/lang/pl.yml @@ -1,11 +1,4 @@ -# DO NOT MODIFY. Generated by build task. -# Contribute here: https://www.transifex.com/projects/p/gridfieldbulkeditingtools/ pl: - GRIDFIELD_BULK_UPLOAD: - FINISH_BTN_LABEL: Zakończ - CANCEL_BTN_LABEL: Anuluj - CLEAR_ERROR_BTN_LABEL: Usuń błędy - EDIT_ALL_BTN_LABEL: Edytuj wszystkie GRIDFIELD_BULK_MANAGER: COMPONENT_TITLE: Modyfikuj jednocześnie jedną lub więcej pozycji. EDIT_SELECT_LABEL: Edytuj @@ -18,4 +11,4 @@ pl: TOGGLE_ALL_LINK: Pokaż/ukryj wszystkie SAVE_BTN_LABEL: Zapisz wszystkie CANCEL_BTN_LABEL: Anuluj - SAVE_RESULT_TEXT: 'Zapisano pomyślnie {count} {class}' \ No newline at end of file + SAVE_RESULT_TEXT: 'Zapisano pomyślnie {count} {class}' diff --git a/lang/ru.yml b/lang/ru.yml new file mode 100644 index 0000000..798785b --- /dev/null +++ b/lang/ru.yml @@ -0,0 +1,14 @@ +ru: + GRIDFIELD_BULK_MANAGER: + COMPONENT_TITLE: Редактировать одну или несколько записей одновременно + EDIT_SELECT_LABEL: Редактировать + UNLINK_SELECT_LABEL: Отвязать + DELETE_SELECT_LABEL: Удалить + ACTION_BTN_LABEL: Поехали + SELECT_ALL_LABEL: Выбрать все + GRIDFIELD_BULKMANAGER_EDIT_HANDLER: + HEADER_TEXT: Редактировать {count} {class} + TOGGLE_ALL_LINK: Показать/Скрыть все + SAVE_BTN_LABEL: Сохранить все + CANCEL_BTN_LABEL: Отменить + SAVE_RESULT_TEXT: '{count} {class} успешно сохранены' diff --git a/lang/sk.yml b/lang/sk.yml index f801e83..4c1d2c6 100644 --- a/lang/sk.yml +++ b/lang/sk.yml @@ -1,11 +1,4 @@ -# DO NOT MODIFY. Generated by build task. -# Contribute here: https://www.transifex.com/projects/p/gridfieldbulkeditingtools/ sk: - GRIDFIELD_BULK_UPLOAD: - FINISH_BTN_LABEL: Dokončiť - CANCEL_BTN_LABEL: Zrušiť - CLEAR_ERROR_BTN_LABEL: Vymazať chyby - EDIT_ALL_BTN_LABEL: Upraviť všetky GRIDFIELD_BULK_MANAGER: COMPONENT_TITLE: Uprav jednu alebo viac položiek súčasne. EDIT_SELECT_LABEL: Upraviť @@ -18,4 +11,4 @@ sk: TOGGLE_ALL_LINK: Zobraziť/Skryť všetko SAVE_BTN_LABEL: Uložiť všetko CANCEL_BTN_LABEL: Zrušiť - SAVE_RESULT_TEXT: '{count} {class} úspešne uložené.' \ No newline at end of file + SAVE_RESULT_TEXT: '{count} {class} úspešne uložené.' diff --git a/package.json b/package.json index e787f9d..ab2a2ea 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,9 @@ }, "scripts": { "build": "NODE_ENV=production webpack -p --bail --progress", - "watch": "NODE_ENV=development webpack --watch --progress" + "watch": "NODE_ENV=development webpack --watch --progress", + "tx": "tx push --source && tx pull --all && node transifex.js", + "dist": "npm run tx && npm run build" }, "repository": { "type": "git", diff --git a/tasks/BuildTransifexTranslations.php b/tasks/BuildTransifexTranslations.php deleted file mode 100644 index 9163aab..0000000 --- a/tasks/BuildTransifexTranslations.php +++ /dev/null @@ -1,289 +0,0 @@ -txapi = $txapi; - } - - public function settxproject($txproject) - { - $this->txproject = $txproject; - } - - /** - * Task init. - */ - public function init() - { - $root = realpath(__DIR__.DIRECTORY_SEPARATOR.'..'); - $authFile = $root.DIRECTORY_SEPARATOR.$this->txAuthFile; - - if (file_exists($authFile)) { - $txAuthData = file_get_contents($authFile); - $txAuthData = json_decode($txAuthData); - if ($txAuthData->username && $txAuthData->password) { - $this->txAuth = $txAuthData; - } else { - throw new BuildException("Transifex credentials malformat. Check your $authFile for 'username' and 'password' keys."); - } - } else { - throw new BuildException("Transifex credentials not found. $authFile missing."); - } - - $this->root = $root; - $this->jsDir = $root.$this->jsDir; - $this->ymlDir = $root.$this->ymlDir; - } - - /** - * Let's get to buisness... - */ - public function main() - { - $ch = curl_init(); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); - curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); - curl_setopt($ch, CURLOPT_USERPWD, $this->txAuth->username.':'.$this->txAuth->password); - - // get resources - $url = $this->txapi.'/project/'.$this->txproject.'/resources/'; - curl_setopt($ch, CURLOPT_URL, $url); - $resources = curl_exec($ch); - - if (!$resources) { - throw new BuildException('Cannot fetch resources'); - } else { - $resources = json_decode($resources); - } - - // get langs - $url = $this->txapi.'/project/'.$this->txproject.'/languages/'; - curl_setopt($ch, CURLOPT_URL, $url); - $languages = curl_exec($ch); - - if (!$languages) { - throw new BuildException('Cannot fetch languages'); - } else { - $languages = json_decode($languages); - } - - // clear existing translation files and/or setup folders - $this->resetTranslations(); - - // add source_language_code to languages list - $sourceLangs = array(); - foreach ($resources as $resource) { - $lang = new StdClass(); - $locale = $resource->source_language_code; - $lang->language_code = $locale; - if (!array_key_exists($locale, $sourceLangs)) { - $sourceLangs[$locale] = $lang; - } - } - $sourceLangs = array_values($sourceLangs); - $languages = array_merge($languages, $sourceLangs); - - // get each resource translations - foreach ($resources as $resource) { - foreach ($languages as $language) { - $url = $this->txapi.'/project/'.$this->txproject.'/resource/'.$resource->slug.'/translation/'.$language->language_code; - curl_setopt($ch, CURLOPT_URL, $url); - $data = curl_exec($ch); - if ($data) { - $this->saveTranslation($resource->slug, $language->language_code, $data); - } - } - } - - curl_close($ch); - } - - /** - * Clear any existing translation files - * and create directory structure if needed. - */ - private function resetTranslations() - { - if (file_exists($this->jsDir)) { - echo "Clearing js translations...\n"; - $iterator = new GlobIterator($this->jsDir.DIRECTORY_SEPARATOR.'*.js'); - foreach ($iterator as $fileInfo) { - if ($fileInfo->isFile()) { - $del = unlink($fileInfo->getRealPath()); - } - } - } - - if (file_exists($this->ymlDir)) { - echo "Clearing yml translations...\n"; - $iterator = new GlobIterator($this->ymlDir.DIRECTORY_SEPARATOR.'*.yml'); - foreach ($iterator as $fileInfo) { - if ($fileInfo->isFile()) { - $del = unlink($fileInfo->getRealPath()); - } - } - } - - if (!file_exists($this->jsDir)) { - echo "Creating js folders...\n"; - mkdir($this->jsDir); - } - - if (!file_exists($this->ymlDir)) { - echo "Creating yml folders...\n"; - mkdir($this->ymlDir); - } - } - - /** - * Hook that detect the translation type via resource slug - * and call corect saving function with data. - * - * @param string $resource Transifex resrouce slug - * @param string $locale Transifex locale - * @param string $data Raw Transifex translation data - */ - private function saveTranslation($resource, $locale, $data) - { - if (!$resource || !$locale || !$data) { - return; - } - - $data = json_decode($data); - $translation = rtrim($data->content); - - switch ($resource) { - case 'js': - $this->saveJSTranslation($locale, $translation); - break; - - case 'yml': - $this->saveYMLTranslation($locale, $translation); - break; - } - } - - /** - * Save a JS translation file - * Uses JSTemplate to fit with SilverStripe requirements. - * - * @param string $locale Locale code - * @param string $json JSON translation key:value - */ - private function saveJSTranslation($locale, $json) - { - echo "Saving $locale.js\n"; - file_put_contents( - $this->jsDir.DIRECTORY_SEPARATOR.$locale.'.js', - $this->getBanner('js'). - str_replace( - array( - '%TRANSLATIONS%', - '%LOCALE%', - ), - array( - $json, - $locale, - ), - $this->getJSTemplate() - ) - ); - } - - /** - * Save a YML translation file. - * - * @param string $locale Locale code - * @param string $yml YML translation - */ - public function saveYMLTranslation($locale, $yml) - { - echo "Saving $locale.yml\n"; - - if ($locale !== 'en') { - $content = $this->getBanner('yml').$yml; - } else { - $content = $yml; - } - - file_put_contents( - $this->ymlDir.DIRECTORY_SEPARATOR.$locale.'.yml', - $content - ); - } - - /** - * Return the commented file banner. - * - * @param string $type File type e.g js - * - * @return string The commented file banner - */ - private function getBanner($type) - { - switch (strtolower($type)) { - case 'yml': - $comment = '#'; - break; - - default: - $comment = '//'; - break; - } - - $banner = <<