должен ли перевод (i18n) начинаться с английского PO?


Мне было интересно: похоже, перевод должен быть переводом с английского. Я имею в виду, что начальный файл на английском языке, затем вы делаете переводы с него.

Но что, если сказать, что я итальянец? Значит, базовый язык - итальянский, а остальные - переводы с итальянского? Потому что дело вот в чем: я хотел бы иметь оригинальный PO-файл на итальянском языке и начинать оттуда.

Как это можно сделать?

Author: Luca Reghellin, 2014-03-17

2 answers

В основном все темы там написаны на английском языке, и строки локализации будут выглядеть примерно так _e( 'Some English text', 'domainname' );. Обычно авторы включают шаблон pot с темой. Я цитирую из кодекса

"Файлы POT (Шаблон переносимого объекта) Первым шагом в процессе локализации является то, что программа используется для поиска в исходном коде WordPress и выбирает каждое сообщение, переданное в функцию __() или e(). Этот список Сообщения на английском языке помещаются в файл шаблона специального формата (POT-файл), который составляет основу всех переводов. Как правило, вы можете скачать файл POT для WordPress, поэтому вам не нужно создавать свой собственный. Отдельные файлы POT также могут быть созданы для тем и плагинов, если разработчик темы/плагина вложил весь текст в функции _() или _e()"

.

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

Тем не менее, вы можете создать свою собственную тему и вместо использования английского языка использовать итальянский в строках локализации, подобных этой _e( 'Some Italian text', 'domainname' ). Таким образом, вашим языком по умолчанию будет итальянский без языка, установленного в wp-config.php. Ваш шаблон pot, который вы собираетесь создать, теперь будет содержать итальянский текст вместо английского, так как ваша тема написана на итальянском языке. Затем пользователь может перевести с итальянского на свой собственный язык, создав po и mo шаблон с соответствующим названием языка и текстами внутри.

Хорошо, теперь обсуждение, как указано в кодексе, pot шаблоны содержат английский язык, и я снова цитирую из кодекса

"Этот список сообщений на английском языке помещен в файл шаблона специального формата (файл POT)".

Я говорю на африкаанс, но ради соблюдения стандартов мира и языка wordpress я пишу все на английском, создаю свой файл pot и из что я создаю свои шаблоны po и mo для языка африкаанс.

Лично я считаю, что нужно придерживаться стандартов. Каждый должен уважать или не уважать эти стандарты. Я имею в виду, возьмем, к примеру, африкаанс: менее 1,5 миллиона человек во всем мире говорят на африкаансе, и кроме Бельгии и голландии, которые могли бы в какой-то степени понимать африкаанс, никто больше не понимает язык или грамматику. Так что в принципе, если вы пишете тему на африкаанс, всего несколько человек сможет им пользоваться, так как никто не сможет перевести его на свой иностранный язык.

Это проблема, если вы думаете о продаже своей темы. Хорошо, это может сработать, если вы продадите свою тему людям, которые будут использовать тот же язык, но ваш рынок будет настолько мал, что это не будет иметь смысла.

Но, как я уже сказал, вам решать, соблюдать стандарт или нет. Я надеюсь, что это поможет

 4
Author: Pieter Goosen, 2014-03-17 16:33:01

Хорошо, я просто добавляю ответ на свой собственный вопрос, чтобы прояснить всю историю и решения. Это также служит для решения других проблем, связанных с lang.

Итак, что у меня есть:

  • Собственная многоузловая установка
  • Каждый сайт представляет другой язык
  • У каждого сайта есть своя тема, дочерняя для основного языка
  • Основной язык - итальянский (it_IT)
  • это просто производственная пользовательская тема, поэтому ее не нужно распространять

Скажем, у нас есть родительская тема называется "родительская тема", а дочерняя тема называется "дочерняя тема".

Шаги:

В РОДИТЕЛЬСКОЙ ТЕМЕ

  • в style.css добавьте эту строку> Текстовый домен: родительская тема
  • В functions.php , в фильтре 'after_setup_theme' добавить:

    Load_theme_textdomain('родительская тема', ПУТЬ к ШАБЛОНУ.'/языки' );

  • В папке темы добавьте папку языков

  • В этом фолтере добавить locale.mo файлы. Я имею в виду, например, en_US.mo, fr_FR.mo, и т.д...

Файлы .mo будут использоваться функциями перевода wordpress (__(), _e()) и т. Д.

Файлы .mo представляют собой двоичные файлы, которые будут созданы из файлов .po (по сути, тех же, что и .pot) с использованием некоторого программного обеспечения, такого как poedit или другие (просто google).

Файлы .po будут содержать такой контент (образец формы en_US.po):

#: front-page.php
msgid "prodotti"
msgstr "products"

#: front-page.php
msgid "EVENTI"
msgstr "EVENTS"

#[etc....]

Где # - комментарии, msgid - это строка оригинала (основного языка) (в данном случае строка на итальянском языке) и msgstr - это перевод. ПРИМЕЧАНИЕ: чувствителен к регистру.

Файлы po в теме/языках предназначены для того, чтобы содержать только определения перевода, необходимые для ваших собственных нужд в вашей теме (поэтому их может быть очень мало), не более того.

Затем вы просто в своей теме (и дочерних темах) можете использовать функции перевода (см. Кодекс wordpress), такие как __(), _e() и так далее...

Итак, Я сделал ничего в дочерних темах, вся работа ведется по основной теме. Если вам нужен конкретный контекст, просто зарегистрируйте домен textdomain для дочерней темы (см. http://codex.wordpress.org/Function_Reference/load_child_theme_textdomain ), добавьте папку языков в дочернюю тему и добавьте файлы po/mo.

ПРИМЕЧАНИЕ: Имейте в виду, что функции перевода используют get_locale(), чтобы выбрать правильную форму файла .mo для перевода. get_locale() проверяет наличие Константа WPLANG (в конечном итоге установлена в wp-config.php ) или другие настройки от администратора, ИЛИ он использует то, что поступает из фильтра "локаль". Для моих нужд я даже не устанавливаю WPLANG.

Наконец, может потребоваться иметь разные языки в интерфейсе, но один и тот же язык для администратора для всех сайтов в мультисайте. Если это так, вы устанавливаете свой язык администратора только из общих настроек в admin. Затем в каждой теме functions.php :

add_filter('locale', 'set_admin_locale');
function set_admin_locale() {
  return 'en_US';//or whichever language/locale you want in frontend
}

Надеюсь, что это поможет людям найти свой путь во всей этой неразберихе. Это не так сложно, но вам нужно навести некоторый порядок, и именно поэтому я только что написал этот длинный ответ.

 1
Author: Luca Reghellin, 2014-04-18 16:09:47