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

Файлы перевода
http://forum.kohanaframework.su/viewtopic.php?f=19&t=139
Страница 1 из 1

Автор:  admin [ 22 апр 2012, 16:40 ]
Заголовок сообщения:  Файлы перевода

Перевод раздела "Translation Files" (Файлы перевода) официальной документации Kohana
http://kohanaframework.su/guide/translation_files

Автор:  WinterSilence [ 02 апр 2013, 22:25 ]
Заголовок сообщения:  Re: Файлы перевода

Цитата:
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

Автор:  Sergey [ 03 апр 2013, 04:59 ]
Заголовок сообщения:  Re: Файлы перевода

WinterSilence писал(а):
не кошерное у функции название кстати ))

обоснуйте

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

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

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

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

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

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

Автор:  WinterSilence [ 03 апр 2013, 12:27 ]
Заголовок сообщения:  Re: Файлы перевода

Sergey> не красиво себя ведете, аргументируйте без хамства.

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

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

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

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

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

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

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

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

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