Intereting Posts
Ошибка: вызов функции-члена get () для не-объекта Как получить последние измененные файлы в PHP? php – Неопределенная переменная: stmt in Вставка данных в таблицу (вставка mysqli) Показать 1k вместо 1000 mysqli_query () ожидает как минимум 2 параметра & mysqli_query (): пустые сообщения об ошибках запроса Общая ссылка, которая откроет мое приложение или магазин приложений. PHP + fork (): как запустить fork в PHP-коде Новая установка Symfony 3: не удалось открыть входной файл: приложение / консоль в установке композитора Обновление цены автоматически при изменении количества на странице продукта Magento Получение первых двух слов из строки в php Загружается ли файл Laravel Secure, если рассматривается только изображение получить значение из массива с помощью строки php Обмен сеансами между двумя приложениями CodeIgniter Контроллер Laravel 5, отправляющий целое число JSON в виде строки

Локализация PHP

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

function plLang($phrase) { $trimmed = trim($phrase); static $lang = array( /* ----------------------------------- 1. REGISTRATION HTML ----------------------------------- */ 'LNG_1' => 'some text', 'LNG_2' => 'some other text', etc. ... ); $returnedPhrase = (!array_key_exists($trimmed,$lang)) ? $trimmed : $lang[$trimmed]; echo $returnedPhrase; } 

Он работает отлично, он очень быстро на этом этапе, но моя разметка теперь завален метками языка php, и я не уверен, что принял правильное решение. Я никогда не делал этого раньше, поэтому я понятия не имею, с чем я с нетерпением жду. Также кажется, что к тому времени, когда я закончу, этот файл будет длиной в милю.

Это хороший способ сделать это? Есть ли лучший способ, который вы могли бы предложить?

Спасибо!

Related of "Локализация PHP"

это то, что я делаю в своих cms:

  • для each плагина / программы / сущности (вы называете это) я разрабатываю, я создаю папку /translations .
  • Я разместил там все мои переводы, названные как el.txt, de.txt, uk.txt и т. д. все языки
  • Я храню данные перевода в JSON , потому что он легко запоминается, легко читается и проще всего отправлять свои сообщения.
  • файлы могут быть легко закодированы в UTF8 в файле без использования баз данных, что позволяет читать их в файловом режиме. (только JSON.parse их)
  • при установке таких плагинов я просто просматриваю все переводы и помещаю их в базу данных, каждый язык в каждой строке таблицы. (и т. д. a data column of TEXT datatype )
  • для каждого рендеринга страницы я просто запрашиваю базу данных для взятия этой строки выбранного языка и вызываю json_decode() ко всему результату, чтобы получить его один раз; затем поставьте его в $ _SESSION, чтобы в следующий раз получить переведенные строки с флэш-памятью для текущего выбранного языка.

все это было разработано с учетом производительности и совместимости .

в вашем случае строка в таком файле может выглядеть так:

в en.txt

 {"id":"LNG_1","str":"My word"} 

в de.txt

 {"id":"LNG_1","str":"Mein Wort"} 

Текущий язык может храниться в сеансе как $ _SESSION ["language"]; и использовать это как отправную точку. Затем вы можете читать переводы:

 lang("LNG_1"); 

Многие фреймворки хранят эти языковые массивы в отдельных файлах, причем каждый массив на любом языке имеет одно и то же имя. Тогда ваша языковая функция просто требует соответствующего файла для выбранного пользователем языка ( require('lang.en.php') ).

 // lang.en.php $languageStrings = array( 'login' => 'Log in', ); // lang.ru.php $languageStrings = array( 'login' => 'Авторизовать в системе', ); // lang.ja.php $languageStrings = array( 'login' => 'ログイン', ); 

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

Идея: Использовать языковые теги IETF в качестве языковых ключей.

Вы должны использовать механизм шаблонов, который поддерживает интернализацию.
Например, мой собственный механизм шаблонов позволяет мне делать что-то вроде:

 <p>(_text to be localized here)</p> 

И текст внутри этого маркера будет переведен. Это позволяет не открывать каждый раз, когда теги php в файле шаблона:

 <p><?php plLang('lang'); ?></p> 

Стандартное решение в любом случае – использовать gettext http://php.net/manual/en/book.gettext.php

Пример:

 // alias _() for gettext() echo _("Have a nice day");