Forum Webscript.Ru
Программирование => PHP => Тема начата: zonder от 06 Марта 2003, 20:54:00
-
Не подскажите какие есть способы организации многоязыкового интерфейса сайта (алгоритмы, структуры и т.п.)
Спасибо
-
все сообщения в переменные и в отдельный файл для каждого языка.
-
что за сообщения ?
-
сообщения интерфейса - текст, который выводится пользователю.
т.е. есть у тебя:
index.php
echo "Hello, world!\\n";
?>
вместо него делаешь:
index.php
if($lang=="ru"){
include("language_ru.php");
}else{
include("language_en.php");
}
echo $lang_hello_world."\\n";
?>language_ru.php
$lang_hello_world="Привет мир!";
?>language_en.php
$lang_hello_world="Hello world!";
?>
-
как альтернатива:
http://www.php.net/gettext
-
это то ясно
это как говрится в лоб решение
а более систематизированного решения нет случайно ?
или на основе этого,.......руские файлы в одну папку, англицкие - вдругую\\ и в зависимости от языка вытаскивать те или иные файлы ?
-
zonder
еще тут глянь: http://forums.webscript.ru/showthread.php?s=&threadid=10908&msgnum=12
-
zonder
вообще задача делится на 2 пункта:
1. организация мультиязычного контента
2. организация мультиязычного интерфейса.
Что касается первого, тут все зависит от того как ты свой контент храниш. Например если в БД то обычно достаточно добавить поле language и все.
Насчет интерфейса, то тут возможно использовать :
- хранение фраз в массиве/переменных/константах (как AliMamed тебе подсказал)
- gettext (я так понимаю, ты с ним не захотел разбираться)
- разные шаблоны для разных версий
- тупо сделать несколько папок ru/ en/ и в каждой свой
скрипт со своим переводом
- кто-то еще предлагал использовать xml для этого (логика там идентична методу AliMamed-а)
Других методов я не знаю.
-
есть решение - все данные в базу и в зависимости от запрашиваемого языка показывать контент на русском, английском, немецком и т.д., конечно надо чтобы контент на всех языках существовал.
кстати, как поступают когда вся инфа в базе, а контент не идентичен, т.е. на одном языке те страницы есть, а на другом нету? просто интересно ;-)
-
USE
1. Ничего не делают. Там, где контент не обновлен, показывается старый контент.
2. Вешают пометку "outdated" (просрочено) где-то сверху страницы или в заголовке дальше как в п1.
3. Перебрасывают на тот язык (обычно английский), который наверняка обновлен.
А что вообще по-твоему можно делать в этом случае? :)
-
кстати, как поступают когда вся инфа в базе, а контент не идентичен, т.е. на одном языке те страницы есть, а на другом нету? просто интересно
ссылки на страницы скриптом строить. И скрипт должен проверять какие страницы есть на этом языке и только на них показывать ссылки
-
а может кто нибудь пояснить, что такое gettext
-
это программа, разработанная как раз для того чтобы позволить разработчикам ПО легко делать мультиязыячные интерфейсы в своих программах.
Что касается gettext+php то есть несколько статей на популярных забугорных сайтах по php (ссылки не помню) ну и та ссылка что я выше давал.
-
А про использование gettext+php нет статей по русски ?
-
Конечно нет =)
-
Слушайте, а давайте напишем! :)
-
да ну - gettext уж слишком в лом + завязан на английский (или любой другой) 1н язык в качествеве базового.
А вот как по нормальному сделать.
Я то делал в проекте одном. Там была одна php-ка, 3 файла с контентом ("text.ru/en/uk") и еще файлик с переменными типа "заголовок" под каждый язык - отдельно, потому как по нему еще и карта сайта строилась.
а включал - include("text."+$lang) , конечно if(file_exists ...
просто и работает.
Данные брались
1) из coockie
2) из URL-ки if($lang) $lang -> coockie
3) из настроек броузера
-
Oak
завязан на английский (или любой другой) 1н язык в качествеве базового.
немного не понял. Ты про:
echo _(\'Строка, которая будет переведена\');
Вообще я gettext предложил как альтернативу (имхо довольно удобную) методу олписанному AliMamed-ом и Oak-ом
Есть кстати еще pear::I18N хотя имхо он неудобен по сравнению с другими описываемыми здесь методами.