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

  • Автор темы Автор темы dtmax
  • Дата начала Дата начала
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], да и понятней контекст выписываемого.
 
а если мессежей много (200-500) как это будет на быстродействии сказываться?
 
$L=${strtoupper($_SESSION["lng"])};
А потом
echo $L[word];
Не очень быстро получается, зачем тебе в программе два языковых массива? Их надо кинуть в разные файлы (например lang.ru и lang.en).
 
Автор оригинала: Tronyх
зачем тебе в программе два языковых массива? Их надо кинуть в разные файлы (например lang.ru и lang.en).
Совершенно согласен, что их раскидать по файлам и инклюдить. Просто у меня использовались оба массива. Типа весь интерфейс на русском, а title к линкам и подписи типа switch to english, pārslēgties uz latviešu valodu на соотв. "заграничном".
 
Для многоязычности я использую следующие:
Честно скажу не мой код, надыбал в каком-то скрипте.
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>
 
В переключателе ошибся:
PHP:
//Переключатель языка 
foreach($languages as $this) {     
if ("$lang" == $this["short"]) { 
echo "[" . $this["full"] . "]"; 
} else { 
echo " <a href='?lang=".$this["short"]."'>[" . $this["full"] . "]</a> "; 
} 
}
 
himan:
бл*$&! Уже раза четыре сказали что надо разбивать_на_несколько_файлов, зачем тягать лишнии, не нужные данные?!
 
Автор оригинала: 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");

Я ответил на Ваш вопрос, или я не прав?
 
frol
зачем, засунь весь масив в отдельный файл и обращайся по мере надобности...
 
Может не совсем по теме топика, но...

Мне кажется, что было бы удобно при несколько-язычном сайте поступить так: определить и использовать языковые теги типа [rus] [/rus], [eng] [/eng] . Затем при отдаче документа пользователю, в зависимости от активного языка, выкусывать "лишние" языковые фрагменты, чтобы осталось только то, что нужно. Я пока не очень силен в механизмах http, поэтому вопрос - можно ли, и если да то как реализовать такой механизм. Спасибо!!!
 
Граждане изобретатели велосипедов!
Может быть сначала выйти на улицу и посмотреть, как они выглядят? Я в этой ветке штук пять сообщений насчитал типа "А я сделал так".
Обратитесь к существующим большим open source проектам, где многоязычность делалась не на коленке (как к сожалению большинство из представленных здесь вариантов).
Начать хотя бы с phpMyAdmin. Попробовать посмотреть на свалках скриптов.
 
Re: Многоязычность

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

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

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

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

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

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

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

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