Многоязычность

Venom

Guest
btw. когда я делал многоязыковый интерфейс сайта, то использовал ассоциативный массив:
$EN=Array(
"word"=>"word",
"please fill in"=>"please fill in",
);
$RU=array(
"word"=>"слово",
"please fill in"=>"пожалуйста заполните",
);
И переменную из сессии, содержащюю "en","ru" etc.
$L=${strtoupper($_SESSION["lng"])};
А потом
echo $L[word];
Просто, как мне кажется, если как индексом массива прописывать англифицированный или транслитеризированный перевод слова - легче найти что тебе нужно вписать\вставить, если один и тот же термин будет повторяться, чем рыскать, чему соответствовал $L[345], да и понятней контекст выписываемого.
 

Yurik

/dev/null
а если мессежей много (200-500) как это будет на быстродействии сказываться?
 

Tronyх

Новичок
$L=${strtoupper($_SESSION["lng"])};
А потом
echo $L[word];
Не очень быстро получается, зачем тебе в программе два языковых массива? Их надо кинуть в разные файлы (например lang.ru и lang.en).
 

Venom

Guest
Автор оригинала: Tronyх
зачем тебе в программе два языковых массива? Их надо кинуть в разные файлы (например lang.ru и lang.en).
Совершенно согласен, что их раскидать по файлам и инклюдить. Просто у меня использовались оба массива. Типа весь интерфейс на русском, а title к линкам и подписи типа switch to english, pārslēgties uz latviešu valodu на соотв. "заграничном".
 

himan

Guest
Для многоязычности я использую следующие:
Честно скажу не мой код, надыбал в каком-то скрипте.
PHP:
<?
$languages = array(
	"en" => array(
		"short" => "en",
		"full" => "English" 
		),
	"ru" => array(
		"short" => "ru",
		"full" => "Русский"
		),
	"de" => array(
		"short" => "de",
		"full" => "Deutsch" 
		)
	);

$langdefault="ru";

if (!$lang) { $lang=$langdefault; }

//список фраз
$text0001 = array(
"ru" => "Главная",
"en" => "Home",
"de" => "Home"
);

$text0002 = array(
"ru" => "Новости",
"en" => "News",
"de" => "News"
);
//выводим
echo "<br> $text0001[$lang] и $text0002[$lang] <br>";

//Переключатель языка
foreach($languages as $this) {	
if ("$lang" == $this["short"]) {
echo "[" . $this["full"] . "]";
} else {
echo " <a href='$f_home?lang=".$this["short"]."'>[" . $this["full"] . "]</a> ";
}
}
?>
Картинки с разными языками тоже довольно легко меняются:
<img src=im/x<? echo $lang; ?>.gif width=1 height=4>
 

himan

Guest
В переключателе ошибся:
PHP:
//Переключатель языка 
foreach($languages as $this) {     
if ("$lang" == $this["short"]) { 
echo "[" . $this["full"] . "]"; 
} else { 
echo " <a href='?lang=".$this["short"]."'>[" . $this["full"] . "]</a> "; 
} 
}
 

Tronyх

Новичок
himan:
бл*$&! Уже раза четыре сказали что надо разбивать_на_несколько_файлов, зачем тягать лишнии, не нужные данные?!
 

himan

Guest
Автор оригинала: Tronyх
himan:
бл*$&! Уже раза четыре сказали что надо разбивать_на_несколько_файлов, зачем тягать лишнии, не нужные данные?!
Какие проблемы? разбейте... я написал чтоб меньше было.

lang.inc.php

PHP:
$languages = array( 
    "en" => array( 
        "short" => "en", 
        "full" => "English"  
        ), 
    "ru" => array( 
        "short" => "ru", 
        "full" => "Русский" 
        ), 
    "de" => array( 
        "short" => "de", 
        "full" => "Deutsch"  
        ) 
    ); 

$langdefault="ru"; 

if (!$lang) { $lang=$langdefault; }
Сделайте разные файлы с базами слов (например всё для новостей в один а для другого раздела другой) и подключайте их к тем файлам к которым нужно... Темсамым не теня целую кучу лишнего...

require("lang.inc.php");
require("newsword.inc.php"); или require("otherword.inc.php");

Я ответил на Ваш вопрос, или я не прав?
 

hperborei

Guest
frol
зачем, засунь весь масив в отдельный файл и обращайся по мере надобности...
 

Jocker

Guest
Может не совсем по теме топика, но...

Мне кажется, что было бы удобно при несколько-язычном сайте поступить так: определить и использовать языковые теги типа [rus] [/rus], [eng] [/eng] . Затем при отдаче документа пользователю, в зависимости от активного языка, выкусывать "лишние" языковые фрагменты, чтобы осталось только то, что нужно. Я пока не очень силен в механизмах http, поэтому вопрос - можно ли, и если да то как реализовать такой механизм. Спасибо!!!
 

V.Gubarev

Guest
Граждане изобретатели велосипедов!
Может быть сначала выйти на улицу и посмотреть, как они выглядят? Я в этой ветке штук пять сообщений насчитал типа "А я сделал так".
Обратитесь к существующим большим open source проектам, где многоязычность делалась не на коленке (как к сожалению большинство из представленных здесь вариантов).
Начать хотя бы с phpMyAdmin. Попробовать посмотреть на свалках скриптов.
 

LamerOnLine

Guest
Re: Многоязычность

Автор оригинала: dtmax
Hi, All!

Меня интересует, какие у кого есть идеи реализации многоязычности на
php-сайте.
Ок идея простая......
не надо рассматривать многоязычность как только текст.... и тем более не надо пытаться сделать переводчик. Если уж делать то делать......

Рассмотрим любую вещь на странице как контент, т.е. меню это группа контентов. Теперь все стало значитено проще...

Контент это нечто в виде черного ящика, но может быть согласовано распределено для каждого языка одинаково, все контенты храняться в виде записей в БД. с указанием Кода конткнта и кода его языка.

далее все становиться очень просто.....
пишем только темплейты или нечто на низ похожее...

Алгоритм такой
1. Пишем темплейт в котором, каждый блок-конткнт уже расствлен на свое место...
2. блок-конткнт вызывает RENDER_FUNCTION( CONTEN_ID, LANG_ID);
3. RENDER_FUNCTION может и сама запрвшивать текущий язык. :))

ВСЕ...
Остальное детали..... Причем реализации.... :)))
 

su1d

Старожил PHPClubа
Сколько таких "контентов" у тебя будет на одной странице? Ударимся в крайность: возьмём входную страницу немаленького портальчика. 100? больше?
У тебя БД не грохнется на каждый запрос таскать всю эту кучу данных, да ещё парсить, а потом рендерить такой шаблон?
Остальное детали..... Причем реализации.... :)))
Именно об этих деталях здесь и идёт речь. Вернее о выборе наиболее простой, быстрой и эффективной реализации многоязычности. Боюсь, что твой вариант - далеко не самый лучший.
 

LamerOnLine

Guest
2su1d малыш ты меня смешишь......
Тебе так нравиися мой ник ? Для самого круитого портала на странице не более 20 таких ресурсов, просто надо грамотно его строить.... А если грамотный рендер будет и кеширование то запросов в базу будет только на каждый 50 ресурс :))

Так что чита
 

su1d

Старожил PHPClubа
2su1d малыш ты меня смешишь......
я рад, что тебе весело..
Тебе так нравиися мой ник ?
Ник - это всего лишь ник. Просто сначала тебе бы было полезно посидеть некоторое время в read-only режиме, а потом уже лезть сразу во все thread'ы с советами профессионала программирования на С.
Для самого круитого портала на странице не более 20 таких ресурсов...
Разговор идёт не о CMS, где ты бьёшь страницу на блоки и таскаешь их из базы. Может быть ты ошибся просто? Здесь обсуждается многоязычность, и помимо самого контента (где, всяко, надо бить именно на блоки контента), есть ещё десятки различных мельчайших надписей, каждой из которых надо обеспечить свой перевод. И их уж точно не может быть "не более 20".
 

LamerOnLine

Guest
Спорим ? или как ? страница без скролинга не более 10-15 ресурсов, со скролингом от 10 до 30..... А дата она и есть дата :)) ее все равно тягать.....
 

su1d

Старожил PHPClubа
извини, я не имел в виду хомячка "Hi, my name's Bob!".
 
Сверху