Pull to refresh

Comments 29

В плагинах FireFox именно так локализация и происходит.
А как вы поступаете, если нужно локализовать что-то более сложное, например: «в этой теме содержится 5 сообщений, 3 из которых новые»? Если хранить локализации в xml, а не entity, то такое легко решается. А как в вашем случае?
Хороший вопрос :) Я в таких случаях разбиваю фразу на несколько частей. Это, пожалуй, самый главный минус :(
Xsl потом некрасивый становится от такого. И замена фразы может обернуться заменой шаблонов ;)
А нельзя ли в сущность вставить какие-либо спецметки, типа «В этой теме всего __msgs_num__ сообщений», а потом сделать что-то типа str_replace?
str_replace в xsl конечно возможен, но, как бы, через одно место :)
str_replace в xsl конечно возможен, но, как бы, через одно место :)
str_replace в xsl конечно возможен, но, как бы, через одно место :) У него другая философия
str_replace в xsl конечно возможен, но, как бы, через одно место :) У него другая философия.
Учитывайте, что «сообщений» должно изменяться, в зависимости от значения __msgs_num__.
С другой стороны, это можно решить через вызов именованного шаблона, передав в качестве изменяемых форм те же самые ENTITIES (в этом обсуждении выкладывал решение для xslt)
Идея не нова. Хотя, широко озвучивают ее редко ;-)
С 2001 года Acronis поддерживают локализацию своих международных сайтов на подобном механизме. Только с «расширенными» возможностями -)

Например, вы можете использовать сущность вложенную в сущность, а-ля:

Но в таком виде не очень удобно локализовать и редактировать большое кол-во информации.
Удобно, когда информация иерархически структурирована по различным признакам, например, общие фразы, тексты относящиеся к определенной части сайта или функциональности, или же определенные значения (вроде констант) не обязательно текстовые.

Например, вы можете разделять «уровни» через точку:

Обидно, хабр съедает теги… забыл про это… Ведь не сложно же сделать, чтобы они не херились, не айс за это хабру -(

P.S. С иерархическими сущностями делается вполне удобная веб-система (интерфейс) для локализации. Так более понятен контекст применения фразы. А расширив сущность аттрибутами, такими как комментарий (от создателя для чего эта фраза и где она будет применена), автор, даты создания/редактирования и прочее, строится развитая система локализации.
Приделывается и версионность, но это уже не через аттрибуты. Вариантов много.

P.P.S. Работать со всем этим все равно удобнее (и много быстрее), если данные лежат в БД, а не в файле. Хотя можно легко переность данные из XML в БД и наоборот.
Обидно, хабр вырезает теги, зыбыл… :( Не айс, а ведь сделать не сложно.

P.S. К иерархически организованной информации добавляется удобный веб-интерфейс и локализация становится простым рутинным процессом, работой для обычных переводчиков. Используя аттрибуты, можно добавить комментарий к фразе, чтобы было понятно где, в каком контексте она применяется, автора, дату редактирования и т.п. Не сложно добавляется и версионность.
Вариантов много.

P.P.S. Кроме фраз для перевода можно сущности использовать как хранилища констант/параметров для разных сайтов или сред, где они будут использоваться.

P.P.P.S. Добавьте этот механизм в ваш парсер и получится мощная система с автоматической локализацией сайтов. А добавив логические управляющие методы, сайты смогут отличаться не только переводом, но и структурой.
Странно, предыдущий ответ исчезал… специально проверял и расстраивался, переписывал.
А в итоге их два… глюки. И только заметил что хабр выдает сообщение, что да, какая-то проблема… Ну ладно, всякое бывает.
одна фраза «возникает проблема, которую, казалось бы, решить никак — привязка к домену» портит всё впечатление.
или относительные ссылки "/lang.php" отменили?
Для того, чтобы сработал скрипт lang.php, надо его запустить. Если вызвать его с помощью относительнjq ссылки, то он не сработает. Попробуйте сами :)
вот не скажу за дтд, но хсл(т) файлы прекрасно подгружаются.
надо попробовать, ради интереса. вот форму допишу и попробую
ха. я уже и забыл, как сам с этой фишкой парился.
имеется какой-то глюк в браузерных хслт-процессорах, они не подхватывают ссылки на любые внешние дтд и схемы. и это не зависит от типа ссылки. в чём глюк — разбираться подробно не стал. просто пожалел о невозможности схем и перешёл к другим решениям.
а вы, как я понял, парсите хслтшные файлы? ;)
хинт: можно было не городить огорода со стримврапперами и просто парсить файлы.
Спасибо, очень вовремя статья написана, как раз сейчас пишу проект где нужна локализация XSL. Сам дошел до того что написал функцию translate которая подгружает XML с переводами и вытягивает нужный элемент.
Использовал этот прием в одном из проектов, хорошее решение.
Уважаемые, порекомендуйте, что можно почитать по локализации в ASP.NET? Спасибо!
кто подскажет?
делаю так

<?xml version=«1.0» encoding=«UTF-8»?>
<!DOCTYPE xsl:stylesheet [
<!ENTITY nbsp " ">
<!ENTITY d "ä">
<!ENTITY auml "ä">
<!ENTITY ouml "ö">
<!ENTITY Auml "Ä">
<!ENTITY Ouml "Ö">
<!ENTITY bull "•">
<!ENTITY szlig "ß">
<!ENTITY copy "©">
<!ENTITY Uuml "Ü">
<!ENTITY uuml "ü">
<!ENTITY lt "<">
<!ENTITY gt ">">
<!ENTITY amp "&">
]>
<xsl:stylesheet version=«1.0» xmlns:xsl=«www.w3.org/1999/XSL/Transform»>
<xsl:output method=«html» omit-xml-declaration=«yes» indent=«no»/>


©…


</xsl:stylesheet>

перестает ругаться на сущности   и © в шаблоне но ничего на их месте не выводит…
что может быть?
сори за предыдущий вопрос

кто подскажет?
делаю так

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [
<!ENTITY nbsp       " ">
<!ENTITY d         "ä">
<!ENTITY auml       "ä">
<!ENTITY ouml       "ö">
<!ENTITY Auml       "Ä">
<!ENTITY Ouml       "Ö">
<!ENTITY bull       "•">
<!ENTITY szlig       "ß">
<!ENTITY copy       "©">
<!ENTITY Uuml       "Ü">
<!ENTITY uuml       "ü">
<!ENTITY lt       "<">
<!ENTITY gt       ">">
<!ENTITY amp       "&">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="www.w3.org/1999/XSL/Transform">
<xsl:output method="html" omit-xml-declaration="yes" indent="no"/>
...
...
<div>© ......</div>
...
...
</xsl:stylesheet>

перестает ругаться на сущности   и © в шаблоне но ничего на их месте не выводит...
что может быть?


* This source code was highlighted with Source Code Highlighter.
дико извеняюсь, но никак не думал что наш любимый хабр делает двойное преобразование сущностей…
из-за которого мой вопрос выглядит нелепо, зато теперь пользуюсь предпросмотром :)

кто подскажет?
делаю так

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [
<!ENTITY nbsp       " ">
<!ENTITY d         "ä">
<!ENTITY auml       "ä">
<!ENTITY ouml       "ö">
<!ENTITY Auml       "Ä">
<!ENTITY Ouml       "Ö">
<!ENTITY bull       "•">
<!ENTITY szlig       "ß">
<!ENTITY copy       "©">
<!ENTITY Uuml       "Ü">
<!ENTITY uuml       "ü">
<!ENTITY lt       "<">
<!ENTITY gt       ">">
<!ENTITY amp       "&">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="www.w3.org/1999/XSL/Transform">
<xsl:output method="html" omit-xml-declaration="yes" indent="no"/>
...
...
<div>© ......</div>
...
...
</xsl:stylesheet>

перестает ругаться на сущности   и © в шаблоне но ничего на их месте не выводит...
что может быть?


* This source code was highlighted with Source Code Highlighter.
кто подскажет — почему предпросмотр отличается от выводимого результата????
Если польщуетесь PHP, то разрешите в DOMDocument свои сущности:
$xsl = new DOMDocument;
$xsl->substituteEntities = true;
$xsl->resolveExternals = true;
СПАСИБО!

то что доктор прописал!!!
Sign up to leave a comment.

Articles