[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Два языка на сайте (с нуля)
Manson
Доброго дня!

Насколько сложно ввести в сайт (под смарти) мультиязычность?

Тоесть есть некие файлы en.php, ru.php с содержанием ну к примеру таким:
PHP
$home 'Главная страница';
$foto 'Фотографии';
$profile'Профиль';


Их соответственно два - файлики с русскими фразами и англ.

В самих *.tpl файлах будет что-то типа такого {$home} - чтобы на сайте выводилась фраза из языкового файла.

Соответственно и опция смены языка.

Скажу честно программированию я не обучался, но явно дебилом не являюсь, если будет какой-то пример или мануалка - справлюсь.



Спустя 26 минут, 59 секунд (17.12.2008 - 15:26) FatCat написал(а):
Примерно так и делается, только не множество имен переменных, а массив.
Мне больше нравится конструкция с макросами: в тексте страницы ставится к примеру:
HTML
<!--board_home-->

В русском ленг-файле
PHP
$words = Array(
"<!--board_home-->" => "Главная страница",
...
);

В зависимости от выбора пользователя инклюдится нужный ленг-файл.
При генерации страницы str_replace...

Эта конструкция удобней для работы дизайнеров: можно работать с HTML-файлом дизайна даже в визуальных редакторах.

Спустя 27 минут, 3 секунды (17.12.2008 - 15:53) Dezigo написал(а):
Не сложно, вот тебе код.


$ltcText = new LtcText('tv', $this->central->getGlobalParam('language'));


тут мы ловим язык

Существуеб Дб, - То есть таблица где храняться переводы.



ID TEXT_RU TEXT_ENG

NAME Андрей Andrej


обращяясь к базе с условием на язык с ИД 'NAME'


В самом шаблоне ты токо релилуешь выход - то есть {ARRAY.NAME}


Спустя 4 дня, 3 часа, 45 минут, 20 секунд (21.12.2008 - 19:39) Manson написал(а):
Я ничего не понял. Честно.

Файлы то с массивом создать не проблема. Сложнее сделать выбор языка на сайте и функцию чтобы этот самый выбранный язык "ловить".

В гугле вообще информации минимум по данному вопросу. А если и есть то для профессионалов. А я юрист по образованию biggrin.gif

Спустя 2 часа, 4 минуты, 52 секунды (21.12.2008 - 21:44) Sylex написал(а):

Спустя 1 минута, 51 секунда (21.12.2008 - 21:45) Sylex написал(а):
P.S. уверен, нарыть еще много инфы можно... плохо искали

Спустя 18 минут, 16 секунд (21.12.2008 - 22:04) modobaks написал(а):
Какие проблемы, есть два файла.
langs.rus.php
langs.eng.php
в нем массив, $langs[‘head’] = ‘голова’;
ну а дальше дело техники, include`ишь то или иной файл в скрипт, то что в статье выше не ДЕЛАЙ так не когда, огребешь потом проблем.

Спустя 22 минуты, 30 секунд (21.12.2008 - 22:26) Manson написал(а):
Видел эту статью. Делал как описано - не заработало.

С массивами и двумя файлами все понятно. Неясно вот это самое "дело техники", каким образом происходит переключение языка?

Спустя 34 минуты, 40 секунд (21.12.2008 - 23:01) Manson написал(а):
Будет ли это безопасно и удобно сделать так:

index.php
PHP
if(если в базе язык пользователя==1) {
include 
'lang/ru.php';
} else {
include 
'lang/lv.php';
}

Спустя 52 минуты, 9 секунд (21.12.2008 - 23:53) modobaks написал(а):
Все верно, так, что бы сомнения развеять, практически все форумы так и сделаны

Спустя 55 минут, 40 секунд (22.12.2008 - 00:49) Manson написал(а):
Вобщем удалось кое что сделать, но не до конца. Язык меняется, нужный файл инклюдится.

Вот тут и начинаются сложности. Есть два варианта что писать в языковом файле. Это либо константы:
PHP
<?php
define
("main_menu""Главная");


Либо массив:
PHP
<?php
$langs 
= array(
$langs['main_menu'] = 'Главная',
);


Что лучше? Массив как я понимаю? Тогда как сделать вывод его в конечный шаблон tpl?

Спустя 1 час, 5 минут, 44 секунды (22.12.2008 - 01:54) kirik написал(а):
Да, массив в этом случае лучше. Но вы немного не правильно его написали..
нужно так -
PHP
$langs = array(
'main_menu' => 'Главная',
);

тогда в шаблоне этот элемент будет вызываться так - $langs['main_menu']
Советую не создавать сразу большой массив, а вносить значения по мере надобности, тоесть так-
PHP
$langs['main_title'] = 'Главная';
$langs['error'] = 'Ошибка';


Я пользуюсь несколько другим алгоритмом..
Есть языковой массив, например как в вашем случае $lang
И есть функция
PHP
function getTranslate($txt)
{
    global $lang;
    return isset($lang[$txt]) ? $lang[$txt] : $txt;
}


все что нужно - это вызвать функцию с установленным значением $txt, например
PHP
echo '<div>'.getTranslate('Недостаточно прав для просмотра.').'</div>';

если в языковом массиве присутствует элемент с ключем "Недостаточно прав для просмотра." ($lang['Недостаточно прав для просмотра.']), то выводим его, если нет - показваем оригинальный текст.
Это очень удобно, когда проект большой, и не приходится придумывать для каждого языкового значения свое название. И даже если что-то не переведено, то выводится дефолтное сообщение, а не ошибка о несуществующем ключе в массиве.
Да, это более ресурсозатратный способ, чем вызывать элементы напрямую по ключам, но, согласитесь, удобнее. =)

Спустя 1 час, 37 минут, 28 секунд (22.12.2008 - 03:32) lawbreaker написал(а):
я не врублюсь чаво ты хочеш!
зайди в гугле и поставь на свой сайт скрипт он гугла! он тебе будет переводит твой сайт!

Спустя 1 час, 53 минуты, 26 секунд (22.12.2008 - 05:25) ExtendedPlay написал(а):
lawbreaker ухаха!!!!!!!!!!! зачот!!!!!!!!!!! laugh.gif

Спустя 3 часа, 45 минут, 52 секунды (22.12.2008 - 09:11) Sylex написал(а):
laugh.gif

Спустя 27 минут, 22 секунды (22.12.2008 - 09:38) Dezigo написал(а):
тебе надо словить язык так лови его по параметрам - какми тебе удобно
/ENG/ABOUT

echo $param['1];

// ENG
да чем угодно лови..проблема та в чём сама*..? dry.gif

Спустя 1 час, 11 минут, 28 секунд (22.12.2008 - 10:50) modobaks написал(а):
Плюс к этому подходу можно привязать админку, все, что потребуется это загрузить массив и вывести в браузер для редактирования.

Спустя 4 часа, 35 минут, 17 секунд (22.12.2008 - 15:25) Alchemist написал(а):
Цитата (kirik @ 22.12.2008 - 00:54)
Советую не создавать сразу большой массив, а вносить значения по мере надобности, тоесть так-

PHP
$langs['main_title'] = 'Главная';
$langs['error'] = 'Ошибка';


А почему ?

Спустя 6 часов, 44 минуты, 25 секунд (22.12.2008 - 22:10) kirik написал(а):
Цитата (Alchemist @ 22.12.2008 - 07:25)
А почему ?

Можно будет разбить весь перевод на много файлов потом, и нужные потом просто подключать. Есть вариант конечно - создавать несколько массивов, а потом соединять их вместе, но это лишняя работа.=)


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.