Локализация приложений ********************** Jandcode поддерживает локализацию приложений, основанную на переводе строковых констант. Идея в том, что все строковые ресурсы проекта, которые в будующем потребуется перевести, пишутся в проекте на одном языке (в текущей реализации - на русском). В исходных текстах такие строки оборачиваются в вызов метода ``UtLang.t`` (для java, groovy, gsp, javascript). .. code-block:: java // обычная строка System.out("Привет!"); // переводимая строка System.out(UtLang.t("Привет!")); С помощью средств, предоставляемых утилитой ``jc``, переводимые строки можно извлечь в специальные файлы, перевести и таким образом обеспечить поддержку нового языка. Строки, для которых не был предоставлен перевод, будут представлены оригинальным текстом на языке по умолчанию (в текущей реализации - на русском). Настройка project.jc ==================== В project.jc нужно подключить модуль поддержки локализации: .. code-block:: java include "localize-project" После подключения будут доступны новые команды:: lang-check lang-grab lang-update Выявление строк для перевода ============================ Запускаем:: jc lang-check Эта команда анализирует исходные тексты и выявляет строки, которые никак не помечены для локализации в исходниках. Все строки собираются в файл ``temp\lang-check.txt``. Для каждой строки указывается сама строка и место в файле, в котором она обнаружена. Каждую константу, требующую перевода, необходимо обернуть в вызов функции ``UtLang.t``. Например было: .. code-block:: java String s = "Привет"; // java var s = "Привет"; // javascript Должно стать: .. code-block:: java String s = UtLang.t("Привет"); //java var s = UtLang.t("Привет"); //javascript Если строка описана как константа, то переводит ее нужно в месте использования! .. code-block:: java class Test { public static String AA = "Привет"; //NLS void getAA() { return UtLang.t(AA); } } Константы, требующие перевода, но не заключенные в вызов ``UtLang.t``, можно пометить коментарием ``//NLS``. Коментарий должен быть указан либо на той же строке, что и константа, либо перед ней: .. code-block:: java //NLS String s = "Привет"; String s2 = "Привет"; //NLS Константы, не требующие перевода, нужно пометить коментарием ``//NON-NLS``. Коментарий должен быть указан либо на той же строке, что и константа, либо перед ней: .. code-block:: java //NON-NLS String s = "Привет"; String s2 = "Привет"; //NON-NLS Констаны, собранные через "+" нужно объеденить и использовать формат строки из метода ``MessageFormat.format``: .. code-block:: java // было String s = "Обработатано " + n + " файлов"; // нужно String s = UtLang.t("Обработано {0} файлов", n); Сбор строк для перевода ======================= После того, как все нужные строки помечены в исходниках, можно собрать их. Для этого предназначена команда:: jc lang-grab Команда пересоздает файл ``lang-data.xml`` в корневом пакете модуля. Файл выглядет так: .. code-block:: xml Добавить Закрыть Назад Обновление файла перевода ========================= После того, как все нужные строки собраны, можно формировать файлы для перевода. Для этого скопируйте файл ``lang-data.xml`` в тот же каталог с именем ``lang-data-XX.xml``, где вместо ``XX`` поставьте код языка, для которого этот файл (например ``lang-data-en.xml``). После этого выполните команду:: jc lang-update Получим такой файл: .. code-block:: xml Добавить Закрыть Назад Редактируем файл ``lang-data-en.xml``, в теги ``t`` записываем перевод. Снова запускаем ``jc lang-update`` (для убирания пометок о непереведенны строках). Если в файле ``lang-data.xml`` появятся новые строки, то после выполнения ``jc lang-update``, эти новые строки попадут во все файлы перевода.