diff --git a/app/src/main/res/values-ar/text_imported.xml b/app/src/main/res/values-ar/text_imported.xml index 81f1990e..ee4a2f67 100644 --- a/app/src/main/res/values-ar/text_imported.xml +++ b/app/src/main/res/values-ar/text_imported.xml @@ -13,4 +13,9 @@ إنشاء إغلاق تبديل + تعديل + حذف + تم + إلغاء + الوصف \ No newline at end of file diff --git a/app/src/main/res/values-cs/text_imported.xml b/app/src/main/res/values-cs/text_imported.xml index c31e13d3..24b40a8b 100644 --- a/app/src/main/res/values-cs/text_imported.xml +++ b/app/src/main/res/values-cs/text_imported.xml @@ -13,4 +13,9 @@ Vytvořit Zavřít Přepnout + Upravit + Smazat + Hotovo + Zrušit + Popis \ No newline at end of file diff --git a/app/src/main/res/values-de/text_imported.xml b/app/src/main/res/values-de/text_imported.xml index 33e220c2..32f83649 100644 --- a/app/src/main/res/values-de/text_imported.xml +++ b/app/src/main/res/values-de/text_imported.xml @@ -13,4 +13,9 @@ Erstellen Schließen Wechseln + Bearbeiten + Löschen + Fertig + Abbrechen + Beschreibung \ No newline at end of file diff --git a/app/src/main/res/values-es/text_imported.xml b/app/src/main/res/values-es/text_imported.xml index 9c581748..4375c4dc 100644 --- a/app/src/main/res/values-es/text_imported.xml +++ b/app/src/main/res/values-es/text_imported.xml @@ -13,4 +13,9 @@ Crear Cerrar Cambiar + Editar + Eliminar + Listo + Cancelar + Descripción \ No newline at end of file diff --git a/app/src/main/res/values-fi/text_imported.xml b/app/src/main/res/values-fi/text_imported.xml index a47e3a27..4fb6708a 100644 --- a/app/src/main/res/values-fi/text_imported.xml +++ b/app/src/main/res/values-fi/text_imported.xml @@ -13,4 +13,9 @@ Luo Sulje Vaihda + Muokkaa + Poista + Valmis + Peruuta + Kuvaus \ No newline at end of file diff --git a/app/src/main/res/values-fr/text_imported.xml b/app/src/main/res/values-fr/text_imported.xml index cbfbc9e2..dc8adbcc 100644 --- a/app/src/main/res/values-fr/text_imported.xml +++ b/app/src/main/res/values-fr/text_imported.xml @@ -13,4 +13,9 @@ Créer Fermer Changer + Modifier + Supprimer + OK + Annuler + Description \ No newline at end of file diff --git a/app/src/main/res/values-it/text_imported.xml b/app/src/main/res/values-it/text_imported.xml index 82899f8c..bb4c32d5 100644 --- a/app/src/main/res/values-it/text_imported.xml +++ b/app/src/main/res/values-it/text_imported.xml @@ -13,4 +13,9 @@ Crea Chiudi Cambia + Modifica + Elimina + Salva + Annulla + Descrizione \ No newline at end of file diff --git a/app/src/main/res/values-ja/text_imported.xml b/app/src/main/res/values-ja/text_imported.xml index 4397dc68..9936b8e6 100644 --- a/app/src/main/res/values-ja/text_imported.xml +++ b/app/src/main/res/values-ja/text_imported.xml @@ -13,4 +13,9 @@ 作成 閉じる 切り替え + 編集 + 削除 + 完了 + キャンセル + 説明 \ No newline at end of file diff --git a/app/src/main/res/values-nl/text_imported.xml b/app/src/main/res/values-nl/text_imported.xml index 461577e1..f206d8ff 100644 --- a/app/src/main/res/values-nl/text_imported.xml +++ b/app/src/main/res/values-nl/text_imported.xml @@ -13,4 +13,9 @@ Aanmaken Sluiten Overschakelen + Bewerken + Verwijderen + Gereed + Annuleren + Beschrijving \ No newline at end of file diff --git a/app/src/main/res/values-pl/text_imported.xml b/app/src/main/res/values-pl/text_imported.xml index 12d3807d..72af86d5 100644 --- a/app/src/main/res/values-pl/text_imported.xml +++ b/app/src/main/res/values-pl/text_imported.xml @@ -13,4 +13,9 @@ Utwórz Zamknij Przełącz + Edytuj + Usuń + Gotowe + Anuluj + Opis \ No newline at end of file diff --git a/app/src/main/res/values-pt-rBR/text_imported.xml b/app/src/main/res/values-pt-rBR/text_imported.xml index a8273ace..ef159d1d 100644 --- a/app/src/main/res/values-pt-rBR/text_imported.xml +++ b/app/src/main/res/values-pt-rBR/text_imported.xml @@ -13,4 +13,9 @@ Criar Fechar Alternar + Editar + Excluir + Concluído + Cancelar + Descrição \ No newline at end of file diff --git a/app/src/main/res/values-pt-rPT/text_imported.xml b/app/src/main/res/values-pt-rPT/text_imported.xml index 3e39ecb0..0b94e4cc 100644 --- a/app/src/main/res/values-pt-rPT/text_imported.xml +++ b/app/src/main/res/values-pt-rPT/text_imported.xml @@ -13,4 +13,9 @@ Criar Fechar Alternar + Editar + Eliminar + Concluído + Cancelar + Descrição \ No newline at end of file diff --git a/app/src/main/res/values-ru/text_imported.xml b/app/src/main/res/values-ru/text_imported.xml index b934a9f4..0a7f1db0 100644 --- a/app/src/main/res/values-ru/text_imported.xml +++ b/app/src/main/res/values-ru/text_imported.xml @@ -13,4 +13,9 @@ Создать Закрыть Сменить аккаунт + Изменить + Удалить + Готово + Отмена + Описание \ No newline at end of file diff --git a/app/src/main/res/values-tr/text_imported.xml b/app/src/main/res/values-tr/text_imported.xml index a31144e7..4a72cbb0 100644 --- a/app/src/main/res/values-tr/text_imported.xml +++ b/app/src/main/res/values-tr/text_imported.xml @@ -13,4 +13,9 @@ Oluştur Kapat Değiştir + Düzenle + Sil + Bitti + İptal + Açıklama \ No newline at end of file diff --git a/app/src/main/res/values-vi/text_imported.xml b/app/src/main/res/values-vi/text_imported.xml index 5d9462fa..a44eeb02 100644 --- a/app/src/main/res/values-vi/text_imported.xml +++ b/app/src/main/res/values-vi/text_imported.xml @@ -13,4 +13,9 @@ Tạo Đóng Chuyển đổi + Chỉnh sửa + Xóa + Xong + Hủy + Mô tả \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/text_imported.xml b/app/src/main/res/values-zh-rCN/text_imported.xml index a5f51507..0868c578 100644 --- a/app/src/main/res/values-zh-rCN/text_imported.xml +++ b/app/src/main/res/values-zh-rCN/text_imported.xml @@ -13,4 +13,9 @@ 创建 关闭 切换 + 编辑 + 删除 + 完成 + 取消 + 说明 \ No newline at end of file diff --git a/app/src/main/res/values-zh-rTW/text_imported.xml b/app/src/main/res/values-zh-rTW/text_imported.xml index 46b1df52..e834ed94 100644 --- a/app/src/main/res/values-zh-rTW/text_imported.xml +++ b/app/src/main/res/values-zh-rTW/text_imported.xml @@ -13,4 +13,9 @@ 建立 關閉 切換 + 編輯 + 刪除 + 完成 + 取消 + 說明 \ No newline at end of file diff --git a/app/src/main/res/values/text_imported.xml b/app/src/main/res/values/text_imported.xml index f41ffc01..b43d5fc0 100644 --- a/app/src/main/res/values/text_imported.xml +++ b/app/src/main/res/values/text_imported.xml @@ -13,4 +13,9 @@ Create Close Switch + Edit + Delete + Done + Cancel + Description \ No newline at end of file diff --git a/translations/src/main/java/org/solovyev/android/translations/Android.java b/translations/src/main/java/org/solovyev/android/translations/Android.java index 5fd1913e..6f2c2911 100644 --- a/translations/src/main/java/org/solovyev/android/translations/Android.java +++ b/translations/src/main/java/org/solovyev/android/translations/Android.java @@ -9,69 +9,93 @@ import java.util.List; public class Android { - private static class TranslationLink { - public final String inName; - public final String outName; + private static final List settingsLinks = new ArrayList<>(); + private static final List calendarLinks = new ArrayList<>(); - private TranslationLink(String inName, String outName) { - this.inName = inName; - this.outName = outName; - } + static { + settingsLinks.add(new TranslationLink("haptic_feedback_enable_title", "cpp_prefs_vibrate_on_keypress")); + settingsLinks.add(new TranslationLink("accelerometer_title", "cpp_prefs_auto_rotate_screen")); + settingsLinks.add(new TranslationLink("phone_language", "cpp_language")); + settingsLinks.add(new TranslationLink("night_mode_title", "cpp_theme")); + settingsLinks.add(new TranslationLink("night_mode_no", "cpp_theme_light")); + settingsLinks.add(new TranslationLink("night_mode_yes", "cpp_theme_dark")); + settingsLinks.add(new TranslationLink("keep_screen_on", "cpp_prefs_keep_screen_on")); + settingsLinks.add(new TranslationLink("draw_overlay", "cpp_permission_overlay")); + settingsLinks.add(new TranslationLink("yes", "cpp_yes")); + settingsLinks.add(new TranslationLink("no", "cpp_no")); + settingsLinks.add(new TranslationLink("create", "cpp_create")); + settingsLinks.add(new TranslationLink("dlg_close", "cpp_close")); + settingsLinks.add(new TranslationLink("dlg_switch", "cpp_switch")); + + calendarLinks.add(new TranslationLink("edit_label", "cpp_edit")); + calendarLinks.add(new TranslationLink("delete_label", "cpp_delete")); + calendarLinks.add(new TranslationLink("save_label", "cpp_save")); + calendarLinks.add(new TranslationLink("discard_label", "cpp_cancel")); + calendarLinks.add(new TranslationLink("hint_description", "cpp_description")); } public static void main(String... args) throws Exception { final Options options = new Options(); options.addOption(Option.builder("as").longOpt("aosp-settings").hasArg().desc("Local location of aosp/platform/packages/apps/settings").required().build()); + options.addOption(Option.builder("ac").longOpt("aosp-calendar").hasArg().desc("Local location of aosp/platform/packages/apps/calendar").required().build()); final CommandLineParser parser = new DefaultParser(); final CommandLine commandLine = parser.parse(options, args); - final File aospSettings = new File(commandLine.getOptionValue("as")); - if (!aospSettings.exists() || !aospSettings.isDirectory()) { - throw new IllegalArgumentException(aospSettings + " doesn't exist or not a directory"); - } - final File inDir = - new File(aospSettings, "res"); + final File aospSettings = makeInputDirectory(commandLine.getOptionValue("as")); + final File aospCalendar = makeInputDirectory(commandLine.getOptionValue("ac")); + final File outDir = new File("build/translations/res"); Utils.delete(outDir); outDir.mkdirs(); - final List translationLinks = new ArrayList<>(); - translationLinks.add(new TranslationLink("haptic_feedback_enable_title", "cpp_prefs_vibrate_on_keypress")); - translationLinks.add(new TranslationLink("accelerometer_title", "cpp_prefs_auto_rotate_screen")); - translationLinks.add(new TranslationLink("phone_language", "cpp_language")); - translationLinks.add(new TranslationLink("night_mode_title", "cpp_theme")); - translationLinks.add(new TranslationLink("night_mode_no", "cpp_theme_light")); - translationLinks.add(new TranslationLink("night_mode_yes", "cpp_theme_dark")); - translationLinks.add(new TranslationLink("keep_screen_on", "cpp_prefs_keep_screen_on")); - translationLinks.add(new TranslationLink("draw_overlay", "cpp_permission_overlay")); - translationLinks.add(new TranslationLink("yes", "cpp_yes")); - translationLinks.add(new TranslationLink("no", "cpp_no")); - translationLinks.add(new TranslationLink("create", "cpp_create")); - translationLinks.add(new TranslationLink("dlg_close", "cpp_close")); - translationLinks.add(new TranslationLink("dlg_switch", "cpp_switch")); - List languageLocales = new ArrayList<>(Utils.languageLocales); languageLocales.add(""); for (String languageLocale : languageLocales) { - final File inLanguageDir = new File(inDir, Utils.valuesFolderName(languageLocale)); - final File inFile = new File(inLanguageDir, "strings.xml"); - final Resources resources = Utils.persister.read(Resources.class, inFile); Resources translations = new Resources(); - for (TranslationLink translationLink : translationLinks) { - String translation = translate(resources, translationLink); - if(!TextUtils.isBlank(translation)) { - translations.strings.add(new ResourceString(translationLink.outName, translation)); - } - } + translate(readResources(aospSettings, languageLocale), translations, settingsLinks); + translate(readResources(aospCalendar, languageLocale), translations, calendarLinks); Utils.saveTranslations(translations, languageLocale, outDir, "text_imported.xml"); } } + private static Resources readResources(File from, String languageLocale) throws Exception { + File inFile = makeStringsFile(from, languageLocale); + if(!inFile.exists()) { + final int i = languageLocale.indexOf("-r"); + if(i >= 0) { + inFile = makeStringsFile(from, languageLocale.substring(0, i)); + } + } + return Utils.persister.read(Resources.class, inFile); + } + + private static File makeStringsFile(File from, String languageLocale) { + return new File(new File(from, Utils.valuesFolderName(languageLocale)), "strings.xml"); + } + + private static File makeInputDirectory(String dirName) { + final File dir = new File(dirName); + if (!dir.exists() || !dir.isDirectory()) { + throw new IllegalArgumentException(dir + " doesn't exist or not a directory"); + } + + return new File(dir, "res"); + } + + private static void translate(Resources from, Resources to, List links) { + for (TranslationLink translationLink : links) { + String translation = translate(from, translationLink); + if (!TextUtils.isBlank(translation)) { + to.strings.add(new ResourceString(translationLink.outName, translation)); + } + } + } + private static String translate(Resources resources, TranslationLink translationLink) { - for (ResourceString string: resources.strings) { + for (ResourceString string : resources.strings) { if (string.name.equals(translationLink.inName)) { - if(TextUtils.isBlank(string.value)) { + if (TextUtils.isBlank(string.value)) { return null; } if (string.value.length() >= 2 && string.value.startsWith("\"") && string.value @@ -83,4 +107,14 @@ public class Android { } return null; } + + private static class TranslationLink { + public final String inName; + public final String outName; + + private TranslationLink(String inName, String outName) { + this.inName = inName; + this.outName = outName; + } + } }