Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: многоязычность сайта

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Вездеход
Отправлено: 14 Ноября, 2010 - 21:26:47
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




ребят, скажите как вы делаете многоязычность? Улыбка
у меня пока основной вариант - языковой файл, где массивом фразы... но вызыывать их не оч удобно Недовольство, огорчение
щас стал читать про gettext
вроде удобно.. но не мог бы кто нибудь привести пример реализации???


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
OrmaJever Модератор
Отправлено: 15 Ноября, 2010 - 01:10:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




не знаю как другие а ядля себя делал так
Файл с языком ru.php
PHP:
скопировать код в буфер обмена
  1.  
  2. $lang = array(
  3. 'top' => 'Название сайта',
  4. 'home' => 'Главная',
  5. 'xxx' => 'пишем что хотим.');


затем другой файл например lang.php

PHP:
скопировать код в буфер обмена
  1.  
  2. switch($_COOKIE['lang'])
  3. {
  4.      case '':
  5.      case 'ru':
  6.         include(путь к файлу ru.php);
  7.      break;
  8.      case 'en':
  9.         include(путь к файлу eng.php);
  10.      break;
  11. }

файл lang.php инклудить во свех файлах и место названий писать $lang['ключ масива'].
ну и в итоге на странице зделать сылки для переключения языков которые добавляют куки lang.
ЗЫ. можно использовать $_GET место $_COOKIE но это пуличится не красиво, в каждой сылке будет ...&lang=ru а это неочень приятно Улыбка


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Вездеход
Отправлено: 15 Ноября, 2010 - 10:39:51
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




OrmaJever
куки это ужасно имхо. я их использую только для сохранения авторизации.... я язык сохраняю в сессиях.

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


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
OrmaJever Модератор
Отправлено: 15 Ноября, 2010 - 12:53:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Вездеход пишет:
куки это ужасно имхо.

Чем ужасно? Однако Сесия заканчивается после закрытия браузера или через 24минуты. А как потом? А потом все настройки сбились Улыбка
Вездеход пишет:
я язык сохраняю в сессиях.

Ну я привёл пример.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Viper
Отправлено: 15 Ноября, 2010 - 15:29:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Вездеход что-то мне кажется вы велосипед решили погнуть.
Для каждого языка свой языковой файл. Зачем в массив-то все это собирать?

Далее делаете выбор языка либо глобально в системе, либо даете выбрать язык юзеру в настройках своего профиля. Затем сохраняете либо в БД, либо в куку(как говорится для контроля) и загружаете потом нужный язык.

Обработку, загрузку данных о языке стоит выполнить глобально в ядре дабы не подключать каждый раз языковой файл в каждом нужном(и ненужном) месте, а просто при помощи самописной функции вызвать нужную переменную из онного и вывести.

Сами же языковые файлы обычно делают либо в виде
$var = 'value';
либо
$var['var_name'] = 'value';
либо
CONSTANT=VALUE;


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
HotBird
Отправлено: 15 Ноября, 2010 - 18:42:14
Post Id



Гость


Покинул форум
Сообщений всего: 114
Дата рег-ции: Сент. 2010  


Помог: 2 раз(а)




Я делаю так:
Все тексты описываю константами в файлах ru.php , en.php
Информацию о выбраном языке храню в куках, сесионной переменной и в базе данных для каждого пользователя отдельно.
При старте скрипта если пользователь авторизирован то устанавливаем нужный язык из базы данных, если нет то проверяется значение в куки, если есть то устанавливаем выбранный язык, если нет то проверяем значение сессионной переменной и устанавливаем соответствующий язык.
Если все три варианта не дали возможности опредилить язык сайта то можно установить его в зависимости от айпи пользователя.

После этого в зависимости от установленного языка инклудистя нужный файл ru.php или en.php


-----
Человек, сделавший синтаксический анализатор PHP на одном регулярном выражении, займет достойное место среди гениев.
Качественный хостинг по доступной цене
 
 Top
Nibiru
Отправлено: 30 Ноября, 2010 - 11:35:25
Post Id



Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Нояб. 2010  
Откуда: Майкоп


Помог: 0 раз(а)




На основе прочитанного решил сделать пробные файлы с реализацией многоязычности.
С программированием не очень, вроде сделал все правильно: создал файлы (ru.php, en.php, lang.php и собственно файл на котором должна быть реализована многоязычность index.php. В этом файле по умолчанию выводится текст на языке, который первый прописан в файле lang.php
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?
  3. switch($_COOKIE['lang'])
  4. {
  5.     case '':
  6.     case 'en':
  7.        include("en.php");
  8.     break;
  9.     case 'ru':
  10.        include("ru.php");
  11.     break;
  12. }
  13. ?>
  14.  


Но переключение между языками не работает. Подскажите, что я не так сделал. Варианты ссылок пробовал несколько. нНо кажется дело не в них.
Вставка кода на страницу index.php (делаю на денвере, соответственно в папке "proba" находятся все файлы)
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. // первый вариант ссылок
  3.                 <ul>
  4.     <li><a onclick="return switch_language('ru', 'ru')" href="/proba/">ru</a></li>
  5.     <li><a onclick="return switch_language('ru', 'en')"href="/proba/">en</a></li>
  6.                 </ul>
  7.  
  8. // второй вариант ссылок
  9. <a href="http://localhost/proba/index.php?action_skin_change=yes&skin_name=ru">Русский</a>
  10. <a href="http://localhost/proba/index.php?action_skin_change=yes&skin_name=en">Английский</a>
  11.  
  12.  
  13. // вставка текста
  14.            
  15. <?php
  16. include_once "lang.php";
  17. echo $lang['top'];
  18. ?>
  19.  


-----
Век живи, век учись!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB