CakePHP (по крайней мере, 1,3 делает) предлагает функцию __d (). Используется как:
__d($domain, $message, $return)
Где вы можете использовать «домен», чтобы указать грамматическое значение слова, которое вы хотите перевести. Когда вы закончите писать код, вы запустите консольную задачу CakePHP i18n. Это создаст несколько файлов .pot в APP / locale / с именем .pot. Имя файла будет $ domain, поэтому вы получите файл .pot для каждого из грамматических значений (на самом деле, я не знаю подходящего слова для этого), которое вы определили.
Консольная задача CakePHP i18n ищет файлы вашего приложения для функции перевода и затем помещает строки для перевода в файл, по крайней мере, я думаю, что так оно и работает. Если контент, который вы хотите перевести, является динамическим (что в вашем случае), консольная задача не сможет найти ваши строки, а это значит, что вам придется создавать файлы .pot самостоятельно. Если all ваш контент, требующий перевода, является динамическим, вы можете создать один файл, который содержит функцию перевода один раз для каждого грамматического значения, а затем запустить консольную задачу, чтобы у вас были как минимум соответствующие файлы.
Сгенерированный файл .pot будет содержать следующие три строки один раз для строки, которая нуждается в переводе (если эта строка не используется несколько раз, в этом случае она будет иметь место один раз, будет повторяться только первая строка (немного другая) для каждый случай).
#: /app_controller.php:129
msgid "Home"
msgstr ""
Строка с хэштегом перед ней просто для справки (чтобы увидеть, где произошла строка), вам не нужно будет добавлять ее, если вы собираете файл самостоятельно. msgid - это слово / предложение, которое вы хотите перевести, а msgstr - предоставленный перевод.
Сборка файлов самостоятельно состоит из простого копирования этих трех строк снова и снова, изменения msgid и ввода чего-либо в качестве перевода. Я думаю, что самый простой способ создания этих файлов - это сначала создать один файл, а затем скопировать его содержимое (поскольку значение msgid будет одинаковым для всех этих файлов), а затем ввести соответствующие переводы.
После того, как вы закончите, переместите ваши файлы .pot в APP / locale // LC_MESSAGES / и измените их расширение на .po.
Этот метод, очевидно, работает только в том случае, если вы хотите перевести только фиксированное количество слов, потому что функции перевода зависят от того, как вы жестко закодировали переводы в файлах .po до того, как они понадобятся. Так что, если вы переводите пользовательский ввод, это, вероятно, не будет идеальным решением.
Источники: