Как преобразовать массив локализации/перевода Zend в gettext?

Мой многоязычный сайт уже успешно использует метод «массива» переводов Zend.

Я хочу перейти от этого метода к методу «gettext», потому что я читал, что gettext лучше.

Я пытался использовать http://docs.translatehouse.org/projects/translate-toolkit/en/latest/commands/php2po.html, но не может заставить его работать.

Я думаю, что это не предназначено для обработки массивов Zend в качестве входных данных.

Мой файл Zend (который работает) выглядит так:

<?php

return array(    
    'choose your favorite stores' => 'Choose your %1$sfavorite stores%2$s',
    'P.S. If you ever have question' => 'P.S. If you ever have questions, %1$semail us%2$s any time.',
    'You can also find quick answer' => 'You can also find quick answers on our %1$sHelp page%2$s.',
    'Earn X cash' => '%1$sEarn 1-30%% cash back%2$s, get money-saving coupons, and find the best price on every purchase at %3$s2,500+ stores%4$s.'
);

(Но это намного длиннее, и у меня есть несколько языков, каждый в своем собственном файле PHP.)


person Ryan    schedule 17.12.2012    source источник
comment
И меня тоже беспокоят упорядоченные переменные, особенно после прочтения stackoverflow.com/questions/1888487. Потому что мне нужно уметь делать следующее. Обратите внимание, как отличается порядок переменных в английском и китайском языках: 'Earn X cash' => '%1$sEarn 1-30%% cash back%2$s, get money-saving coupons, and find the best price on every purchase at %3$s2,500+ stores%4$s.' и 'Earn X cash' => '您可从%3$s2500个商家%4$s中,找到省钱的优惠券,轻松比价,更可获取%1$s1-30%%的返利%2$s。'.   -  person Ryan    schedule 18.12.2012


Ответы (1)


С фрагментом, который вы дали, преобразование работает для меня.

$ php2po en.php en.po -t en.php 
processing 1 files...
[###########################################] 100%

$ cat en.po 
#. extracted from en.php, en.php
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-12-19 10:08+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <[email protected]>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Translate Toolkit 1.9.1-pre\n"

#: return+array%28-%3E%27choose+your+favorite+stores%27
msgid "Choose your %1$sfavorite stores%2$s"
msgstr "Choose your %1$sfavorite stores%2$s"

#: return+array%28-%3E%27P.S.+If+you+ever+have+question%27
msgid "P.S. If you ever have questions, %1$semail us%2$s any time."
msgstr "P.S. If you ever have questions, %1$semail us%2$s any time."

#: return+array%28-%3E%27You+can+also+find+quick+answer%27
msgid "You can also find quick answers on our %1$sHelp page%2$s."
msgstr "You can also find quick answers on our %1$sHelp page%2$s."

Я использую версию Translate Toolkit из git master, возможно, вам стоит попробовать это.

person julen    schedule 19.12.2012
comment
Спасибо, что указали мне на это, но, к сожалению, он пропускает 4-ю пару ключ/значение в массиве ("Заработать X наличных"). - person Ryan; 19.12.2012
comment
Кроме того, он не может использовать ключ массива в качестве msgid. - person Ryan; 20.12.2012
comment
Если вы добавите запятую в последний элемент массива, он тоже будет включен. Ключ массива не будет использоваться как msgid, зачем вам это? Вы переходите от одноязычного формата к двуязычному формату. Файлы PO всегда будут иметь исходный текст (в данном случае английский) в msgid; это то, что вы ожидаете от локализаторов. - person julen; 20.12.2012
comment
Есть много случаев, когда вы хотите, чтобы ключ (msgid) отличался от исходного текста (на английском языке). Например, в представлении HTML я мог бы указать ‹a href=[xxxx]›[yyyy]‹/a›, где назначение и метка этого тега привязки зависят от языкового стандарта пользователя. Например. это может быть ссылка на социальную сеть, в США это будет Facebook, а в Китае — Weibo. Таким образом, MsgIds могут быть чем-то вроде socialSiteUrl и socialSiteLabel. Я пытаюсь заставить poeditor.com работать. Это может быть мой подход в будущем. - person Ryan; 20.12.2012
comment
Я игнорирую, если среда Zend навязывает вам определенный формат ... но я не понимаю, почему вы хотите преобразовать это в PO, если вы не собираетесь использовать результат как двуязычный формат. - person julen; 20.12.2012