Перейти к содержанию
Форум поддержки пользователей VamShop

Файлы локализации


Гость Евгений

Рекомендуемые сообщения

В чем +/- использования смешанной локализации движка ... через smarty и через php константы?

Почему нельзя убрать файл lang_*.conf и закинуть все его содержимое в отдельный php файл?

В шаблоне просто будет по-другому вызываться строчки локализаций

Ссылка на сообщение
Поделиться на другие сайты

Текст из conf файлов используется в html шаблонах.

Текст из php файлов используется в php файлах.

Просто у смарти есть механизм conf файлов, вот он и используется для локализации данных в шаблонах.

Ссылка на сообщение
Поделиться на другие сайты

Я делал локализацию полностью на XML файлах, для пробы.

Но мне не понравилась скорость, с которой обрабатываются XML файлы, магазин загружался на не оригинальном языке (языке по умолчанию) на 2 секунды дольше, чем с таким вариантов как сейчас.

Пока что остаётся как есть.

Ссылка на сообщение
Поделиться на другие сайты

В некоторых CMS видел, что локализация задается не с помощью констант, а с помощью массива.

Рассматривал такой вариант?

Вот такого вида:

это в OOS:

$lang['text_no_products'] = 'There are no products to list in this category.';

$lang['text_no_products2'] = 'There is no product available from this manufacturer.';

$lang['text_number_of_products'] = 'Number of Products: ';

$lang['text_show'] = '<b>Show:</b>';

$lang['text_buy'] = 'Buy 1 \'';

$lang['text_now'] = '\' now';

$lang['text_all'] = 'All';

В DLE:

$lang = array (

'charset' => "windows-1251",

// 6.5

'time_heute' => "Сегодня",

'time_gestern' => "Вчера",

'thumb_expandtitle' => "Развернуть до полного размера",

'thumb_restore' => "Кликните для закрытия картинки, нажмите и удерживайте для перемещения",

'thumb_focustitle' => "Сфокусировать",

'thumb_cancel' => "Нажмите для отмены",

'all_user_news' => "Просмотреть все публикации",

'show_user_news' => "Все публикации пользователя",

'menu_fnews' => "Найти все публикации",

'reg_next' => "Продолжить регистрацию на сайте",

'xf_not_notig' => "необязательно",

}

В Joomla так же через константы.

В prestashop вообще вот так:

global $_FIELDS;

$_FIELDS = array();

$_FIELDS['Address_71581233bcc121fcc409ecce9317fbde] = 'customer ID';

$_FIELDS['Address_98305bfa557ba2547e7de1fb77053c93'] = 'manufacturer ID';

$_FIELDS['Address_ad8a1593fb8fbba0eb0f9dba0e51e7f1'] = 'supplier ID';

$_FIELDS['Address_e42112710fe4f0cf86411aabc028e7d9'] = 'country ID';

$_FIELDS['Address_81e70cb16ec45f5ab19bb6638e8e6c2d'] = 'address (1)';

$_FIELDS['Address_f669f8e9f6599d0dfcd613bc6e2f347e'] = 'address (2)';

$_FIELDS['Address_2df2ca5cf808744c2977e4073f6b59c8'] = 'mobile phone';

$_FIELDS['Attribute_7b45130ec39fb910fdc94eab007b1e76'] = 'attribute groupe ID';

$_FIELDS['AttributeGroup_161b4814c78bb4d03d3c140d66031c93'] = 'public name';

В bitrix как и в OOS:

$MESS ['BC_BLOG_VAR] = "Имя переменной для идентификатора блога";

$MESS ['BC_POST_VAR'] = "Имя переменной для идентификатора сообщения блога";

$MESS ['BC_USER_VAR'] = "Имя переменной для идентификатора пользователя блога";

$MESS ['BC_PAGE_VAR'] = "Имя переменной для страницы";

$MESS ['BC_GROUP_VAR'] = "Имя переменной для идентификатора группы блога";

$MESS ['BC_CACHE_TIME_LONG'] = "Время кэширования остальных страниц";

И есть еще один вариант - хранить локализации в бд.

И непонятно какой из способов лучше.

Ссылка на сообщение
Поделиться на другие сайты

Мне вообще не нравится такой подход.

Мне нравится локализация по типу gettext.

Когда просто используется текст, тогда при отсутствии переводов всё нормально будет отображаться, а не просто TEXT константа например.

Вобщем, как в magento, у них тоже сделан так перевод.

В принципе именно так я и делал с помощью XML, но скорость не понравилась.

Попробую как-нибудь для хранения переводом использовать на xml файлы, а просто текстовые файлы типа csv, что б не уходило время на разбор xml.

Ссылка на сообщение
Поделиться на другие сайты

Мне просто нравится когда текст в файле или в шаблоне выглядить текстом, а не как $my_text к примеру и затем подгружается из языкового файла.

Это не очень красиво выглядит.

А вот когда в шаблоне например обычный текст, но, допустим в сбобках [[My Text]], так гораздо читабельнее.

Опять же, на мой вкус.

Ссылка на сообщение
Поделиться на другие сайты

Так почему так не сделал?

Вопрос стоит в каком виде хранить информацию о лакализации.

А выдавать можно в любом виде

[[name]] или {$name} или {NAME} 

Ссылка на сообщение
Поделиться на другие сайты

Я ж говорю, скорость обработки переводов в XML файлах медленная слишком.

А обычными текстовыми файлами пока сделать не получилось.

Ссылка на сообщение
Поделиться на другие сайты

Это всё равно вывод переменной, а не текста, логичнее сразу текст показывать.

Вобщем, как в gettext

Ссылка на сообщение
Поделиться на другие сайты

Это всё равно вывод переменной, а не текста, логичнее сразу текст показывать.

Вобщем, как в gettext

А если так

Языковой файл допустим будет выглядеть так:

<?php

$lang['lang'] = 'язык';

?>

Функция для возвращения языковой строчки:

function _($value)

{

    if(isset($lang[$value]))

    {

        return $lang[$value];

    }

    else

    {

        return $value;

    }

}

а уже в коде будет использоваться вот так:

_('lang');

выведет 'язык', а если не будет строчки $lang['lang'] = 'язык'; в языковом файле - выведет просто lang.

Ссылка на сообщение
Поделиться на другие сайты

короче в shopos переделываю на ассоциативных массивах языковые файлы.

может тебе понравится и тоже так сделаешь)))

//в инсталяторе передел .. думаю делать дальше или нет(

Ссылка на сообщение
Поделиться на другие сайты

Это по сути тоже самое, что есть сейчас, "шило на мыло", что называется.

Лично мне нравится когда код читабельный, а не типа:


_('lang') _('lang1') _('lang2')
[/code] Например для заголовка бокса какого-то:
[code]
[[Shopping Cart]]
А в файле локализации будет:

Shopping Cart;Корзина
[/code]

или как-то так примерно.

Но я ж говорю, это дело вкуса.

При открытии магазина на русском будет выведено Корзина.

При открытии магазина на английском будет Shopping Cart.

При открытии на любом другом добавленном в магазин языке будет также выведен нормальный читаемый текст Shopping Cart.

Во всяком случае у меня именно так и было сделано, правда на xml файлах.

Попробую на csv сделать теперь, надеюсь, что быстрее обрабатываться будет.

Ссылка на сообщение
Поделиться на другие сайты

Можно задавать в качестве ключа строчку из нескольких слов:

$lang['shopping cart'] = 'Корзина';

_('Shopping Cart');

Вот кусок кода, что получилось:

<div class="button1-right"><div class="prev"><a href="index.php" alt="<?php _('Back');?>"><?php _('Back');?></a></div></div>

<div class="button1-left"><div class="next"><a href="6.php" alt="<?php _('Continue'); ?>"><?php _('Continue');?></a></div></div>

<?php echo lang_menu(); ?>

</div>

<span class="step"><?php _('Title step5'); ?></span>

</div>

  $error = false;

      if (strlen($firstname) < __('entry first name min length'))

  {

         $error = true;

         $messageStack->add('step6', __('entry first name error'));

      }

      if (strlen($lastname) < __('entry last name min length'))

  {

         $error = true;

         $messageStack->add('step6', __('entry last name error'));

      }

      if (strlen($email_address) < __('entry email address min length'))

  {

         $error = true;

         $messageStack->add('step6', __('entry email address error'));

      }

  elseif (os_validate_email($email_address) == false)

  {

         $error = true;

         $messageStack->add('step6', __('entry email address check error'));

      } 

      if (strlen($street_address) < __('entry street address min length'))

  {

         $error = true;

         $messageStack->add('step6', __('entry street address error'));

      }

      if (strlen($postcode) < __('entry postcode min length'))

  {

         $error = true;

         $messageStack->add('step6', __('entry post code error'));

      }

      if (strlen($city) < __('entry city min length'))

  {

         $error = true;

         $messageStack->add('step6', __('entry city error'));

      }

Мне каежется не так и плохо выглядит.

Неплохо будет работать если в качестве ключа указана небольшая строчка текста, а если задано целое предложение, то могут возникнуть проблемы со скоростью скорее всего как и в gettext.

Ссылка на сообщение
Поделиться на другие сайты

Так а в чём смысл делать как ты говоришь, именно так сейчас и сделано.

Только define используется, менять по-новой тоже самое делать всё равно нет смысла.

Ссылка на сообщение
Поделиться на другие сайты

По сути если не будет в локализации перевода Continue ..  _('Continue');  то выведет Continue а не что то типа TEXT_CONTINUE.

Сам себя еще не убедил что такой вариант лучше.

Просто прорабатываю разные варианты.

Пока что как альтернатива - не плохой вариант. А для полной замены нужно что то еще придумать.

Ссылка на сообщение
Поделиться на другие сайты
×
×
  • Создать...