Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

ru и en
http://forum.kohanaframework.su/viewtopic.php?f=31&t=277
Страница 1 из 2

Автор:  ducoz [ 02 авг 2012, 23:59 ]
Заголовок сообщения:  ru и en

Ребята. Помогите пожалуйста.
Собираюсь делать сайт на двух языках ru и en.
Возникла идея делать в таблице title_ru и title_en.
Но как определить пользователя, по ip и менять запрос?
Также знаю что есть модуль по язычкам, но не знаю как его применить. помогите плиз :ugeek:

Автор:  Sergey [ 03 авг 2012, 06:18 ]
Заголовок сообщения:  Re: ru и en

ducoz писал(а):
Возникла идея делать в таблице title_ru и title_en.


Вообще брать переводы с БД дурная привычка. Посмотрите вон на Drupal, на скорость его реакции и сравните с этим же в Wordpress.

ducoz писал(а):
Но как определить пользователя, по ip и менять запрос?


По какому ещё IP? :shock:
А если мой интернет через прокси, с какими нибудь африканскими айпишниками?
Работайте с заголовками User-Agent, Accept-Language и т.п., определяйте локализацию клиента (браузера).

ducoz писал(а):
Также знаю что есть модуль по язычкам, но не знаю как его применить. помогите плиз

Ссылки для прочтения:
I18n | Kohana User Guide (eng.)
Описание модуля I18n_Plural для работы с локализацией в Kohana (рус.)
Ko3: мультиязычность (рус.)
Kohana 3 i18n tutorial (eng.)

Автор:  ducoz [ 03 авг 2012, 13:29 ]
Заголовок сообщения:  Re: ru и en

Sergey писал(а):
ducoz писал(а):
Возникла идея делать в таблице title_ru и title_en.


Вообще брать переводы с БД дурная привычка. Посмотрите вон на Drupal, на скорость его реакции и сравните с этим же в Wordpress.

ducoz писал(а):
Но как определить пользователя, по ip и менять запрос?


По какому ещё IP? :shock:
А если мой интернет через прокси, с какими нибудь африканскими айпишниками?
Работайте с заголовками User-Agent, Accept-Language и т.п., определяйте локализацию клиента (браузера).

ducoz писал(а):
Также знаю что есть модуль по язычкам, но не знаю как его применить. помогите плиз

Ссылки для прочтения:
I18n | Kohana User Guide (eng.)
Описание модуля I18n_Plural для работы с локализацией в Kohana (рус.)
Ko3: мультиязычность (рус.)
Kohana 3 i18n tutorial (eng.)

спасибо за совет и за ссылки.

Автор:  Sergey [ 04 авг 2012, 15:04 ]
Заголовок сообщения:  Re: ru и en

Начать нужно с того, что в файле bootstrap.php указать:

Код:
/**
 * Set the default language
 */
// check cookie first
$lang = Cookie::get('lang');

// if no cookie, rely on accept_language
if(empty($lang)) {
   $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
}

// ...

// set language
I18n::lang($lang);


Автор:  ducoz [ 04 авг 2012, 21:04 ]
Заголовок сообщения:  Re: ru и en

Sergey писал(а):
Начать нужно с того, что в файле bootstrap.php указать:

Код:
/**
 * Set the default language
 */
// check cookie first
$lang = Cookie::get('lang');

// if no cookie, rely on accept_language
if(empty($lang)) {
   $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
}

// ...

// set language
I18n::lang($lang);


спасибо, наматаю себе на ус :ugeek:

Автор:  Sergey [ 04 авг 2012, 23:54 ]
Заголовок сообщения:  Re: ru и en

ducoz писал(а):
спасибо, наматаю себе на ус


Напишите потом, как реализовали.

Автор:  AmberLEX [ 05 авг 2012, 10:18 ]
Заголовок сообщения:  Re: ru и en

Можно и средствами Kohana определить локализацию клиента (браузера)
Код:
Request::accept_lang()

Вынести в статический класс типа такой код:
Код:
// Допустимые языки
$available_langs = array('ru', 'en');

// По умолчанию
$default_lang = 'ru';

// Определяем текущий язык 
$lang = Cookie::get('lang', NULL);

// Если такой язык недопустим
if ( ! in_array($lang, $available_langs))
    $lang = NULL;

// Если язык не определен
if ($lang === NULL) 
{
    // Языки пользователя в порядке предпочтения (из настроек браузера)
    $langs = Request::accept_lang();

    // Перебираем их
    foreach ($langs as $l => $v)
    {
        // Если предпочитаемый язык пользователя есть в допустимых языках сайта
        if (in_array($l, $available_langs))
        {
            $lang = $l;
            break;
        }

        // Если текущий язык так и не определился
        if ($lang === NULL)
        {
            // Устанавливаем язык сайта, который по умолчанию
            $lang = $default_lang;
        }

        // Запоминаем текущий язык
        Cookie::set('lang', $lang);
    }
}
  
Код:
// set language
I18n::lang($lang);  

Ну это как-бы одно, а другое - нужно учитывать параметр языка из строки браузера. Тут скорее всего придется все равно отдельным классом делать для удобства.

Кстати, интересная тема!)
Сделать так, чтобы:
- Учитывался язык из HTTP_ACCEPT_LANGUAGE
- Основной язык не присутствовал в строке браузера, а дополнительные были:
http://домен/
http://домен/en/
http://домен/uk/
Тут тоже интересный момент: украинский в настройках браузера 'uk', а не 'ua', как хотелось бы)
United Kingdom - 'en-gb', а не 'uk', вот так-то. Но это мелочи. Тема не маленькая, если все по "фен-шую" делать)

Вот здесь сделано так: http://www.gsl.ua/ua/TV-Video/ - украинский
При переключении, основной язык убирается, а если изменить http://www.gsl.ua/ua/TV-Video/ на http://www.gsl.ua/ru/TV-Video/ - 404

Некоторые делают так:
http://домен/ - главная страница (на русском)
http://домен/ru/ - тоже как бы главная ( = http://домен/ )
http://домен/en/ - главная на английском (тут нормально)
Хотя может это и не так критично, но думаю пример с магазином самый правильный вариант и для SEO хорошо - не нужна приставка для основного языка. Как вы думаете?
Может кто-то реализовывал на Kohana такой вариант?

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

Автор:  Ensiferum [ 21 авг 2012, 10:03 ]
Заголовок сообщения:  Re: ru и en

gettext думаю будет пошустрее, чем стандартный i18n

Автор:  vfvtnjd [ 22 авг 2012, 17:41 ]
Заголовок сообщения:  Re: ru и en

ducoz писал(а):
Ребята. Помогите пожалуйста.
Собираюсь делать сайт на двух языках ru и en.
Возникла идея делать в таблице title_ru и title_en.
Но как определить пользователя, по ip и менять запрос?
Также знаю что есть модуль по язычкам, но не знаю как его применить. помогите плиз :ugeek:

Лучше в таблице сделайте столбец для языка :
------
lang |
------
ru|
en|
uk|
etc|

Потом просто :
Код:
select * from table where lang=$current_lang;

Автор:  Sergey [ 22 авг 2012, 17:44 ]
Заголовок сообщения:  Re: ru и en

vfvtnjd писал(а):
Лучше в таблице сделайте столбец для языка :
------
lang |
------
ru|
en|
uk|
etc|

Потом просто :
Код:
select * from table where lang=$current_lang;


Лучше использовать i18n или gettext чем базу данных

Страница 1 из 2 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/