CakePHP i18n — перевод блоков длинного текста/строки

У меня вопрос относительно плагина i18n по умолчанию для CakePHP 2.5.

Я знаю, что есть возможность перевести короткие строки, просто поместив их между нотациями __('').

Я также знаю, что есть возможность перевести весь текст, связанный с моделью, добавив TranslateBehaviour в модель.

Проблема начинается, когда я хочу перевести более длинные части текста на многих разных страницах. Я мог бы создавать разные представления для разных языков, но это как бы противоречит шаблону MVC.

Допустим, у нас есть текст, который мы хотели бы перевести на другие языки:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut sagittis urna augue, a eleifend orci ultrices eget. У iaculis mi mauris eget luctus leo condimentum at. Pellentesque обитатель morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla tristique commodo tortor, non condimentum risus egestas sed. Proin ultricies elit vitae mauris pretium facilisis. Fusce aliquam orcised neque feugiat vestibulum. Etiam dapibus massa vel dui interdum malesuada. Nunc fringilla vulputate tristique. Sed ultrices suscipit Erat eget luctus. Quisque non massa ante. Fusce volutpat neque sed rhoncus sollicitudin. Cras porta vulputate neque non congue.

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


person OldNurse    schedule 16.07.2014    source источник


Ответы (1)


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

<p>
    <?php echo __('long-text'); ?>
</p>

И в вашем файле po вы делаете переводы:

//app/Locale/eng/LC_MESSAGES/default.po
msgid "long-text"
msgstr "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut sagittis urna augue, a eleifend orci ultrices eget. In iaculis mi mauris, eget luctus leo condimentum at. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla tristique commodo tortor, non condimentum risus egestas sed. Proin ultricies elit vitae mauris pretium facilisis. Fusce aliquam orci sed neque feugiat vestibulum. Etiam dapibus massa vel dui interdum malesuada. Nunc fringilla vulputate tristique. Sed ultrices suscipit erat eget luctus. Quisque non massa ante. Fusce volutpat neque sed rhoncus sollicitudin. Cras porta vulputate neque non congue."

Это выведет длинные строки, но ваши представления будут чистыми.

person vicocamacho    schedule 16.07.2014
comment
Я знаю, что __() не ограничивается только короткими строками. Я просто немного запутался, стоит ли использовать его для больших текстовых блоков (включая простые теги HTML). Это хорошо для производительности? - person OldNurse; 16.07.2014
comment
Я без проблем использовал его с длинными строками и простыми тегами HTML. Насчет точных показателей производительности я не уверен, но я не думаю, что это имеет большое значение, если переведенная строка длинная или короткая. - person vicocamacho; 16.07.2014