Гость Евгений Опубликовано 21 января, 2009 Жалоба Share Опубликовано 21 января, 2009 В чем +/- использования смешанной локализации движка ... через smarty и через php константы? Почему нельзя убрать файл lang_*.conf и закинуть все его содержимое в отдельный php файл? В шаблоне просто будет по-другому вызываться строчки локализаций Ссылка на сообщение Поделиться на другие сайты
Гость Евгений Опубликовано 21 января, 2009 Жалоба Share Опубликовано 21 января, 2009 Или все дело в уменьшении читатаемости кода шаблона? Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 21 января, 2009 Жалоба Share Опубликовано 21 января, 2009 Текст из conf файлов используется в html шаблонах. Текст из php файлов используется в php файлах. Просто у смарти есть механизм conf файлов, вот он и используется для локализации данных в шаблонах. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 21 января, 2009 Жалоба Share Опубликовано 21 января, 2009 Я делал локализацию полностью на XML файлах, для пробы. Но мне не понравилась скорость, с которой обрабатываются XML файлы, магазин загружался на не оригинальном языке (языке по умолчанию) на 2 секунды дольше, чем с таким вариантов как сейчас. Пока что остаётся как есть. Ссылка на сообщение Поделиться на другие сайты
Гость Евгений Опубликовано 21 января, 2009 Жалоба Share Опубликовано 21 января, 2009 В некоторых 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'] = "Время кэширования остальных страниц"; И есть еще один вариант - хранить локализации в бд. И непонятно какой из способов лучше. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 21 января, 2009 Жалоба Share Опубликовано 21 января, 2009 Мне вообще не нравится такой подход. Мне нравится локализация по типу gettext. Когда просто используется текст, тогда при отсутствии переводов всё нормально будет отображаться, а не просто TEXT константа например. Вобщем, как в magento, у них тоже сделан так перевод. В принципе именно так я и делал с помощью XML, но скорость не понравилась. Попробую как-нибудь для хранения переводом использовать на xml файлы, а просто текстовые файлы типа csv, что б не уходило время на разбор xml. Ссылка на сообщение Поделиться на другие сайты
Гость Евгений Опубликовано 21 января, 2009 Жалоба Share Опубликовано 21 января, 2009 так парсинг csv все равно будет занимать в разы больше времени чем просто подключение php файла. Ссылка на сообщение Поделиться на другие сайты
Гость Евгений Опубликовано 21 января, 2009 Жалоба Share Опубликовано 21 января, 2009 а в чем плюсы csv ... то, что файлы локализации можно будет редактировать в экселе? Или из за простоты парсинга? Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 22 января, 2009 Жалоба Share Опубликовано 22 января, 2009 Мне просто нравится когда текст в файле или в шаблоне выглядить текстом, а не как $my_text к примеру и затем подгружается из языкового файла. Это не очень красиво выглядит. А вот когда в шаблоне например обычный текст, но, допустим в сбобках [[My Text]], так гораздо читабельнее. Опять же, на мой вкус. Ссылка на сообщение Поделиться на другие сайты
Гость Евгений Опубликовано 22 января, 2009 Жалоба Share Опубликовано 22 января, 2009 Так почему так не сделал? Вопрос стоит в каком виде хранить информацию о лакализации. А выдавать можно в любом виде [[name]] или {$name} или {NAME} Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 22 января, 2009 Жалоба Share Опубликовано 22 января, 2009 Я ж говорю, скорость обработки переводов в XML файлах медленная слишком. А обычными текстовыми файлами пока сделать не получилось. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 22 января, 2009 Жалоба Share Опубликовано 22 января, 2009 Это всё равно вывод переменной, а не текста, логичнее сразу текст показывать. Вобщем, как в gettext Ссылка на сообщение Поделиться на другие сайты
Гость Евгений Опубликовано 22 января, 2009 Жалоба Share Опубликовано 22 января, 2009 Это всё равно вывод переменной, а не текста, логичнее сразу текст показывать.Вобщем, как в gettext А если так Языковой файл допустим будет выглядеть так: <?php $lang['lang'] = 'язык'; ?> Функция для возвращения языковой строчки: function _($value) { if(isset($lang[$value])) { return $lang[$value]; } else { return $value; } } а уже в коде будет использоваться вот так: _('lang'); выведет 'язык', а если не будет строчки $lang['lang'] = 'язык'; в языковом файле - выведет просто lang. Ссылка на сообщение Поделиться на другие сайты
Гость Евгений Опубликовано 22 января, 2009 Жалоба Share Опубликовано 22 января, 2009 ну а в самом smarty можно привести к любому виду. Ссылка на сообщение Поделиться на другие сайты
Гость Евгений Опубликовано 22 января, 2009 Жалоба Share Опубликовано 22 января, 2009 короче в shopos переделываю на ассоциативных массивах языковые файлы. может тебе понравится и тоже так сделаешь))) //в инсталяторе передел .. думаю делать дальше или нет( Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 23 января, 2009 Жалоба Share Опубликовано 23 января, 2009 Это по сути тоже самое, что есть сейчас, "шило на мыло", что называется. Лично мне нравится когда код читабельный, а не типа: _('lang') _('lang1') _('lang2')[/code] Например для заголовка бокса какого-то: [code][[Shopping Cart]] А в файле локализации будет: Shopping Cart;Корзина[/code]или как-то так примерно.Но я ж говорю, это дело вкуса.При открытии магазина на русском будет выведено Корзина.При открытии магазина на английском будет Shopping Cart.При открытии на любом другом добавленном в магазин языке будет также выведен нормальный читаемый текст Shopping Cart.Во всяком случае у меня именно так и было сделано, правда на xml файлах.Попробую на csv сделать теперь, надеюсь, что быстрее обрабатываться будет. Ссылка на сообщение Поделиться на другие сайты
Гость Евгений Опубликовано 23 января, 2009 Жалоба Share Опубликовано 23 января, 2009 Можно задавать в качестве ключа строчку из нескольких слов: $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. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 23 января, 2009 Жалоба Share Опубликовано 23 января, 2009 Ну я ж говорю, дело вкуса. Мне нравится больше когда целы предложения. Ссылка на сообщение Поделиться на другие сайты
Гость Евгений Опубликовано 23 января, 2009 Жалоба Share Опубликовано 23 января, 2009 Ну так оно будет тормозить, потому что сравнивать пару слов гораздо проще чем целые предложения/тексты. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 23 января, 2009 Жалоба Share Опубликовано 23 января, 2009 Так а в чём смысл делать как ты говоришь, именно так сейчас и сделано. Только define используется, менять по-новой тоже самое делать всё равно нет смысла. Ссылка на сообщение Поделиться на другие сайты
Гость Евгений Опубликовано 23 января, 2009 Жалоба Share Опубликовано 23 января, 2009 По сути если не будет в локализации перевода Continue .. _('Continue'); то выведет Continue а не что то типа TEXT_CONTINUE. Сам себя еще не убедил что такой вариант лучше. Просто прорабатываю разные варианты. Пока что как альтернатива - не плохой вариант. А для полной замены нужно что то еще придумать. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 23 января, 2009 Жалоба Share Опубликовано 23 января, 2009 Понятно. Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения