Перевод модуля - личный опыт (в процессе)

Главные вкладки

Аватар пользователя sashka sashka 23 февраля 2007 в 15:51

Хочу немного поделиться опытом создания перевода модулей. Тут по возможности систематизированны ссылки на важное в форуме, на готовые переводы и программы, а так же даны практические рекомендации. Сразу отмечу, что я — друпалламер :), поэтому если у гуру — а к вам есть несколько вопросов — возникнут замечания и пожелания, выражайте свои мысли, исправления и замечания в комментах. Я внесу все изменения :). Если данный труд получится заничимым и вншительным, то с меня pdf Smile Надеюсь эта инофрмация будет полезна для старта и поможет людям сделать свои переводы, а там глядишь с миру по нитке.

Очень прошу поактивнее прокомментить данный пост — искренне верю, что он многим поможет. Ну что за работу?

Что надо знать, прочитать и скачать

Почитать:

• "Русская команда перевода Drupal (RDTT)" (http://drupal.ru/translators) (она уже возможно не та!) (зам. vadbars)
• "Англо-русский словарь терминов" Drupal (http://drupal.ru/node/3611) (зам. vadbars)
• "Словарь терминов (старая версия)" (http://drupal.ru/glossary)
• "Регламенты по переводу интерфейса и документации" (http://drupal.ru/translation_rules)
• "Как поставить перевод?" (http://drupal.ru/node/2016)
• "Формы множественного числа" (http://drupal.ru/node/2618)
• "Перевод аннотаций к модулям..." (http://drupal.ru/node/128)
• "UTF-8" (http://drupal.ru/node/163)
http://wiki.drupallers.ru - много информации в том числе и по модулям (зам. vadbars)
http://drupal.htdogs.ru/art/modules (зам. vadbars)
• Сюда не плохо заглянуть: http://www.drupal5.ru
• "Translator's guide" (http://drupal.org/node/11130)
• Если вы считаете, что есть еще что-то из разряда musthave — высылайте

Скачать:

• poEdit, доступен для Linux, MacOSX, и Windows (http://www.poedit.net)
• OmegaT, написан на Java и доступен для большого количества платформ (http://www.omegat.org/omegat/omegat.html)
• LocFactory Editor для MacOS X (http://www.triplespin.com/en/products/locfactoryeditor.html)
• Полный список тут: http://drupal.org/node/11131 ...

Уже готовое:

• Полный русский перевод Drupal 5.0 (http://drupal.ru/node/3610)
• Переводы модулей для Drupal 5.0 (http://drupal.ru/node/3634)
• Ссылки на переводы и документацию (на Русском) (http://drupal.ru/node/3983)
• Можно тоже найти что-либо... (http://drupal.ru/search/node)

• Некоторые ссылки пересекаются

Процесс перевода

Файлы с расширением *.pot — это шаблоны (template) для переводов, которые, когда заполняются переводом, становятся файлами *.po. Есть два пути получить файлы шаблонов *.pot: можно воспользоваться уже сгенерированнымии pot-файлами (они иногда приходят сместе с самим модулем), а можно самостоятельно сгенерировать их с помощью скрипта extractor.php. Либо — либо. (доб. vadbars)

Алгоритм если с модулем потавляются файлы *.po или *.pot (poEdit)

В процессе...

Алгоритм если или *.pot надо делать самостоятельно (poEdit + extractor.php)

В процессе...

Использование extractor.php

Сначала читаем тут:
• "Как переводить на русский модули, в которых нет po-файлов?" (http://drupal.ru/node/1420)
• "extractor.php" (http://drupal.ru/node/2006)

Качаем тут (файлы отличаются):
http://drupal.org/files/projects/drupal-pot-4.6.0.tar.gz
(речь идет о версии 4.6, которая уже не поддерживается зам. vadbars)
http://cvs.drupal.org/viewcvs/drupal/contributions/translations/drupal-pot/

Пользуемся:
• Копируем в каталог с модулем
• Много проблем можно предупредить проставлением chmod 777 на директорию с модулем. Обязательно нужно, если не на виндоусовской локалке: Linux, *BSD и т.д., так как сервер, а следовательно и php рабатают с правами nobody (доб. Natalie).
• Пользуемся либо через браузер, вводим стороку вида: http://localhost/modules/modulename/extractor.php
• Либо через коммандную, вводим строку вида: x:\usr\php5\php.exe extractor.php [--auto]
• Можно рядом extractor.php создать extractor.bat, чтобы не вдивать коменду каждый раз...
• Путь x:\usr\php5\php.exe надо изменить на ваш фактический!

MiniFAQ:

Q: Иногда extractor.php выдаёт следующую хрень: Invalid marker content in pathauto_node.inc:63* t('Pattern for all '.$nodetype->name.' paths') Invalid marker content in pathauto_node.inc:321* t($pagetitle) Что это и что с этим делать: забить, бояться, исправить (как?) и т.д.?
A: Это сообщение о том, что extractor не может работать со строками, которые динамически формируются уже при работе сайта (внутри функции t() стоит вызов переменной или другой функции). Можно игнорировать.

Q: Иногда extractor.php от модуля к модулю выдаёт разное количество файлов, например для pathauto:
general.pot
pathauto-module.pot
pathauto_node-inc.pot
pathauto_node_event-inc.pot
pathauto_taxonomy-inc.pot
pathauto_user-inc.pot
Шесть файлов! Если ли практика их сращивания, исключения, выбора и назначение каждого из них? И все ли их надо переводить?
A: Файлов шаблонов обычно на один больше, чем число файлов в вашем модуле. "Дополнительный" шаблон general.pot содержит строки, которые встречаются в нескольких файлах (кажется, если больше, чем 10 раз).

Q: poEdit имеет свой собственный парсер для php, кто-нибудь заставил его работать? Smile
A: Парсер для Php работает в poedit по умолчанию

Q: При использовании extractor.php через браузер инодга выдаёт:
#!/usr/local/bin/php Usage: extractor.php file1 [file2 [...]]
Что это понятно, но почему иногда работает иногда нет? Какова закономерность?
A: Когда это происходит? Надо четко понять, при каких условиях, чтобы можно было воспроизвести ситуацию.

Q: Как удалить перевод конкретного модуля?
A:

Q: Где фактически живут переводы модулей?
A: "Фактически живут" в базе данных вашего сайта.

Благодарности:

vadbars, Natalie

Комментарии

Аватар пользователя vadbars@drupal.org vadbars@drupal.org 23 февраля 2007 в 17:09

* Раздел "Что надо знать, прочитать и скачать"
Кое-что уже устарело (в частности, команда переводчиков изменилась существенно).
Можно добавить:
- англо-русский словарик терминов Drupal - http://drupal.ru/node/3611
- темы про перевод есть на drupal.htdogs.ru и wiki.drupallers.ru

* Скачать:
Нужно указать, что Poedit для Windows, а OmegaT - для *nix-систем.

*Качаем тут (файлы отличаются чем-то):
* • http://drupal.org/files/projects/drupal-pot-4.6.0.tar.gz
Почему речь идет о версии 4.6, которая уже не поддерживается? На дворе - Drupal 5.1 Smile
Файлы с расширением pot - это шаблоны (template) для переводов, которые, когда заполняются переводом, становятся po-файлами.
Надо бы четко указать, что есть два пути получитьфайлы шаблонов .pot - можно воспользоваться уже сгенерированнымии pot-файлами, а можно самому сгенерировать их с помощью скрипта extractor.php. Либо - либо.

* Открытые вопросы:
1. Это сообщение о том, что extractor не может работать со строками, которые динамически формируются уже при работе сайта (внутри функции t() стоит вызов переменной или другой функции). Можно игнорировать.
2. Файлов шаблонов обычно на олин больше, чем число файлов в вашем модуле. "Дополнительный" шаблон general.pot содержит строки, которые встречаются в _нескольких_ файлах (кажется, если больше, чем 10 раз).
3. Парсер для Php работает в poedit по умолчанию.
4. Когда это происходит? Надо четко понять, при каких условиях, чтобы можно было воспроизвести ситуацию.
5. "Фактически живут" в базе данных вашего сайта.


Я ставлю строчку "php_value error_reporting 7" в файл .htaccess, а вы? Smile Полный русский перевод Drupal 5.x и еще некоторых модулей.

Аватар пользователя Natalie Natalie 23 февраля 2007 в 23:26

А мне extractor.php вот что выдает (через браузер)

Starting. Processing imagefield.module... Invalid marker content in imagefield.module:413 * t($field['widget']['label']) Processing imagefield.install... Processing imagefield.info...
Warning: fopen(imagefield-module.pot) [function.fopen]: failed to open stream: Permission denied in /home/belliastri/public_html/sites/all/modules/imagefield/extractor.php on line 218

Warning: fwrite(): supplied argument is not a valid stream resource in /home/belliastri/public_html/sites/all/modules/imagefield/extractor.php on line 219

Warning: fclose(): supplied argument is not a valid stream resource in /home/belliastri/public_html/sites/all/modules/imagefield/extractor.php on line 220
Done.
---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.

Аватар пользователя Natalie Natalie 23 февраля 2007 в 23:39

Проблема решилась проставлением CHMOD 777 на директорию с модулем (нужно, если не на виндоусовской локалке). Предлагаю добавить это в ФАК.
---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.

Аватар пользователя Natalie Natalie 23 февраля 2007 в 23:43

Да, он таки не создал .pot в том модуле, где было сообщение
Invalid marker content in imagefield.module:413
* t($field['widget']['label'])
---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.

Аватар пользователя sashka sashka 24 февраля 2007 в 1:01

2vadbars, спасибо большое, принял и обновил, и добавил в благодарности Smile информация полезная для на-чи-на-ю-ще-го
2Natalie, а Вам Smile не сложно:
1. Выложить файл extractor.php (для сравнения), указав его версию.
2. сказать какая версия модуля imagefield и выложить его, если онный отличается от той, что на www.drupal.org.
Я просто в очередной раз постараюсь попробовать ковырнуть его с целью понять из-за чего скрипт extractor работает, а из-за чего нет.... Билн юникс-тачки не хватает как рук, хоть через вмваре ставь Biggrin
Инфу о CHMOD 777 добавил, но не в faq Smile Спасибо!

Аватар пользователя Natalie Natalie 24 февраля 2007 в 1:30

Вопрос: а если extractor.php сгенерировал general.pot, что с ним делать? Добавить к modulename.pot?
---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.

Аватар пользователя sashka sashka 24 февраля 2007 в 2:04

Тееек... Ясна. Всё ясно. Вопрос с большим количеством файлов я рассмотрю позже (26-28) полсе того как закончив TAGADELIC, перейду к PATHAUTO. Там как раз генериреутся куза файлов и general.pot.

Аватар пользователя vadbars@drupal.org vadbars@drupal.org 24 февраля 2007 в 8:54

Еще раз про general.pot: "дополнительный" шаблон general.pot содержит строки, которые встречаются в _нескольких_ файлах больше, чем 10 раз. Поэтому, конечно, его надо приобщить к другим файлам шаблонов перевода.

Extractor.php вытаскивает строки из функций t(), t(,array()), format_plural() и некоторых других (это можно прочитать в самом extractor.php). Сообщение "Invalid marker content" появляется, когда он не может это сделать (стоит неопределенная на даный момент переменная или вызов функции).


Я ставлю строчку "php_value error_reporting 7" в файл .htaccess, а вы? Smile Полный русский перевод Drupal 5.x и еще некоторых модулей.

Аватар пользователя vadbars@drupal.org vadbars@drupal.org 24 февраля 2007 в 10:12

Да, кстати, еще несколько хитростей, связанные с extractor.php:
1) в самом extractor.php есть строки (сейчас это 639-655), предназначенные для самотестирования (вызов с параметром --debug). Эти строки - вызовы функций t() и format_plural() в разных вариантах.
Самотестирование это неплохо, но в результате, если extractor.php расположен и запускается из каталога с файлами модуля, то extractor вставляет эти свои тестовые строки в pot-файлы модуля. Что, конечно, не есть хорошо. Я закомментировал этот фрагмент в тексте extractor.php.
2) в extractor.php есть функция write_header($file), где описывается "шапка" pot-файлов (автор, дата изменения, формула множественного числа и т.п.). Чтобы получать pot-файлы с уже заполненной "шапкой", можно заранее отредактировать эту функцию.
Но правильнее просто добавить функцию write_header_custom($file), которая перекрывает стандартную write_header($file).
3) если запустить extractor.php с параметром --files, то можно указать файлы, из которых надо извлекать строки.
4) параметр --infofold=general помещает строки из всех файлов .info в один файл general.pot. Это удобно, когда вы делаете pot-файлы для нескольких модулей (например, дистрибутив Drupal).
А параметр --infofold=module размещает строки из файлов .info в pot-файл каждого модуля (по умолчанию). Это нужно, если вы делаете перевод отдельного модуля.


Я ставлю строчку "php_value error_reporting 7" в файл .htaccess, а вы? Smile Полный русский перевод Drupal 5.x и еще некоторых модулей.

Аватар пользователя PVasili PVasili 1 марта 2007 в 17:45

А как параметр -infofold=general передать не в командной строке а в адресной броузера?
------------------------------------
Дайте WiKi людям

Аватар пользователя PVasili PVasili 1 марта 2007 в 17:44

В>При использовании extractor.php через браузер инодга выдаёт:
А> Проблема со старой версией скрипта (обновить версию) [url=http://cvs.drupal.org/viewcvs/drupal/contributions/translations/drupal-pot] последняя тут [/url]

------------------------------------
Дайте WiKi людям

Аватар пользователя vadbars@drupal.org vadbars@drupal.org 1 марта 2007 в 18:34

Как я понял, "последних" там 2 версии: на ветке MAIN и на ветке DRUPAL-5. Какая глючит и в чем?


Я ставлю строчку "php_value error_reporting 7" в файл .htaccess, а вы? Smile Полный русский перевод Drupal 5.x и еще некоторых модулей.

Аватар пользователя Natalie Natalie 1 марта 2007 в 19:11

Я не знаю, как он версию. Взят с вышеуказанной ссылки. Выдает перечисленные ошибки.
---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.

Аватар пользователя vadbars@drupal.org vadbars@drupal.org 2 марта 2007 в 13:52

Можно прикрепить его к сообщению в вашем блоге или, например, к комментарию в моей ветке про переводы модулей (http://drupal.ru/node/3634).
Пока вроде бы только так. Axel обещает позже наладить отправку переводов в репозитарий (здесь и на drupal.org).


Я ставлю строчку "php_value error_reporting 7" в файл .htaccess, а вы? Smile Полный русский перевод Drupal 5.x и еще некоторых модулей.

Аватар пользователя sergiyko911 sergiyko911 2 июля 2007 в 2:33

у меня такой вопрос. при запуске модуля выдает ошибку
#!/usr/local/bin/php
Warning: array_shift() [function.array-shift]: The argument should be an array in D:\xampp\htdocs\dru\modules\imce_gallery\extractor.php on line 23
Usage: extractor.php file1 [file2 [...]]

платформа winXp/drupal 5.1
я че-то там читал про то, что нада только на **NIX или ***BSD системах. а на виндовс что? никак?
или мож я чето недопонял?
расскажите пожалуста
помогите начинающему осваивать великий и могучий друпал решить проблему

Аватар пользователя Usmik Usmik 4 ноября 2009 в 2:42

В FAQ нет ответа на вопрос:
Как удалить перевод конкретного модуля? К примеру хочу, чтобы вьюс был на родном английском...

Аватар пользователя asimor asimor 7 февраля 2010 в 1:47

Скажите, методы, приведенный выше, для перевода модуля для Drupal версии 6 годятся? Или все-же чем-то отличаются?

Аватар пользователя Master of Tragedy Master of Tragedy 7 февраля 2010 в 1:56

"asimor" wrote:
Скажите, методы, приведенный выше, для перевода модуля для Drupal версии 6 годятся? Или все-же чем-то отличаются?

Все тоже самое, но теперь переводы для Друпал берутся с сервера перевода http://drupaler.ru Там же можно и перевести любой модуль. Это более простой метод.

Аватар пользователя Serega_od Serega_od 12 июля 2010 в 18:09

Добрый день!
Подскажите пожалуйста что я делаю не так?
Создаю свой модуль. С помощью модуля potx создаю файл .pot, который потом сохраняю как ru.po с указанием что это русский перевод:

# $Id$
#
# Russian translation of Drupal (general)
# Copyright YEAR NAME <EMAIL@ADDRESS>
# Generated from files:
#  OnlineCalc.module: n/a
#  OnlineCalc.info: n/a
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: OnlineCalc (6.x-1.dev)\n"
"POT-Creation-Date: 2010-07-12 12:01+0300\n"
"PO-Revision-Date: 2010-07-12 12:20+0300\n"
"Last-Translator: City\n"
"Language-Team: Russian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=((((n%10)==1)&&((n%100)!=11))?(0):(((((n%10)>=2)&&((n%10)<=4))&&(((n%100)<10)||((n%100)>=20)))?(1):2));\n"

Заполняю перевод.
Затем провожу инсталяцию модуля, бежит бар с инсталяцией переводов, но модуль по-прежнему отображается на инглише. Хотя основной язык указан русский в админке.
В чём может быть проблема?
P.S. нигде не нашел, почему эта строка выглядет именно так? что за жуткая форма? скопипастил её из других русских переводов:

"Plural-Forms: nplurals=3; plural=((((n%10)==1)&&((n%100)!=11))?(0):(((((n%10)>=2)&&((n%10)<=4))&&(((n%100)<10)||((n%100)>=20)))?(1):2));\n"

Заранее спасибо!

Аватар пользователя Serega_od Serega_od 12 июля 2010 в 22:02

"Master of Tragedy" wrote:
А в t() завернуть не забыл?

Та не, мне б тогда модуль potx не сформировал бы файл .pot
Уже разобрался, дело в кеше фаерфокса было.