Многоязычная поддержка с использованием gettext и codeigniter, лучшая практика?

Я знаю, как создавать файлы .po и как создавать файлы .mo, а затем использовать их для перевода на моем сайте с поддержкой Codeigniter. Однако я не совсем уверен, как изменить язык в графическом интерфейсе сайта. Я хочу придерживаться схемы вызова url-адреса по умолчанию codeigniter: www.domain.com/controllername/method/param1/param2.

Вызвать сервер таким образом не составит труда: www.domain.com/controllername?lang=en

Выполнение этого для каждого контроллера, использующего схему URL-адреса по умолчанию, требует, чтобы я реализовал один и тот же метод в каждом контроллере, просто чтобы передать параметр lang в функцию setlocale (), а затем привязать к моему доменному имени .po. Чувствует себя неловко ...

Есть идеи, как вы, ребята, работаете с gettext в codeigniter? И да, я хочу работать с gettext.


person tobefound    schedule 26.03.2010    source источник


Ответы (2)


Я просто делаю библиотеку, которая может автоматически переводить весь текст между {t} и {/ t} в представлении, я разместил здесь на случай, если кто-то захочет использовать его вместо вызова функции gettext в представлении:

http://www.chuongduong.net/page/15/codeigniter-gettext-with-smarty-or-parser-template-without-php-code-in-view.html

Код просмотра может быть:

<html>
<head>
<title>{blog_title}</title>
</head>
<body>

<h3>{blog_heading}</h3>
{blog_entries}

<h5>{t}Title is{/t}  {title}</h5>

<p>{t 1="<b>" 2="</b>"}Click here %1to see%2 me{/t}{body}</p>

<p>{t 1="{id}" 2="author"}The id is: %1 wrote by %2{/t}</p>

<p>{t 1="<a href=\"link here\">" 2="</a>"}Please lick on me%2{/t}</p>

{/blog_entries}

</body>

</html>
person user1442894    schedule 22.07.2012

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

Язык обнаруживается с помощью следующей проверки в резервном режиме

  1. он был установлен с помощью параметра GET (например,? lang = en)?
  2. это было установлено в куки?
  3. какой язык предлагается браузером?
  4. использовать настроенный язык по умолчанию

Однако, если язык не поддерживается, используйте значение по умолчанию. Установите или обновите файл cookie с новыми данными.

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

person Riccardo Galli    schedule 10.06.2010
comment
Что вы имеете в виду под подключением обнаружения к post_controller_constructor? - person DanMan; 22.07.2012
comment
Я имел в виду, что добавляю обратный вызов к хуку post_controller_constructor. См. codeigniter.com/user_guide/general/hooks.html. Вам нужно, чтобы ваш код запускался после того, как класс контроллера был создан, но до того, как будет вызван ваш конкретный метод контроллера. - person Riccardo Galli; 23.07.2012