Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 24 ноя 2017, 05:12

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Файлы перевода
СообщениеДобавлено: 22 апр 2012, 16:40 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 12 фев 2012, 01:02
Сообщения: 462
Перевод раздела "Translation Files" (Файлы перевода) официальной документации Kohana
http://kohanaframework.su/guide/translation_files

_________________
kohanaframework.su - обучение фреймворку Kohana


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Файлы перевода
СообщениеДобавлено: 02 апр 2013, 22:25 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
Цитата:
PHP оставляет за собой право все методы, начинающиеся с __, считать "магическими". Не рекомендуется использовать имена методов с __ в PHP, если вы не желаете использовать соответствующий "магический" функционал.

не кошерное у функции название кстати ))

По статье:
также не совсем понятно зачем переопределять класс I18n, если __() не его метод, а отдельная функция, можно файл с функцией например можно вставить и в bootstrap. Это скорее общее замечание т.к. многие неопытные программисты всегда тупо следуют мануалам не пытаясь понять зачем так сделано.
Еще забыли осветить задание языка в bootstrap
Цитата:
I18n::lang('ru');


Разбитие языковых файлов на части:
1 способ: Если Вы строите систему из модулей, то просто пропишите нужные переводы в I18n папке модулей , тогда данные языковые настройки будут доступны при подключении в bootstrap.
2 способ: Вызываем функцию как:
Код:
__('Hello, world!', array(), 'ru_home');
или
__('Hello, :user', array(':user' => 'WinterSilence'), 'ru_catalog' );

где ru_home и ru_catalog имена языковый файлов т.е. application/i18/ru_home.php и ru_catalog.php
при использовании тире в имени
Код:
__('Hello, world!', array(), 'ru-test-home');

файл будет находится в поддиректории application/i18/ru/test/home.php

Вот мой код переопределенного класса, основная фишка в упрощении перевода скрипта за счет авто генерации языковых файлов
Код:
<?php defined('SYSPATH') or die('No direct script access.');

class I18n extends Kohana_I18n
{
   public static function get( $string, $lang = NULL )
   {
      if( !$lang )
      {
         $lang = I18n::$lang;
      }
      $table = I18n::load($lang);
      if( isset($table[$string]) )
      {
         $string = $table[$string];
      }
      /*
      Если скрипт на этапе разработки, то все не переведенные строки будут добавляться в отдельный языковой файл,
      например в моем случае application/i18n/ru_need_translated.php.
      Это значительно облегчит дальнейшую локализацию скрипта.
      */
      elseif( Kohana::$environment == Kohana::DEVELOPMENT )
      {
         $file = $lang.'_need_translated';
         $path = APPPATH .'i18n' . DIRECTORY_SEPARATOR . $file . EXT;
         $table = Kohana::load($path);
         $table[$string] = ' ';
         $text = '<?php defined(\'SYSPATH\') or die(\'No direct script access.\'); return ' . var_export($table, TRUE) . ';';
         @file_put_contents($path, $text);
      }
      return $string;
   }
}
 
function __( $string, array $values = NULL, $lang = NULL, $translate_values = FALSE )
{
   if( $lang !== I18n::$lang )
   {
      $string = I18n::get($string);
      // Если задан атрибут $translate_values, то переводим и значения подставляемого массива
      if( !empty($values) && $translate_values )
      {
         foreach( $values as $key => $val )
         {
            $values[$key] = I18n::get($val);
         }
      }
   }
   return empty($values) ? $string : strtr($string, $values);
}

также позднее попалось аналогичное решение от butschster
https://github.com/butschster/kohana-i18n-generator-translations/blob/master/classes/i18n.php

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Файлы перевода
СообщениеДобавлено: 03 апр 2013, 04:59 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
WinterSilence писал(а):
не кошерное у функции название кстати ))

обоснуйте

Цитата:
также не совсем понятно зачем переопределять класс I18n, если __() не его метод, а отдельная функция,..
можно файл с функцией например можно вставить и в bootstrap.

Можно машку за ляшку. Если охота попороть чепуху, отправляйтесь в другое место

Цитата:
Еще забыли осветить задание языка в bootstrap

Это делается в ядре вашего проекта, в специально ненаписанном вами методе, который проверяет региональные настройки браузера, кукисы, IP-регион и прочее а не в файле bootstrap.php. Если вы чего то не знаете, лучше спросите

Цитата:
Если Вы строите систему из модулей, то просто пропишите нужные переводы в I18n папке модулей , тогда данные языковые настройки будут доступны при подключении в bootstrap.

Да ну? ;) Name для модуля Projects вы скорее всего переведёте как Название, а для модуля Users как Имя. Не так ли?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Файлы перевода
СообщениеДобавлено: 03 апр 2013, 12:27 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
Sergey> не красиво себя ведете, аргументируйте без хамства.

Цитата:
обоснуйте

да в цитате все обосновано вроде

Цитата:
Можно машку за ляшку. Если охота попороть чепуху, отправляйтесь в другое место

в чем именно я ошибся?

Цитата:
Еще забыли осветить задание языка в bootstrap

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

Цитата:
а ну? ;) Name для модуля Projects вы скорее всего переведёте как Название, а для модуля Users как Имя. Не так ли?

так, а почему при размещении в modules/../i18n/.. подобное невозможно?

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group