diff --git a/jadx-gui/src/main/java/jadx/gui/utils/NLS.java b/jadx-gui/src/main/java/jadx/gui/utils/NLS.java
index 4b6762299..d7c06fe26 100644
--- a/jadx-gui/src/main/java/jadx/gui/utils/NLS.java
+++ b/jadx-gui/src/main/java/jadx/gui/utils/NLS.java
@@ -1,6 +1,5 @@
package jadx.gui.utils;
-import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
@@ -39,6 +38,7 @@ public class NLS {
LANG_LOCALES.add(new LangLocale("ko", "KR"));
LANG_LOCALES.add(new LangLocale("pt", "BR"));
LANG_LOCALES.add(new LangLocale("ru", "RU"));
+ LANG_LOCALES.add(new LangLocale("id", "ID"));
LANG_LOCALES.forEach(NLS::load);
@@ -50,20 +50,20 @@ public class NLS {
private NLS() {
}
- private static void load(LangLocale locale) {
- ResourceBundle bundle;
- ClassLoader classLoader = ClassLoader.getSystemClassLoader();
- String resName = String.format("i18n/Messages_%s.properties", locale.get());
- URL bundleUrl = classLoader.getResource(resName);
+ private static void load(LangLocale lang) {
+ Locale locale = lang.get();
+ String resName = String.format("i18n/Messages_%s.properties", locale.toLanguageTag().replace('-', '_'));
+ URL bundleUrl = NLS.class.getClassLoader().getResource(resName);
if (bundleUrl == null) {
throw new JadxRuntimeException("Locale resource not found: " + resName);
}
+ ResourceBundle bundle;
try (Reader reader = new InputStreamReader(bundleUrl.openStream(), StandardCharsets.UTF_8)) {
bundle = new PropertyResourceBundle(reader);
- } catch (IOException e) {
+ } catch (Exception e) {
throw new JadxRuntimeException("Failed to load " + resName, e);
}
- LANG_LOCALES_MAP.put(locale, bundle);
+ LANG_LOCALES_MAP.put(lang, bundle);
}
public static String str(String key) {
diff --git a/jadx-gui/src/main/resources/i18n/Messages_id_ID.properties b/jadx-gui/src/main/resources/i18n/Messages_id_ID.properties
new file mode 100644
index 000000000..5311de078
--- /dev/null
+++ b/jadx-gui/src/main/resources/i18n/Messages_id_ID.properties
@@ -0,0 +1,422 @@
+language.name=Indonesian
+
+menu.file=Berkas
+menu.view=Tampilan
+menu.recent_projects=Proyek Terbaru
+menu.no_recent_projects=Tidak ada proyek terbaru
+menu.preferences=Preferensi
+menu.sync=Sinkronisasi dengan editor
+menu.flatten=Tampilkan paket yang diratakan
+menu.heapUsageBar=Tampilkan penggunaan memori
+menu.alwaysSelectOpened=Selalu Pilih Berkas/Kelas yang Terbuka
+menu.dock_log=Kaitkan pemantau log
+menu.navigation=Navigasi
+menu.text_search=Pencarian Teks
+menu.class_search=Pencarian Kelas
+menu.comment_search=Pencarian Komentar
+menu.goto_main_activity=Pergi ke Activitas Utama
+menu.tools=Alat
+menu.plugins=Plugin
+menu.decompile_all=Deskompilasi semua kelas
+menu.reset_cache=Reset cache kode
+menu.deobfuscation=Deobfikasi
+menu.log=Pemantau Log
+menu.help=Bantuan
+menu.about=Tentang
+menu.quark=Mesin Quark
+menu.update_label=Versi baru %s tersedia!
+
+file.open_action=Buka berkas ...
+file.add_files_action=Tambahkan berkas
+file.open_title=Buka berkas
+file.open_project=Buka proyek
+file.new_project=Proyek baru
+file.save_project=Simpan proyek
+file.save_project_as=Simpan proyek sebagai...
+file.reload=Muat ulang berkas
+file.live_reload=Muat ulang otomatis
+file.live_reload_desc=Muat ulang berkas secara otomatis saat ada perubahan
+file.open_mappings=Buka pemetaan...
+file.save_mappings=Simpan pemetaan
+file.save_mappings_as=Simpan pemetaan sebagai...
+file.close_mappings=Tutup pemetaan
+file.save_all=Simpan semua
+file.save=Simpan
+file.export_gradle=Simpan sebagai proyek gradle
+file.save_all_msg=Pilih direktori untuk menyimpan sumber yang telah didekompilasi
+file.exit=Keluar
+
+start_page.title=Halaman Awal
+start_page.start=Mulai
+start_page.recent=Proyek Terbaru
+
+tree.inputs_title=Input
+tree.input_files=Berkas
+tree.input_scripts=Skrip
+tree.sources_title=Kode Sumber
+tree.resources_title=Sumber Daya
+tree.loading=Memuat...
+
+progress.load=Memuat
+progress.save_mappings=Menyimpan pemetaan
+progress.decompile=Deskompilasi
+progress.canceling=Membatalkan
+
+error_dialog.title=Kesalahan
+error_dialog.not_found=%s tidak ditemukan
+
+search.previous=Sebelumnya
+search.next=Berikutnya
+search.mark_all=Tandai Semua
+search.regex=Regex
+search.match_case=Sama huruf
+search.whole_word=Seluruh kata
+search.find=Cari
+search.results=%s%d hasil
+
+tabs.copy_class_name=Salin Nama
+tabs.close=Tutup
+tabs.closeOthers=Tutup yang Lain
+tabs.closeAll=Tutup Semua
+tabs.closeAllRight=Tutup Semua yang Kanan
+tabs.code=Kode
+tabs.smali=Smali
+
+nav.back=Kembali
+nav.forward=Maju
+
+message.taskTimeout=Tugas melebihi batas waktu %d ms.
+message.userCancelTask=Tugas dibatalkan oleh pengguna.
+message.memoryLow=JADX kekurangan memori. Harap restart dengan peningkatan ukuran heap maksimum.
+message.taskError=Tugas gagal dengan kesalahan (periksa log untuk detailnya).
+message.errorTitle=Kesalahan
+message.load_errors=Pemuatan gagal.\nJumlah kesalahan: %d\nKlik OK untuk membuka penampil log.
+message.no_classes=Tidak ada kelas yang dimuat, tidak ada yang dapat didekompilasi!
+
+message.saveIncomplete=Simpan tidak lengkap.
%s
%d kelas atau sumber daya tidak disimpan!
+message.indexIncomplete=Indeks beberapa kelas dilewati.
%s
%d kelas tidak diindeks dan tidak akan muncul dalam hasil pencarian!
+message.indexingClassesSkipped=JADX kekurangan memori. Oleh karena itu %d kelas tidak diindeks.
Jika Anda ingin semua kelas diindeks, restart JADX dengan ukuran heap maksimum yang lebih besar.
+
+heapUsage.text=Penggunaan memori JADX: %.2f GB dari %.2f GB
+
+common_dialog.ok=OK
+common_dialog.cancel=Batal
+common_dialog.add=Tambah
+common_dialog.update=Perbarui
+common_dialog.remove=Hapus
+common_dialog.reset=Reset
+
+file_dialog.supported_files=Berkas yang didukung
+file_dialog.load_dir_title=Muat direktori
+file_dialog.load_dir_confirm=Muat semua berkas dari direktori?
+
+search_dialog.open=Buka
+search_dialog.cancel=Batal
+search_dialog.open_by_name=Cari teks:
+search_dialog.search_button=Cari
+search_dialog.search_history=Riwayat pencarian
+search_dialog.auto_search=Pencarian otomatis
+search_dialog.search_in=Cari definisi dari:
+search_dialog.class=Kelas
+search_dialog.method=Metode
+search_dialog.field=Bidang
+search_dialog.code=Kode
+search_dialog.options=Opsi pencarian:
+search_dialog.ignorecase=Non-ketetapan huruf besar kecil
+search_dialog.load_more=Muat lebih banyak
+search_dialog.load_all=Muat semua
+search_dialog.stop=Berhenti
+search_dialog.results_incomplete=Ditemukan %d+
+search_dialog.results_complete=Ditemukan %d (lengkap)
+search_dialog.resources_load_errors=Kesalahan pemuatan: %d
+search_dialog.resources_skip_by_size=Dilewati karena ukuran: %d
+search_dialog.resources_check_logs=(klik untuk memeriksa log)
+search_dialog.col_node=Node
+search_dialog.col_code=Kode
+search_dialog.sort_results=Sortir hasil
+search_dialog.regex=Regex
+search_dialog.active_tab=Hanya tab aktif
+search_dialog.comments=Komentar
+search_dialog.resource=Sumber daya
+search_dialog.keep_open=Tetap terbuka
+search_dialog.tip_searching=Mencari
+
+usage_dialog.title=Pencarian penggunaan
+usage_dialog.label=Penggunaan untuk:
+
+comment_dialog.title.add=Tambahkan komentar kode
+comment_dialog.title.update=Perbarui komentar kode
+comment_dialog.label=Komentar:
+comment_dialog.usage=Gunakan Shift + Enter untuk memulai baris baru
+
+log_viewer.title=Pemantau Log
+log_viewer.log_level=Tingkat log:
+log_viewer.mode=Mode:
+log_viewer.modes=Semua|Semua skrip|Skrip saat ini
+log_viewer.hide=Sembunyikan
+log_viewer.dock=Kaitkan
+log_viewer.undock=Lepas kaitan
+log_viewer.clear=Bersihkan
+
+about_dialog.title=Tentang JADX
+
+preferences.title=Preferensi
+preferences.deobfuscation=Deobfikasi
+preferences.appearance=Tampilan
+preferences.shortcuts=Pintas
+preferences.select_shortcuts=Pilih grup pintas tertentu
+preferences.decompile=Deskompilasi
+preferences.plugins=Plugin
+preferences.project=Proyek
+preferences.other=Lainnya
+preferences.language=Bahasa
+preferences.lineNumbersMode=Mode nomor baris editor
+preferences.jumpOnDoubleClick=Aktifkan lompat saat dua kali klik
+preferences.useAlternativeFileDialog=Gunakan dialog berkas alternatif
+preferences.check_for_updates=Periksa pembaruan saat memulai
+preferences.useDx=Gunakan dx/d8 untuk mengonversi bytecode Java
+preferences.decompilationMode=Mode deskompilasi
+preferences.codeCacheMode=Mode cache kode
+preferences.usageCacheMode=Mode cache data penggunaan
+preferences.showInconsistentCode=Tampilkan kode yang tidak konsisten
+preferences.escapeUnicode=Escape unicode
+preferences.replaceConsts=Ganti konstanta
+preferences.respectBytecodeAccessModifiers=Hormati pengubah akses bytecode
+preferences.useImports=Gunakan pernyataan impor
+preferences.useDebugInfo=Gunakan info debug
+preferences.inlineAnonymous=Inline kelas anonim
+preferences.inlineMethods=Inline metode
+preferences.inlineKotlinLambdas=Izinkan untuk menggantikan Lambdas Kotlin
+preferences.moveInnerClasses=Pindahkan kelas dalam ke kelas induk
+preferences.extractFinally=Ekstrak blok finally
+preferences.fsCaseSensitive=File sistem bersifat sensitif huruf besar-kecil
+preferences.skipResourcesDecode=Jangan dekode sumber daya
+preferences.useKotlinMethodsForVarNames=Gunakan metode Kotlin untuk mengganti nama variabel
+preferences.commentsLevel=Tingkat komentar kode
+preferences.autoSave=Simpan otomatis
+preferences.threads=Jumlah utas pemrosesan
+preferences.excludedPackages=Package yang dikecualikan
+preferences.excludedPackages.tooltip=Daftar nama paket yang dipisahkan spasi yang tidak akan di deskompilasi atau diindeks (menghemat RAM)
+preferences.excludedPackages.button=Edit
+preferences.excludedPackages.editDialog=Daftar nama paket yang dipisahkan spasi yang tidak akan di deskompilasi atau diindeks (menghemat RAM)
contoh: android.support
+preferences.cfg=Hasilkan grafik CFG metode (dalam format 'dot')
+preferences.raw_cfg=Hasilkan grafik CFG mentah
+preferences.integerFormat=Format bilangan bulat
+preferences.font=Font editor
+preferences.smali_font=Font monospasi (Smali/Hex)
+preferences.laf_theme=Tema
+preferences.theme=Tema editor
+preferences.start_jobs=Deskompilasi latar belakang otomatis
+preferences.select_font=Ubah
+preferences.select_smali_font=Ubah
+preferences.deobfuscation_on=Aktifkan deobfikasi
+preferences.generated_renames_mapping_file_mode=Mode penanganan file pemetaan
+preferences.deobfuscation_min_len=Panjang nama minimum
+preferences.deobfuscation_max_len=Panjang nama maksimum
+preferences.deobfuscation_source_alias=Gunakan nama berkas sumber sebagai alias nama kelas
+preferences.deobfuscation_res_name_source=Sumber nama sumber daya yang lebih baik
+preferences.save=Simpan
+preferences.cancel=Batal
+preferences.reset=Reset
+preferences.reset_message=Reset pengaturan ke nilai default?
+preferences.reset_title=Reset pengaturan
+preferences.copy=Salin ke papan klip
+preferences.copy_message=Semua nilai pengaturan telah disalin ke papan klip
+preferences.rename=Ganti nama identitas
+preferences.rename_case=Untuk memperbaiki masalah sensitivitas huruf besar-kecil
+preferences.rename_valid=Untuk membuatnya valid
+preferences.rename_printable=Untuk membuatnya dapat dicetak
+preferences.search_group_title=Pencarian
+preferences.search_results_per_page=Hasil per halaman (0 - tanpa batas)
+preferences.res_file_ext=Ekstensi berkas sumber daya ('xml|html', * untuk semua)
+preferences.res_skip_file=Lewati berkas sumber daya jika lebih besar (MB) (0 - nonaktifkan)
+
+preferences.plugins.install=Instal plugin
+preferences.plugins.install_btn=Instal
+preferences.plugins.uninstall_btn=Uninstal
+preferences.plugins.location_id_label=Lokasi id:
+preferences.plugins.plugin_jar=Pilih berkas jar Plugin
+preferences.plugins.plugin_jar_label=atau
+preferences.plugins.update_all=Perbarui Semua
+preferences.plugins.details=Detail Plugin
+preferences.plugins.task.installing=Menginstal plugin
+preferences.plugins.task.uninstalling=Menguninstal plugin
+preferences.plugins.task.updating=Mengperbarui plugin
+preferences.plugins.task.downloading_list=Mengunduh daftar plugin
+
+preferences.cache=Cache
+preferences.cache.location=Lokasi cache
+preferences.cache.location_default=Direktori sistem cache aplikasi
+preferences.cache.location_local=Direktori yang sama dengan berkas proyek
+preferences.cache.location_custom=Lokasi kustom:
+preferences.cache.change_notice=* untuk cache yang sudah ada, perubahan akan diterapkan setelah cache dihapus atau direset secara manual
+preferences.cache.table.title=Daftar Cache
+preferences.cache.table.project=Cache untuk proyek
+preferences.cache.table.size=Penggunaan disk
+preferences.cache.btn.usage=Hitung penggunaan
+preferences.cache.btn.delete_selected=Hapus yang Dipilih
+preferences.cache.btn.delete_all=Hapus Semua
+preferences.cache.task.usage=Menghitung ukuran cache
+preferences.cache.task.delete=Menghapus cache
+
+msg.open_file=Harap buka berkas
+msg.saving_sources=Menyimpan sumber
+msg.language_changed_title=Bahasa diubah
+msg.language_changed=Bahasa baru akan ditampilkan saat aplikasi dimulai kembali.
+msg.warning_title=Peringatan
+msg.common_mouse_shortcut=Ini adalah tombol yang sering digunakan, apakah Anda yakin ingin mengaitkannya dengan tindakan?
+msg.duplicate_shortcut=Pintas %s sudah diatur pada tindakan "%s" dari kategori "%s", lanjutkan?
+msg.project_error_title=Kesalahan
+msg.project_error=Proyek tidak dapat dimuat
+msg.cmd_select_class_error=Gagal memilih kelas\n%s\nKelas tidak ada.
+msg.cant_add_comment=Tidak dapat menambahkan komentar di sini
+
+popup.bytecode_col=Tampilkan Bytecode Dalvik
+popup.line_wrap=Baris Wrap
+popup.undo=Kembalikan
+popup.redo=Ulang
+popup.cut=Potong
+popup.copy=Salin
+popup.paste=Tempel
+popup.delete=Hapus
+popup.select_all=Pilih Semua
+popup.frida=Salin sebagai potongan Frida
+popup.xposed=Salin sebagai potongan Xposed
+popup.find_usage=Cari Penggunaan
+popup.go_to_declaration=Pergi ke Deklarasi
+popup.exclude=Kecualikan
+popup.exclude_packages=Kecualikan paket
+popup.add_comment=Komentar
+popup.search_comment=Cari komentar
+popup.rename=Ganti nama
+popup.search=Cari "%s"
+popup.search_global=Cari Global "%s"
+popup.remove=Hapus
+popup.add_files=Tambahkan berkas
+popup.add_scripts=Tambahkan skrip
+popup.new_script=Skrip baru
+popup.json_prettify=JSON Prettify
+
+script.run=Jalankan
+script.save=Simpan
+script.auto_complete=Auto Lengkapi
+script.check=Periksa
+script.format=Format Ulang
+script.log=Tampilkan log
+
+exclude_dialog.title=Selektor Paket
+exclude_dialog.ok=OK
+exclude_dialog.select_all=Pilih semua
+exclude_dialog.deselect=Batal pilih
+exclude_dialog.invert=Balik pilihan
+
+confirm.save_as_title=Konfirmasi Simpan Sebagai
+confirm.save_as_message=%s sudah ada.\nApakah Anda ingin menggantinya?
+confirm.not_saved_title=Simpan proyek
+confirm.not_saved_message=Simpan proyek saat ini sebelum melanjutkan?
+
+certificate.cert_type=Tipe
+certificate.serialSigVer=Versi Tanda Tangan
+certificate.serialNumber=Nomor Seri
+certificate.cert_subject=Subjek
+certificate.serialValidFrom=Berlaku dari
+certificate.serialValidUntil=Berlaku hingga
+certificate.serialPubKeyType=Tipe Kunci Publik
+certificate.serialPubKeyExponent=Eksponen
+certificate.serialPubKeyModulus=Modulus
+certificate.serialPubKeyModulusSize=Ukuran Modulus (bit)
+certificate.serialSigType=Tipe Tanda Tangan
+certificate.serialSigOID=OID Tanda Tangan
+certificate.serialMD5=Sidik Jari MD5
+certificate.serialSHA1=Sidik Jari SHA-1
+certificate.serialSHA256=Sidik Jari SHA-256
+certificate.serialPubKeyY=Y
+
+apkSignature.signer=Penandatangan
+apkSignature.verificationSuccess=Verifikasi tanda tangan berhasil
+apkSignature.verificationFailed=Verifikasi tanda tangan gagal
+apkSignature.signatureSuccess=Tanda tangan APK yang valid v%d ditemukan
+apkSignature.signatureFailed=Tanda tangan APK yang tidak valid v%d ditemukan
+apkSignature.errors=Kesalahan
+apkSignature.warnings=Peringatan
+apkSignature.exception=Verifikasi APK gagal
+apkSignature.unprotectedEntry=Berkas yang tidak dilindungi oleh tanda tangan APK v1. Modifikasi yang tidak sah pada entri-entri ini hanya dapat terdeteksi oleh tanda tangan APK v2 dan yang lebih tinggi.
+
+issues_panel.label=Masalah:
+issues_panel.errors=%d kesalahan
+issues_panel.warnings=%d peringatan
+issues_panel.tooltip=Buka di penampil log
+
+debugger.process_selector=Pilih proses untuk debugging
+debugger.step_into=Langkah Masuk (F7)
+debugger.step_over=Langkah Atas (F8)
+debugger.step_out=Langkah Keluar (Shift + F8)
+debugger.run=Jalankan (F9)
+debugger.stop=Hentikan debugger dan hentikan aplikasi
+debugger.pause=Jeda
+debugger.rerun=Jalankan Ulang
+debugger.cfm_dialog_title=Keluar saat debugging
+debugger.cfm_dialog_msg=Apakah Anda yakin ingin mengakhiri debugger?
+
+debugger.popup_set_value=Tetapkan Nilai
+debugger.popup_change_to_zero=Ubah menjadi 0
+debugger.popup_change_to_one=Ubah menjadi 1
+debugger.popup_copy_value=Salin Nilai
+
+logcat.pause=Jeda Logcat
+logcat.start=Lanjutkan Logcat
+logcat.clear=Kosongkan Logcat
+
+logcat.error_fail_start=Gagal memulai Logcat
+logcat.process=Proses
+logcat.level=Tingkat
+logcat.default=Bawaan
+logcat.verbose=Verbose
+logcat.debug=Debug
+logcat.info=Info
+logcat.warn=Peringatan
+logcat.error=Kesalahan
+logcat.fatal=Fatal
+logcat.silent=Diam
+logcat.logcat=Logcat
+logcat.select_attached=Pilih Terlampir
+logcat.select_all=Pilih Semua
+logcat.unselect_all=Batal Pilih Semua
+
+set_value_dialog.label_value=Nilai
+set_value_dialog.btn_set=Tetapkan Nilai
+set_value_dialog.title=Tetapkan Nilai
+set_value_dialog.neg_msg=Gagal menetapkan nilai.
+set_value_dialog.sel_type=Pilih jenis untuk menetapkan nilai.
+
+adb_dialog.addr=Alamat ADB
+adb_dialog.port=Port ADB
+adb_dialog.path=Path ADB
+adb_dialog.launch_app=Jalankan Aplikasi
+adb_dialog.start_server=Menajalankan Server ADB
+adb_dialog.refresh=Segarkan
+adb_dialog.tip_devices=%d perangkat
+adb_dialog.device_node=Perangkat
+adb_dialog.missing_path=Harus memberikan path ADB untuk menjalankan server ADB.
+adb_dialog.waiting=Menunggu untuk terhubung ke server ADB...
+adb_dialog.connecting=Menghubungkan ke server ADB, alamat: %s:%s...
+adb_dialog.connect_okay=Server ADB terhubung, alamat: %s:%s
+adb_dialog.connect_fail=Gagal menghubungkan ke server ADB.
+adb_dialog.disconnected=Server ADB terputus.
+adb_dialog.start_okay=Server ADB dijalankan pada port: %s.
+adb_dialog.start_fail=Gagal menjalankan server ADB pada port: %s!
+adb_dialog.forward_fail=Gagal meneruskan dengan alasan tertentu.
+adb_dialog.being_debugged_msg=Proses ini sepertinya sedang di-debug, apakah kita harus melanjutkan?
+adb_dialog.unknown_android_ver=Gagal mendapatkan versi rilis Android, gunakan Android 8 sebagai default?
+adb_dialog.being_debugged_title=Sedang Didebug oleh Pihak Lain.
+adb_dialog.init_dbg_fail=Gagal menginisialisasi debugger.
+adb_dialog.msg_read_mani_fail=Gagal mendekode AndroidManifest.xml
+adb_dialog.no_devices=Tidak dapat menemukan perangkat apa pun untuk memulai aplikasi.
+adb_dialog.restart_while_debugging_title=Memulai Ulang Saat Debugging
+adb_dialog.restart_while_debugging_msg=Anda sedang debugging sebuah aplikasi, apakah Anda yakin ingin memulai ulang sesi?
+adb_dialog.starting_debugger=Memulai debugger...
+
+action.variant=%s (variant)
+action_category.menu_toolbar=Menu / Toolbar
+action_category.code_area=Area Kode
+action_category.plugin_script=Plugin Script
diff --git a/jadx-gui/src/test/java/jadx/gui/TestI18n.java b/jadx-gui/src/test/java/jadx/gui/TestI18n.java
index 1a77582e1..456114dd2 100644
--- a/jadx-gui/src/test/java/jadx/gui/TestI18n.java
+++ b/jadx-gui/src/test/java/jadx/gui/TestI18n.java
@@ -8,6 +8,7 @@ import java.nio.file.Paths;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Locale;
import java.util.Properties;
import java.util.Set;
@@ -15,6 +16,9 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
+import jadx.gui.utils.LangLocale;
+import jadx.gui.utils.NLS;
+
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.empty;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -36,6 +40,16 @@ public class TestI18n {
assertTrue(Files.exists(guiJavaPath));
}
+ @Test
+ public void verifyLocales() {
+ for (LangLocale lang : NLS.getLangLocales()) {
+ Locale locale = lang.get();
+ System.out.println("Language: " + locale.getLanguage() + " - " + locale.getDisplayLanguage()
+ + ", country: " + locale.getCountry() + " - " + locale.getDisplayCountry()
+ + ", language tag: " + locale.toLanguageTag());
+ }
+ }
+
@Test
public void filesExactlyMatch() throws IOException {
Files.list(i18nPath).forEach(p -> {