В настоящее время я работаю над большим Java-приложением для рабочего стола-и сейчас нахожусь в том месте, где мне нужно добавить переводы. Что меня беспокоит в системе l18n-, так это то, что она не обеспечивает никакой проверки во время компиляции.
В системе Java у вас есть что-то вроде HashMap
, где каждая локализованная строка имеет «Ключ», а переведенная строка является «Значением». Это выглядит примерно так (взято из примера туториала):
Locale currentLocale;
ResourceBundle messages;
currentLocale = new Locale(language, country);
messages = ResourceBundle.getBundle("MessagesBundle", currentLocale);
System.out.println(messages.getString("greetings"));
Это хорошо работает, если у вас простое/небольшое приложение. Но в большом приложении с тысячами переведенных строк может случиться так, что у вас есть опечатка в «Ключе» и, следовательно, вы получите пустую или неправильную строку.
Если повезет, приложение выдаст RuntimeException
, чтобы сообщить вам об этом, но даже в этом случае возможно, что вы даже не дойдете до этого момента, потому что в диалоговом окне используется неверный «Ключ», который может не появляется при определенных обстоятельствах (говорят, что это диалоговое окно с ошибкой).
Чтобы этого не произошло, лучше использовать систему, которая предлагает проверку используемых «ключей» во время компиляции. Например, это используется в Android, где вы указываете ресурсы в файле XML-, который затем индексируется и сопоставляется с классом (, включая «ключи» для использования). Таким образом, вы получите что-то вроде этого (из Android Docs):
// Set the text on a TextView object using a resource ID
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello_message);
Если у вас есть опечатка в этом «ключе», вы получите сообщение об ошибке во время компиляции-время (также у вас есть "авто-завершение" из вашей IDE).
Теперь, чтобы что-то подобное работало, вам понадобится небольшой инструмент/скрипт, который выполняет часть индексирования и генерирует класс Resource-(R.java
). В Android это сделает за вас плагин Eclipse-(или ваша IDE в целом).
Теперь мой вопрос::Существует ли уже система, которую я могу использовать для обычных настольных-приложений на Java? Или я ужасно ошибаюсь в том, что говорю?