Краткий мануал по переводу модов.

Автор Avdenago, 19 ноября 2006, 01:10:12

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Avdenago

Краткий мануал по переводу модов

Введение
Итак. Модификаций на СМФ - немеряно, но каждый русскоязычный пользователь рано или поздно сталкивается с проблемой, которая заключается в том, что большинство модов не работают с русским языком.
Данная проблема решается несколькими путями.
Если человек более менее знает английский и хоть капельку php - то он лезет в нужные языковые файлы и "руками" добавляет туда нужные строки... 
Однако таких людей не так уж и много, при этом у данного метода есть один, но существенный, недостаток - внесенные изменения пропадут при перестановке форума, перезаписи соответствующего файла и т.д.
Люди же которые не учили английский в школе, либо учили плохо, начинают искать в интернете, но не сильно много там найдешь... 

Поэтому для того, чтобы направить данный вид деятельности в более менее определенное русло я решил написать/накинуть этот небольшой мануал.
Своей основной идеей я хочу сделать, то, что если каждый будет ПРАВИЛЬНО переводить моды и выкладывать их для общего пользования база переведенных модов расширится. Силами одного человека данный процес займет долгое время - силами же нескольких намного меньше.
Итак. К делу!

ЧАСТЬ I - Перевод.

1.1 Имею ли я право вносить изменения в код?
В большинсте случаев - да. Единственное вы не можете удалять копирайт автора. Это будет противоречить лицензии. Внести же изменения в код (что собственно мы и будем делать) можно.

1.2 Перевод мода. Вариант 1 - Базовый случай
Берем мод. Сохраняем его у себя. Для удобства распаковываем его в отдельную папку.
Теперь анлизируем наличествующие файлы. В зависимости от сложности может быть несколько вариантов.
Если мод самый что ни на есть обыкновенный, мы увидим слудющие файлы:
- modification.xml
- package-info.xml

В первом файле, собственно и лежит вся наша модификация.  Вот часть такого файла:
<file name="$sourcedir/ManagePermissions.php">
    <operation>
      <search position="before"><![CDATA[ // Standard - ie. members.  They can do anything Restrictive can.
$groupLevels['global']['standard'] = array_merge($groupLevels['global']['restrict'], array(
]]></search>
      <add><![CDATA[    'poll_view_voters', // [Who Voted What?]
]]></add>
    </operation>

Пусть вас не пугает обилие символов. Суть данного куска: первой строкой выбирается файл, в который будет вносится изменение. Вторым пунктом ищется место КУДА будет добавлятся новый код. и Третьим пунктом идет добавление нового кода. Надеюсь все очевидно.
Во втором файле лежит описание данного мода. Кроме копирайта, имени автора и версии он содержит еще неприметную, но порой очень нужную, информацию о самой установке, где указанно что собственно делать при установке - звучит сложновато, но на самом деле просто указывается, что нужно обработать например файл 'modification.xml'.

Для чего я все это пишу? чтобы вы потом не наступали на грабли и не изобретали заново колесо.

1.2.1 Указания ЧТО и ГДЕ переводить
Итак мы подошли к самому переводу. Открываем 'modification.xml' в вашем любимом редакторе и ищем строки, которые указывают на редактирование языковых файлов, имеющих структуру ***.english.php или ***.russian.php. В этих файлах находятся строки отвечающие за текст. В СМФ за отображение текста отвечает массив txt[], строки с текстом выглядят так:
$txt['poll_view_voters_expand_to_view'] = 'Expand to view:';
А весь блок например так:
<file name="$languagedir/Modifications.english.php">
    <operation>
      <search position="end" />
      <add><![CDATA[// [Who Voted What?]
$txt['poll_view_voters_expand_to_view'] = 'Expand to view:';
(...)
$txt['poll_view_voters_expanded_help1'] = 'Select a name to view';
]]></add>
    </operation>
  </file>


Теперь берем выделяем весь этот блок, копируем и вставляем после данного блока, либо в конец файла. Изменяем строчку
<file name="$languagedir/Modifications.english.php"
на
<file name="$languagedir/Modifications.russian.php"
Или по аналогии для всех других файлов. И переводим сами строчки
$txt['poll_view_voters_expanded_help1'] = 'Например тут перевод';

Если блоков несколько, например отдельно на Модификацию, плюс на Ошибки - то переводим все.

После того как перевели - сохраняем файл и ложим обратно в архив модификации.

Теперь небольшое и легкое дополнение. Кроме самого перевода - можно оставить свои данные, написав в тексте описания мода в 'package-info.xml' что то похожее на: На русский перевел Avdenago (е-мейл). Также можно в версию добавить - RE - что будет значит Russian Edition(Русская редакция).

1.3 Перевод мода. Вариант 2 - Перевод модов под разные версии
Нет. Мы с вами разобрали только самый простой случай. К счастью в нем заключены основные пункты, поэтому все остальное - то же самое только с некоторыми нюансами.
Как мы сказали выше просто случай - это два файла. Есть еще второй вариант. Иногда разные версии форума требуют замены разных строк - это что касается функциональной части, к счастью - языковые файлы не меняются.
Итак мы можем иметь в начальных условиях следующие файлы:
- HideTagMod1.0.x.mod
- HideTagMod1.1rc2.mod
- package-info.xml
- Update120to121.1rc2.mod

Первое на что обращаем внимание - файлы мода вместо расширения *.xml имеют *.mod. Разница скорее всего есть - но в нашем случае кроме немного другого синтаксиса операций ничего не изменяется. Например блок выглядит так:
<edit file>
$languagedir/ModSettings.russian.php
</edit file>
<search for>
?>
</search for>
<add before>
$txt['hide_Titel'] = 'Опции Hide Tag';
(...)
$txt['hide_minpostunhide'] = 'Минимальное количество сообщений для отображения скрытого текста';
</add before>

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

1.4 Перевод мода. Вариант 3 - С отдельным языковым файлом
Есть. Третий вид модификаций включает в себя большое количество файлов. вот примерный список:
- install.xml
- ManA.php
- ManA.english.php
- ManA.template.php
- package-info.xml
Список этот неполный. Главная идея тут - Языковой файл лежит отдельно.
Что касается перевода - открываем файл 'ManA.english.php'. Переводим все строки, которые нам нужны и сохраняем файл под именем 'ManA.russian.php'.
Но это не все. Самая ответственная часть - впереди.
Открываем 'package-info.xml' и ищем строки:
<install>
<readme type="file" parsebbc="true">readme.txt</readme>
<modification format="xml" type="file">install.xml</modification>
<require-file name="ManA.php" destination="$sourcedir" />
<require-file name="ManA.template.php" destination="$themedir" />
<require-file name="ManA.english.php" destination="$languagedir" />
(...)
<code>install.php</code>
</install>

Эти строки отвечают за то, чтобы при установке мода нужные файлы скопировались в нужные директории.
После строки
<require-file name="ManA.english.php" destination="$languagedir" />
Вставляем
<require-file name="ManA.russian.php" destination="$languagedir" />
Этим мы позаботились, чтобы русский языковой файл тоже обрел свое место.
Проделываем все остальные необходимые действия и обновляем архив.
Вот вроде бы и все. Но вданном случае был рассмотрен простой пример, в жизни же бывает иногда и сложнее, поэтому такой вариант я и сделал третьим и самым сложным, потому что, как показывает практика, с такими модами больше всего возни.



Теперь, когда сущность самого перевода нам ясна поговорим о возможных проблемах.

ЧАСТЬ II

2.1 Появление ошибки при изменении языкового файла при установке
Если появляется ошибка и в других файлах - дело не в нашем переводе, а в целом мод конфликтует с чем-либо на вашем форуме. Если же не может изменить русский языковой файл, то скорее сего вы допустили одну неточность.
А именно вот в этой части:
<search for>
$txt['merge_check'] = 'Merge?';
$txt['merge_no_poll'] = 'No poll';
</search for>

Дело в том, что переводить содержание <search for></search for> не нужно, а необходимо изменить его в соответствии с теми строками, которые по идее он ищет. То еть в нашем примере нам необходимо открыть сам файл 'index.russian.php' и найти там строки соответствующие данным значениям. И заменить данные в <search for></search for> именно на СУЩЕСТВУЮЩИЕ данные из 'index.russian.php'.

2.2 Как заставить мод работать с UTF8
Для этого необходимо сделать следующие манипуляции:
Изменить имена изменяемых языковых файлов с *.russian.php на *.russian-utf8.php
и при этом сам файл modification.xml (или .mod) сохранить в кодировке UTF8.
При этом необходимо создать другой архив - и укзать в имени архива, что данная модификация для форумов с UTF8.

При этом я не говорю что один единственный способ, теоретически я догадываюсь, что есть способ пограмотней, но пока я его не нашел.

2.3 Название архивов модификаций.
После перевода самое время поговрить о том, как назвать свео творение.
Принята следющая рекомендация:
Название_ Версия_RE
и для UTF8 соответственно:
Название_ Версия_RE _UTF8

2.4 Размещение переведенных модификаций.
Переведенные модификации вы можете разместить для общего пользования на http://www.simplemachines.ru/
Для зарегестрированных пользователей доступна загрузка файлов на сервер.



Если данный мануал помог вам и ответил на ваши вопросы, или наоборот у вас появились вопросы, а также если вы нашли неточности или ошибки, вы можете обсудить его в данной теме.

Надеюсь, что данный текст вам понравился, даже несмотря на свою "краткость"...
С уважением Avdenago.
(Данный материал написан лично мной для www.simplemachines.ru , поэтому всякая перепечатка(использование материала на других ресурсах) без уведомления автора - запрещена.)

kanzaki

Спасибо за мануал =)
Хотя я учусь в универе на переводчика, у меня возникают трудности перевода специализированных фраз.
Как перевести 'Expand to view' в контексте форума?
"Расширить к виду"?
Было бы неплохо сделать мануал по переводу строк =)

BIOHAZARD

Цитата: kanzaki от 05 октября 2009, 08:55:03
Спасибо за мануал =)
Как перевести 'Expand to view' в контексте форума?
Развернуть блок??
Мои моды:
  • RedirectPage
  • Counters
  • CustomSearch
  • SypexDumper
   адаптирую темы    1.1.хx<=>2.0задавая вопросы, старайтесь сразу указывать конечную цель, предполагаемый Вами путь не обязательно окажется самым коротким

Любые моды на заказ