2013-03-03 6 views
0

Я работаю над многоязычным проектом. Содержимое, такое как статьи, описание продукта будет показано из базы данных. Это не проблема. Проблема в том, что есть некоторые «статические» описания, например. Метки формы, сообщения об ошибках и т. Д.PHP Несколько языков

До сих пор я заканчивал этим. Я храню язык в COOKIE, и у меня есть функция для записи сообщений в set lanugeage. У меня есть файл с именем _lang.php с этим контентом:

$['empty_field']['sk'] = "Slovak description of error"; 
$['empty_field']['en'] = "English description of error"; 

И так далее. Это хорошее решение или нет? Любые другие решения? Благодаря

Так что я попробовал Gettext() и закончил с этим: (выход приветствуется)

putenv("LANGUAGE=sk_SK"); 
setlocale(LC_ALL, 'sk_SK'); 
$dom = "roids"; 
bindtextdomain($dom, "www/roids/_locale"); 
textdomain($dom); 
echo gettext('welcome'); 

Я создал папку, доступ к этой папке: _locale/sk_SK/roids.po

Содержание roids.po:

msgid "" 
msgstr "" 
"Content-Type: text/plain; charset=utf-8\n" 
"Content-Transfer-Encoding: 8bit\n" 

msgid "welcome" 
msgstr "vitaj" 

Я с помощью сервера WAMP, и я не знаю, является ли этот путь: WWW/Roids/_locale хорошо. Здесь установлен Wamp: файлы D: \ wamp и ww находятся в D: \ wamp \ www

+0

Я бы сделал это просто иначе: '$ ['sk'] ['empty_field'] = '...'' –

+2

использовать для этого рамки. Symfony, Zend и т. Д. ... предоставляют множество утилит для решения вопросов интернационализации и локализации. – mpm

+0

Пробовал.Не работает –

ответ

3

Думаю, вам стоит взглянуть на несколько ресурсов. Один хороший здесь прямо в сети обмена стеками. PHP Localization Best Practices? gettext?

Другим хорошим ресурсом является Google. Просто google php localization best practice Существует много хороших библиотек для использования с php и локализацией

Другим хорошим ресурсом для этого является функция gettext от самого php. Это то, как я собирался сделать что-то подобное.

UPDATE

Это очень хороший учебник от группы O'Reilly по этому вопросу. Gettext - O'Reilly Media

+0

Я посмотрел на функцию gettext, но я делаю не обязательно udnerstand, как это работает - как сделать эти файлы .mo и т. д. Не могли бы вы рассказать мне больше? –

+0

Пожалуйста, поддержите это. – bretterer

+0

Отредактированный вопрос –

1

Я бы использовал require_one для загрузки в файл PHP для определенного языка.

т.е.

require_once('/some/path/errors_'. $_SERVER['HTTP_ACCEPT_LANGUAGE'] . '.php'); 

и этот файл определяет соответствующий массив сообщений об ошибках/и т.д. для этого языка.

+0

Будьте осторожны с этой опцией, так как вам нужно провести синтаксический разбор '$ _SERVER ['HTTP_ACCEPT_LANGUAGE']', чтобы получить то, что вы ожидаете. Когда я печатаю мой, он дает мне «en-US, en; q = 0.8'; – bretterer

+0

@bretterer - Хорошая точка. Я уверен, что плакат может уточнить решение. –

2

В зависимости от ситуации, вместо того, чтобы поддерживать массив, такие как

$['empty_field']['sk'] = "Slovak description of error"; 
$['empty_field']['en'] = "English description of error"; 

вы могли бы, возможно, более легко управлять строками, или возделывать их к другим, используя INI файл и ПГПС parse_ini_file:

[sk] 
empty_field = "Slovak description of error"; 
; others in here ... 

[en] 
empty_field = "English description of error"; 
; others in here ... 

С уважением к комментарию Wouter J что вы делаете lang первый массив.

+0

Спасибо. Я думаю, что буду использовать это решение :) –

Смежные вопросы