powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / android многоязычность
25 сообщений из 114, страница 2 из 5
android многоязычность
    #38709953
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола ПитерскийПри повороте экрана грузится сотвествующий ресурс, затем срабатывает поддержка gnugettext и переводит эти соотвесттвующие фразы.

Если кто не понял - при повороте экрана все происходит как и раньше - андроид грузит ваш родной строковый ресурс локализации, который по умолчанию, т.е. добавлять как раньше для других языков эти ресурсы уже не надо - т.к. перевод будет делать gnutext по своим файлам *.mo, которые преобразуются в соответсвующий класс java.
...
Рейтинг: 0 / 0
android многоязычность
    #38709957
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола ПитерскийЕсли кто не понял
Я не понял, можно пример кода с минимальным вмешательством, где выбирается файл хотя-бы по ориентации экрана? А то смахивает на общение слепого с глухим.
...
Рейтинг: 0 / 0
android многоязычность
    #38709971
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanМикола ПитерскийЕсли кто не понял
Я не понял, можно пример кода с минимальным вмешательством, где выбирается файл хотя-бы по ориентации экрана? А то смахивает на общение слепого с глухим.

Во это точно - я тоже хотел так написать :) Ничего из gnutext дополнительно не выбирается см. предыдущее мое сообщение, все остается как и было - андроид сам подгружает нужный ресурс и лишь потом gnutext просматривает все "значения строк" и изменяет если найдет в своем .mo файле строки на соответсвующие переводу. А все остается как и было раньше.
...
Рейтинг: 0 / 0
android многоязычность
    #38709979
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола Питерскийандроид сам подгружает нужный ресурс и лишь потом gnutext просматривает все
Это ничего не пояснило.

Вот примеры вызовов:
Код: java
1.
2.
Stringn somText = mContext.getString(R.string.command_read_password);
Toast.makeText(this, R.string.action_settings, Toast.LENGTH_SHORT).show();


Андроид сам подгрузил строку из нужного ресурса, я указал только константу. Как оно переведет мне это?
...
Рейтинг: 0 / 0
android многоязычность
    #38709984
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman, если подробно - то откомпилированные файлы *.mo , полученные из программы переводчика средствами утилит gnugettex переводятся в жава классы, н-р было 20 файлов языков, получилось 20 жава классов (я все это дело проверил - классы формирует нормально), вы эти классы подключаете к проекту, подключаете gnugettex и вызываете его функцию, которая определит какой жава клас вызывать (в зависимости от языка системы).
В любых событиях, которые подгружают новые ресурсы вы после загрузки этих ресурсов вызываете функцию, которая перебирает все строковые ресурсы и заменяет их из из соответствующего класса-перевода. Вроде все.
...
Рейтинг: 0 / 0
android многоязычность
    #38709992
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола ПитерскийВ любых событиях, которые подгружают новые ресурсы вы после загрузки этих ресурсов вызываете функцию, которая перебирает все строковые ресурсы и заменяет их из из соответствующего класса-перевода. Вроде все.
В общем, как я и думал, она не будет работать, если указывать R-константы и не сможет сама определить конфигурацию устройства.
Я погуглил на предмет применения её на андроид-девайсах, её используют те, кто привык её использовать на ББ и/или портирует большие проекты на смарты/планшеты.

Еще раз: в этом коде константы R.string.*, они числовые, а не строковые:
wadman
Код: java
1.
2.
Stringn somText = mContext.getString(R.string.command_read_password);
Toast.makeText(this, R.string.action_settings, Toast.LENGTH_SHORT).show();


И строки тут будут выбираться средой в зависимости от условий (см. выше) из разных строковых ресурсов.

gnugettext не осилит такое на автомате.
...
Рейтинг: 0 / 0
android многоязычность
    #38709995
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да уж, столько геморроя из-за ничего )
...
Рейтинг: 0 / 0
android многоязычность
    #38709996
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanМикола Питерскийандроид сам подгружает нужный ресурс и лишь потом gnutext просматривает все
Это ничего не пояснило.

Вот примеры вызовов:
Код: java
1.
2.
Stringn somText = mContext.getString(R.string.command_read_password);
Toast.makeText(this, R.string.action_settings, Toast.LENGTH_SHORT).show();


Андроид сам подгрузил строку из нужного ресурса, я указал только константу. Как оно переведет мне это?

Конкретно для этого случая:

Код: java
1.
2.
Stringn somText = _(     mContext.getString(R.string.command_read_password) );
Toast.makeText(this, _(  R.string.action_settings), Toast.LENGTH_SHORT).show();
...
Рейтинг: 0 / 0
android многоязычность
    #38710001
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола Питерскийwadmanпропущено...

Это ничего не пояснило.

Вот примеры вызовов:
Код: java
1.
2.
Stringn somText = mContext.getString(R.string.command_read_password);
Toast.makeText(this, R.string.action_settings, Toast.LENGTH_SHORT).show();


Андроид сам подгрузил строку из нужного ресурса, я указал только константу. Как оно переведет мне это?

Конкретно для этого случая:

Код: java
1.
2.
Stringn somText = _(     mContext.getString(R.string.command_read_password) );
Toast.makeText(this, _(  R.string.action_settings), Toast.LENGTH_SHORT).show();



ошибся - вот так:

Код: java
1.
2.
Stringn somText =  mContext.getString(  _( R.string.command_read_password) );
Toast.makeText(this, _(  R.string.action_settings), Toast.LENGTH_SHORT).show();
...
Рейтинг: 0 / 0
android многоязычность
    #38710003
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола ПитерскийКонкретно для этого случая:
Еще один вопросик: опыт применения имеется или это теоретическое применение (в этом примере)? :)
Это точно работает?
...
Рейтинг: 0 / 0
android многоязычность
    #38710009
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
Код: java
1.
2.
Stringn somText = mContext.getString(R.string.command_read_password);
Toast.makeText(this, R.string.action_settings, Toast.LENGTH_SHORT).show();


И строки тут будут выбираться средой в зависимости от условий (см. выше) из разных строковых ресурсов.

gnugettext не осилит такое на автомате.

Не понял в чем проблема? Сдесь же андроид и выбирает строку в зависимости от условий (положения, разрешения и т.д.)

Код: java
1.
R.string.command_read_password




а затем уже срабатываеет функция gnugettext, которая и выполнит перевод:
Код: java
1.
_( R.string.command_read_password)
...
Рейтинг: 0 / 0
android многоязычность
    #38710010
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола ПитерскийА в андроиде - пробовал в эклипсе - так там что нужно передать переводчику - сами файлы со строковыми ресурсами и у него поедет крыша или же он чего так отредактирует что нарушит структуру. Или я не прав?
можно посмотреть сюда

gettext несомненно хороший инструмент, но создатели андроида решили реализовать локализацию иначе, поэтому на прикручивание gettext имхо уйдет намного больше сил, чем на альтернативное решение.
...
Рейтинг: 0 / 0
android многоязычность
    #38710013
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола ПитерскийНе понял в чем проблема?
Проблема в том, что андроид выберет строку где-то у себя внутри, как таковой строки здесь не будет. Здесь одна из констант автоматически сгенерированного файла R.java:
Код: java
1.
public static final int action_settings=0x7f0a0009;
...
Рейтинг: 0 / 0
android многоязычность
    #38710016
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanМикола ПитерскийКонкретно для этого случая:
Еще один вопросик: опыт применения имеется или это теоретическое применение (в этом примере)? :)
Это точно работает?

В делфи давно использую - все корректно работает. В андроиде не вижу проблем - классы жава с соответсвующими переводами лично получил и проверил, далее реализовать не пробовал т.к. мультиязычных приложений пока нет, может появятся только через год т.к. сейчас в основном пишу на делфи, пхп и остальное связанное с вэб.
Это на первый взгляд кажется что это гемор - но один раз проделав понимаешь насколько это просто и естественно.
...
Рейтинг: 0 / 0
android многоязычность
    #38710018
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола ПитерскийЭто на первый взгляд кажется что это гемор - но один раз проделав понимаешь насколько это просто и естественно.
Как я и писал, для андроида это не лучший выбор. К тому же неполноценно работающий.
...
Рейтинг: 0 / 0
android многоязычность
    #38710024
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола, я выражу свой вопрос кодом
Код: xml
1.
<TextView text="@strings/wtf"/>
...
Рейтинг: 0 / 0
android многоязычность
    #38710029
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaМикола, я выражу свой вопрос кодом
Код: xml
1.
<TextView text="@strings/wtf"/>



делаем функцию, которая переберет все классы TextView и переведет их строковые ресурсы, естественно это при выводе на экран, далее повторяем эту функцию во всех событиях, связанных с повторным чтением ресурсов.
...
Рейтинг: 0 / 0
android многоязычность
    #38710036
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола Питерскийделаем функцию, которая переберет все классы TextView
Это компилируется в бинарный xml, где соответственно тоже заменится числом, которое я указал выше.
...
Рейтинг: 0 / 0
android многоязычность
    #38710044
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола Питерскийделаем функцию, которая переберет все классы TextView
у нас не только классы TextView, есть и другие контролы со строками, например Spinner. представляешь себе задержу на старте и при каждом повороте экрана, нужную на рекурсивный поиск всех контролов и замену их текста? кроме того у нас еще есть plurals, т.е. строка которая пойдет переводчику будет выглядеть как "%s попугаев", а в TextView на момент вызова gettext уже будет стоять "38 попугаев"

и все это ради возможности иметь отдельный файл для переводчика? я тебе сходу придумаю кучу способов не париться так жестко. один из них (кошерный) я уже запостил выше.
...
Рейтинг: 0 / 0
android многоязычность
    #38710051
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanЭто компилируется в бинарный xml, где соответственно тоже заменится числом, которое я указал выше.
он имеет в виду где-то на onPostCreate и на onConfigurationChanged сканить все контейнеры и контейнеры в контейнерах на предмет TextView, брать их getText() и менять его на _(getText()) .

з.ы. кстати кроме этого хозяйства у нас еще есть куча соплей в виде actionbar, navigationbar и наверняка чего-то еще, про что я сразу и не вспомнил. все это тоже придется при старте и поворотах перекопать.
...
Рейтинг: 0 / 0
android многоязычность
    #38710052
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
з.ы. с plurals я прогнал, их просто так в xml не всунешь
...
Рейтинг: 0 / 0
android многоязычность
    #38710061
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaи все это ради возможности иметь отдельный файл для переводчика?
Есть такой инструмент: Google translate toolkit, если разобраться, то толковая штука, в т.ч. позволяет отправлять файлы ресурсов профессионалам или делиться с друзьями для совместного перевода.

Гугл думает о своих. :)
...
Рейтинг: 0 / 0
android многоязычность
    #38710071
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanЕсть такой инструмент: Google translate toolkit
ну так 16381797
...
Рейтинг: 0 / 0
android многоязычность
    #38710073
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashawadmanЕсть такой инструмент: Google translate toolkit
ну так 16381797
Сори, проглядел.
...
Рейтинг: 0 / 0
android многоязычность
    #38710085
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanchpashaи все это ради возможности иметь отдельный файл для переводчика?
Есть такой инструмент: Google translate toolkit, если разобраться, то толковая штука, в т.ч. позволяет отправлять файлы ресурсов профессионалам или делиться с друзьями для совместного перевода.

Гугл думает о своих. :)

Да - только там:
• Android Resource (.xml)
• Application Resource Bundle (.arb)
• Chrome Extension (.json)
• GNU gettext-based (.po)

Вот последняя строка это и есть .po файл, который генерирует gettext для редактора poEdit. И в гугле знают что это классная вещь:)
...
Рейтинг: 0 / 0
25 сообщений из 114, страница 2 из 5
Форумы / Android [игнор отключен] [закрыт для гостей] / android многоязычность
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]