doldonius: (Default)
[personal profile] doldonius
Предложение насчет i18n прибили тапком. Резоны:

1. Интерфейс системы перевода (видимо, речь об унаследованной от LJ) совершенно ни к черту;

2. Очень трудно координировать работу переводчиков-добровольцев;

3. Они не знают, как сделать, чтобы стало легко поддерживать перевод в актуальном состоянии (что, видимо, обусловлено ровно теми же причинами, что проблема 2).

Кроме того, в старом подробном разборе упомянуто, что в LJ i18n сделана типичным пыхопоидальным методом: вместо текста в страницу впыживается запрос к базе данных. Так делают все пыхопоиды — следовательно, это неправильно. Должен существовать Правильный Способ, одновременно уменьшающий нагрузку на серверы и облегчающий жизнь как англоязычным кодерам, так и переводчикам.

По интерфейсу. Как переводчик, я бы предпочел видеть соответствующую страницу целиком и переводить по надписи за раз легким тычком мыша, ибо качество перевода очень зависит от доступности контекста. Впрочем, мне-то не в падлу и напрямую исходники страницы править. Но тогда и текст должен быть прямо в странице — что, опять же, говорит о пагубной греховности пыхпыховой методы.

По координации и своевременности переводов. Нужна система оповещений об изменениях английских исходников. Внес кодер изменения — у переводчиков загорелась лампочка. Кроме того, нужна система блокировок, чтобы все разом не хватались за одно и то же, но при этом любой перевод должен становиться редактируемым после того, как текущий переводчик его закоммитит.

На этом остановлюсь, ибо опасно близок к русской программистской идее (переписать все к разэтакой матери с нуля). Что скажете, сэры? Не попадался ли где ровно такой велосипед? И если нет, насколько сложно его изобрести?

Date: 2010-09-18 10:58 am (UTC)
link01: (Default)
From: [personal profile] link01
Симпатичная система перевода сделана в Qt, хотя здесь она годится только в качестве источника вдохновения.


Текстовые сообщения Qt встраиваются в код, и каждое сообщение, предназначенное для последующего перевода, заворачивается в макрос tr(). После окончания отладки наступает очередь переводчика; он натравливает на код инструмент под названием Qt Linguist, который находит эти сообщения и позволяет переводчику создавать дополнительные файлы с текстами переводов. Эти дополнительные файлы подхватываются приложением во время работы в зависимости от какой-то переменной окружения ($LANG или $LOCALE).

Главное - что
1) Сообщения хранятся в тексте программы. Переводы хранятся в дополнительных файлах и подхватываются во время исполнения.
2) Сообщения (и переводы)
- целостны; они не разбиваются на мелкие части а-ля cout << numFiles << "files of" << totalFiles << "totalFiles read.\n".
- уникальны; для двух одинаковых сообщений в разных местах придется делать два перевода.
3) сообщения заворачиваются в макрос tr(), что
- позволяет Qt Linguist автоматически искать их в тексте,
- обеспечивает подковерную автоматику по поиску и замене исходного текста переводом во время исполнения.

Выглядит это примерно так:

statusBar()->showMessage(tr("Loaded %1").arg(fileName), 2000);

(%1 и .arg(fileName) - это слегка мутировавший printf; fileName подставляется на место %1.)

Date: 2010-09-18 04:51 pm (UTC)
link01: (Default)
From: [personal profile] link01
Ну прям нельзя и... :)))

Приветик!

Date: 2010-09-18 06:37 pm (UTC)
link01: (Default)
From: [personal profile] link01
Получилось. :)

Date: 2010-09-18 04:53 pm (UTC)
link01: (Default)
From: [personal profile] link01
В любом случае, мне придется искать, где в браузере можно сказать AcceptLanguage: ru. Или перекомпилировать браузер.

Тут, скорее всего, надо раздавать переводы не по запросу браузера, а смотреть в DNS, откуда человек запрашивает.

Date: 2010-09-18 05:01 pm (UTC)
link01: (Default)
From: [personal profile] link01
Угу. Читаю.