Intereting Posts
Изменение версии PHP, используемой Composer для Windows конвертировать mysql timestamp в фактическую дату и время? Silverstripe – Зацикливание по неассоциативному массиву в шаблоне Валютный символ в пурпуре Проект Cake php 2.x перенаправляет на неправильный URL-адрес после реализации ACL более короткий способ повторения переменной в php? Убедитесь, что PHP substr заканчивается словом, а не символом Расширение валидатора Laravel несколько раз Как пропустить некоторые поля из базы данных при использовании fputcsv Исправления Mysql и php для репликации безопасности PDO Аутентификация, если существует учетная запись Facebook, – не хотите проходить через вход в FB Предотвращение повторной отправки представления при обновлении браузера Выходное изображение из образа Imagick в PHP Замена Word без учета регистра Word как реализовать sha 512, md5 и солевое шифрование всего за один пароль

Вопрос о локализации PHP

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

Как бы вы справились с этим? Есть ли безопасный способ помочь gettext работать в нескольких системах? Может, это уже есть?

Привет из Швеции / Тобиаса

Я рекомендую вам взглянуть на Zend_translate , Zend_locale и Zend_Date . Я только начинаю баловать себя, но для меня они уже кажутся действительно хорошим, чистым и современным решением интернационализации, в отличие от хаоса, который является gettext.

Введение в Zend_translate содержит ряд сильных аргументов, почему нужно выбирать (или что-то подобное) над gettext.

В многоязычных приложениях контент должен быть переведен на несколько языков и отображать контент в зависимости от языка пользователя. PHP предлагает уже несколько способов решения таких проблем, однако решение PHP имеет некоторые проблемы:

Несогласованный API: для разных исходных форматов нет единого API. Например, использование gettext очень сложно.

PHP поддерживает только gettext и собственный массив: сам PHP предлагает только поддержку массива или gettext. Все остальные исходные форматы должны быть закодированы вручную, потому что нет встроенной поддержки.

Отсутствие языка по умолчанию: язык по умолчанию пользователя не может быть обнаружен без глубокого знания фона для разных веб-браузеров.

Gettext не является потокобезопасным: библиотека gettext PHP не является потокобезопасной, и ее нельзя использовать в многопоточной среде. Это связано с проблемами с самим gettext, а не с PHP, но это уже проблема.

Zend_Translate Zend Framework является наиболее гибким, что я видел. Для него необязательно нужен модуль поддержки gettext на стороне PHP, когда он сам читает формат .mo-binary.

Блоки языков должны храниться вне программы. Они могут быть в базе данных или в файлах XML. Это позволит добавить дополнительные языки в более поздний момент времени.

Тогда все ваше приложение должно сделать, это определить локализацию пользователя и подать соответствующий текст для каждой ситуации.