![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Kizja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 15.7.2007 Репутация: нет Всего: нет |
Привет всем, кто-нибудь знает, как решить такую проблему:
Допустим есть какой-нибудь проект и надо его перевести на другой язык – ну например, если веб приложение, то все заголовки, названия кнопок, ошибки, эксепшены итд. Т.е. другими словами надо пройти все *.java файлы и найти в них интересующие стринги – естественно не собирать всё подряд, а именно те стринговые значения, которые являются фразой и нуждаются в последствие в переводе. Слышал про antlr, нашёл в интернете примерно такую программу, которая проходит файл и находит всё что там есть, но как сделать, чтобы она не тупо всё находила, а именно то, что надо:
Может кто-то сталкивался с подобной задачей или хотя бы есть идеи как это сделать? Проблема в том, что эти стринги могут относится к разным местам – например, если один и тот же стринг, скажем в методе setTitle(„Home page“); то его надо находить, а если это логи Logger.debug(„Home page“); то такой стринг интереса не представляет и браться не должен. |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Вообще задача интернационализации приложения, решается обычно не так. Все строковые значения которые требуется переводить, выносятся в resource bundle, затем для каждого поддерживаемого языка создается свой bundle.
Любая приличная IDE умеет вытаскивать текст в resource bundle. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Kizja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 15.7.2007 Репутация: нет Всего: нет |
LSD, сам перевод работает - то, что я написал выше в задании, требуется, на сколько я понял, для контроля над тем, какие новые фразы, требуемые перевода добавились. Короче, одним словом, прогеры комитят код, а тем, кто занимается переводом влом его просматривать, кроме того здесь вступает в силу человеческий фактор и что-то может быть пропущено, и они хотят, чтобы в конечном счёте было что-то типа такого:
Есть файл с переводом, ищутся стринги из ява классов и сравниваются есть ли уже данная фраза среди переведённых или же нету, т.е. допустим в итоге после окончания программы, должен получиться результат типа: Главная страница = Main page (нашёл стринг в ява классе и соответсвие в переводах) Новости = ??? (нашёл стринг новости, но среди переводов не нашёл соответствие этому стрингу - News) Как бы суть проблемы не в том, что надо перевести, а суть в том, что надо выковырить нужные стринги из ява файлов. |
|||
|
||||
AlexeyVorotnikov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 18.6.2007 Где: Москва Репутация: 10 Всего: 18 |
А как отличать какие строчки надо переводить, а какие -- нет?
-------------------- RTFM! Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification |
|||
|
||||
Kizja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 15.7.2007 Репутация: нет Всего: нет |
У меня пока что один вариант, который мне кажется разумным, хотя возможно он на самом деле и плохой: допустим будет тхт файл с именами классов, возможно так же там будут вместе с классами и методы, которые следует обрабатывать - это видимо получится очень длинный файл, если каждый конкретный метод будет там прописываться, но в тоже время от его увеличения, не прибавится проблем, т.е. просто программе надо будет больше информации переработать.
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Интернационализация по русски, бесмысленная и беспощадная ![]() -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
AlexeyVorotnikov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 18.6.2007 Где: Москва Репутация: 10 Всего: 18 |
Что-то я не понял этой идеи... Строчки-то как различать? -------------------- RTFM! Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification |
|||
|
||||
Kizja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 15.7.2007 Репутация: нет Всего: нет |
AlexeyVorotnikov, если запустить тот код, который я указывал выше и передать параметром класс, который содержит:
То в результате программа выдаст: text:AST ROOT type=0 text:CLASS_DEF type=14 text:MODIFIERS type=5 text:public type=89 text:Test type=68 text:EXTENDS_CLAUSE type=18 text:IMPLEMENTS_CLAUSE type=19 text:OBJBLOCK type=6 text:METHOD_DEF type=9 text:MODIFIERS type=5 text:public type=89 text:static type=65 text:TYPE type=13 text:void type=78 text:main type=68 text:PARAMETERS type=20 text:PARAMETER_DEF type=21 text:MODIFIERS type=5 text:TYPE type=13 text:String type=68 text:[ type=17 text:args type=68 text:{ type=7 text:EXPR type=28 text:( type=27 text:. type=69 text:. type=69 text:System type=68 text:out type=68 text:println type=68 text:ELIST type=34 text:EXPR type=28 text:"Hello World" type=162 Где видно, что он нашёл стринг "Hello World", а перед этим видно в какой метод этот стринг параметром передавался: text:System type=68 text:out type=68 text:println type=68 System.out.println будет как бы ключом для поиска стринга, т.е. если он имеется в списке путей, подлежащих переводу, то "Hello world" должен браться, если нету, значит не должен. Возможно это корявый подход, но что-то ничего другого не придумал и здесь тоже никто ничего дельного не предложил, а ты может знаешь более хороший способ? |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Мда... Эта тема отличный пример того, как не нужно проектировать приложения. Или того, что бывает с изначально криво-спроектированными приложениями где-то в середине процесса разработки.
Тут только один грамотный путь - это использовать Resource Bundles. Причём этот путь был протоптан настолько давно, что нужно было очень "постараться" чтобы с него свернуть... А те кто занимается переводом в исходники вообще смотреть не должны. У них должен быть доступ к bundle-файлам и информация о ключах. И всё. Ну а если нужно автоматизировать поиск пропущенных ключей или значений, то по bundle-файлам это сделать как 2 байта переслать. Лично бы я, не пожалел времени переделать все на бандлы. Например в NetBeans есть мастер интернационализации, который помогает искать захардкоденые строки и выносить их в файлы локализации. |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
||||
|
||||
iluvatar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 266 Регистрация: 17.9.2007 Репутация: нет Всего: 4 |
Намного лучше если переводчик будет читать код и разбираться в каком контексте используется эта константа в этом методе?
А еще придумали такую вещь как комментарий. Это сообщение отредактировал(а) iluvatar - 23.4.2008, 08:37 |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Это от таланта переводчика зависит. ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |