Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Локализация и кодировка системы 
:(
    Опции темы
Wowa
Дата 4.9.2006, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Цитата(IZ@TOP @  4.9.2006,  18:48 Найти цитируемый пост)
К сожалению это невозможно - если мы будем весь XSL отдавать пользователю для трансформаии на стороне клиента.

Почему? Можно XSLT ведь динамически генерировать?
PM WWW   Вверх
sergejzr
Дата 4.9.2006, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Цитата(IZ@TOP @  25.6.2005,  14:14 Найти цитируемый пост)
Wowa, так. В общем будет так: или будем генерировать XML из РНР кода файлов локализации, либо подгружать отдельный XML файл, который будет обрабатываться XSL шаблоном, либо на сервере либо на клиенте (в большинстве случаев это будет наверняка второй вариант). Хотя конечно по такому принципу, XML траффику будет идти больше скорее всего. Но иначе смысла использовать XSL в качестве темлейтера я не вижу... 

Я делал локализацию для форума на яве. Мне вариант с ХМЛ очень понравился. Ставим в заголовке время жизни файла на бесконечность и клиент его подгрузит один раз в жизни. Трафф и рессурсы экономятся весьма. В таком случае нам по большому счёту пофиг на кодировку и можем(те) делать спокойно УТФ-8, не беспокоясь за трафф. (это естесственно не относится к файлам сгенеренным на сервере, но таких случаев будет ничтожно мало.)

Цитата(IZ@TOP @  4.9.2006,  16:03 Найти цитируемый пост)
Wowa, иных вариантов для подстановки данных я незнаю. К тому же читабельность кода от этого как мне кажется не сильно пострадает. 

Я в своём варианте просто упростил это. Существует фаил core.xsl, который содержит все необходимые функции и подгружается ко всем xslям (кстати механизм подгрузки я там тоже разработал  и не забываем, что этот файл тоже кэшируется!) вот примерно как будет переводится слово:

Код

<a href="showall.php"><xsl:apply-templates  select="$maindictionary[@id='showall_forums']"/></a> 


А сам словарь грузится так:
Код

<xsl:variable name="maindictionary" select="document(concat(concat('../../../lang/',/board//@lang),concat(concat('/lang_',/board//@act),'.xml')))//term" />

Для этого естественно в сгенеренном  xml передаётся переменная- название файла для перевода остальное скрипт сам сделает.


ПС:
Вообще, я когда им занимался, много интересных вещей сделал. Жалко, что времени сейчас нет smile

Добавлено @ 23:57 
Сам файл - словарь
Код

<?xml version="1.0" encoding="windows-1251"?>
<dict>
<term id="lastnews" word="Последние новости" />
<term id="showall_forums" word="Показать все форумы" />
<term id="forum_visibility_preferences" word="Настройка отображения форумов" />
<term id="administration" word="Администрация" />
<term id="active_topics" word="active_topics" />
<term id="10 best authors today" word="10 авторов сегодня" />
<term id="10 best authors ever" word="Лучшие 10 авторов" />
<term id="Forum statistics" word="Статистика форума" />
</dict>


Позже напишу, как в ХМЛ вставлять переменную, чтобы правйный словарь грузить

Добавлено @ 00:01 
Код

<?xml version="1.0" encoding="windows-1251"?>
<?xml-stylesheet type="text/xsl" href="./skins/1/xslt/idx.xsl"?>
<board  act="idx" lang="russian"  bordtitle="title"cssstyle="./skins/1/css/">
<lang id="curlang" value="russian" />
<user currentuser="true" />
<modul>
<!-- Здесь в принципе и будут все необходимые для отображения страницы переменные -->
</modul>
<footer generationtime="235" dbactions="0"/>
</board>



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Sardar
Дата 5.9.2006, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



sergej.z, одна проблема - это тот же gettext, но в XML. Благодаря xInclude можно инцлюдить необходимые строки, но это по прежнему статика. А как сделать:
Код
У Вас в ящике 10 не прочитанных писем
У Вас в ящике 1 не прочитанное письмо
Свежих писем нет

Для строки в окошке с новыми сообшениями?

Сделал переводчик, умеет форматировать выражения, началось как нечто универсальное, но в итоге для выражений использую PHP. На входе XML, который компилиться в PHP (сохраняеться в кеше пока исходник не измениться), работает шустро, но идеологически не "совершенство". Пример date.ru.xlp:

Код
<?xml version="1.0" encoding="UTF-8"?>
<package language="ru">
    <meta>
        <info key="author">Sardar</info>
        <info key="date">2006/01/05</info>
    </meta>
    <magic>
        <object name="months">
            <arguments>

                <argument type="integer" name="month" />
            </arguments>
            <body>
                <branch>
                    <case on="$month == 1"><echo>Января</echo></case>
                    <case on="$month == 2"><echo>Февраля</echo></case>
                    <case on="$month == 3"><echo>Марта</echo></case>

                    <case on="$month == 4"><echo>Апреля</echo></case>
                    <case on="$month == 5"><echo>Мая</echo></case>
                    <case on="$month == 6"><echo>Июня</echo></case>
                    <case on="$month == 7"><echo>Июля</echo></case>
                    <case on="$month == 8"><echo>Августа</echo></case>
                    <case on="$month == 9"><echo>Сентября</echo></case>

                    <case on="$month == 10"><echo>Октября</echo></case>
                    <case on="$month == 11"><echo>Ноября</echo></case>
                    <case on="$month == 12"><echo>Декабря</echo></case>
                    <case on="true"><error>Unknown month argument</error></case>
                </branch>
            </body>

        </object>
        
        <object name="date-medium">
        <!-- Форматирование даты, где есть число, месяц словом и год -->
            <arguments>
                <argument type="integer" name="day" />
                <argument type="integer" name="month" />
                <argument type="integer" name="year" />
            </arguments>
            <body>

                <expression>$day</expression>
                <echo> </echo>
                <invoke object="months">
                    <argument>$month</argument>
                </invoke>
                <echo> </echo>
                <expression>$year</expression>

                <echo> г.</echo>
            </body>
        </object>
    </magic>
</package>


Писал ещё в прошлом году, будет время доработаю. В идеале языковой пакет должен быть кратким, менее "имеративным" и заточенным именно под форматирование (я не лингвист, ориентируюсь на русский/английский/голландский).


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Wowa
Дата 5.9.2006, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Цитата(Sardar @  4.9.2006,  23:22 Найти цитируемый пост)
А как сделать:

А так делать не надо smile Вполне можно обойтись: "Непрочитанных писем: 0(1, 2....)". И так имхо всегда - можно найти замену. Зачем себя нагружать на пустом месте? smile
PM WWW   Вверх
sergejzr
Дата 5.9.2006, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Вот, состряпал статический вариант. Распаковываем, открываем index.xml  и пляшем оттуда. Работает только страница логина. Какие данные введёте - пофиг. Главное - поиграйте со страницей, посмотрите исходники smile. Мне лично очень понравилось, как получилось. Особенно обратите внимание на размер файлов ХМЛ smile (Например для страницы с логином)

Цитата(Sardar @  4.9.2006,  22:22 Найти цитируемый пост)
Для строки в окошке с новыми сообшениями?

Там в  afterlogin.xml Попробуй поменять в нём параметр  mails. Думаю, без проблем разберёшься, а ро я там тонкостей уже не помню. Полгода прошло.. На крайняк для первых 10 значений для всех языков дифференциировать..

Добавлено @ 01:10 
Цитата(Wowa @  4.9.2006,  22:54 Найти цитируемый пост)
А так делать не надо smile Вполне можно обойтись: "Непрочитанных писем: 0(1, 2....)". И так имхо всегда - можно найти замену. Зачем себя нагружать на пустом месте? smile 

В принципе согласен, но ведь нет предела совершенству smile)))

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  localisation_static.zip 44,10 Kb


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
IZ@TOP
Дата 5.9.2006, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: нет
Всего: 73



Цитата(sergej.z @  5.9.2006,  00:50 Найти цитируемый пост)
Я делал локализацию для форума на яве. Мне вариант с ХМЛ очень понравился. Ставим в заголовке время жизни файла на бесконечность и клиент его подгрузит один раз в жизни. 

Собственно именно это нам и нужно. Большие заморочки нам наверное не сильно нужны, ну а если и понядобятся, то добавить всякие лингвистические проверки будет не сложно в самой логике шаблона.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Sardar
Дата 5.9.2006, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Цитата(Wowa @  4.9.2006,  23:54 Найти цитируемый пост)
Вполне можно обойтись:

Продукт отличаеться от хорошего продукта мелочами smile

Цитата(Wowa @  4.9.2006,  23:54 Найти цитируемый пост)
Зачем себя нагружать на пустом месте?

По сути выделить минимум операций необходимых для построения и форматирования строки, затем это собираеться автоматом в PHP, который перестраиваеться как только перестроился языковой пакет. Также устроены все шаблонизаторы с "компиляцией в PHP", это не кажеться чем то особо сложным или навороченным ведь? smile

Цитата(sergej.z @  5.9.2006,  00:09 Найти цитируемый пост)
На крайняк для первых 10 значений для всех языков дифференциировать..

Цитата(sergej.z @  5.9.2006,  00:09 Найти цитируемый пост)
Попробуй поменять в нём параметр  mails

С одной стороны не реюзабельно, положить подобное в отдельный языковой пакет позволит держать некую либу форматирования, например для дат и не зависить от системной локали. Также можно будет делать общий .xsl шаблон для всех языков (единая шкурка), что ИМХО удобно. С другой стороны если скзать честно, почти все мои остальные языковые пакеты содержат только статику...  smile  а когда оно в шаблоне, то выглядит логично, сам шаблон разбиваем по модулям, но получиться отдельный скин для каждого языка, а добавление языка будет сложным, нужно отследить все строки...

sergej.z, ещё не переубедил, но смутил smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
IZ@TOP
Дата 5.9.2006, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: нет
Всего: 73



Цитата(Sardar @  5.9.2006,  12:26 Найти цитируемый пост)
С одной стороны не реюзабельно, положить подобное в отдельный языковой пакет позволит держать некую либу форматирования, например для дат и не зависить от системной локали. Также можно будет делать общий .xsl шаблон для всех языков (единая шкурка), что ИМХО удобно. С другой стороны если скзать честно, почти все мои остальные языковые пакеты содержат только статику...  smile  а когда оно в шаблоне, то выглядит логично, сам шаблон разбиваем по модулям, но получиться отдельный скин для каждого языка, а добавление языка будет сложным, нужно отследить все строки...

Я против хранения шаблонов на разных языках - представить боюсь что будет если понадобиться что-то поменять в шаблоне!!! Этож нужно будет их все переделывать  smile 


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
sergejzr
Дата 5.9.2006, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Цитата(IZ@TOP @  5.9.2006,  10:05 Найти цитируемый пост)
Я против хранения шаблонов на разных языках - представить боюсь что будет если понадобиться что-то поменять в шаблоне!!! Этож нужно будет их все переделывать  smile  

Да, я тоже против! 

С ХМЛ одна траблочка. Гр%$&анная Опера не подгружает ХМЛ с помощью document(). (возможно в новых версиях они исправили, не смотрел).
В этом случае предлагаю словарь грузить в главный ХМЛ. В принципе будет не намного страшнее, хотя и не так красиво. Если контент гзипится, то на трафф нагрузка всё равно будет в разы меньше, чем в ХТМЛ.

ПС: Кстати в моём примере автоматически поддерживаются несколько скинов. В ХМЛе просто стоят параметры, откуда брать картинки, css итд. Короче говоря там почти всё (или всё smile ) в плане фрэймворка готово. Новые страницы очень легко пишуться. 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
IZ@TOP
Дата 5.9.2006, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: нет
Всего: 73



Цитата(sergej.z @  5.9.2006,  13:20 Найти цитируемый пост)
С ХМЛ одна траблочка. Гр%$&анная Опера не подгружает ХМЛ с помощью document(). (возможно в новых версиях они исправили, не смотрел).

А еще Firefox не знает что такое disable-output-escaping у xsl:value-of. Но это мелочи. Для оперы можно парсить все на стороне сервера. Благо оперой пользуются не так много человек (надеюсь  smile ). В случае с Firefox беспокоиться не стоит если все документы будут валидным XML/XHTML'ем.

На счет стандарта шаблонов: если кто хочет описать свою идею (некий стандарт построения), давайте в отдельный топик. Разумеется с учетом мультидоменности - чтобы были общие шаблоны для всех, приватные для отдельных сайтов и т.п.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
sergejzr
Дата 8.9.2006, 03:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Цитата(IZ@TOP @  5.9.2006,  10:48 Найти цитируемый пост)
На счет стандарта шаблонов: если кто хочет описать свою идею (некий стандарт построения), давайте в отдельный топик. Разумеется с учетом мультидоменности - чтобы были общие шаблоны для всех, приватные для отдельных сайтов и т.п. 

http://forum.vingrad.ru/index.php?showtopi...st&p=847773


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Wowa
Дата 8.9.2006, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Ребята, я залил на SVN папку sys_admin. В ней находится написанная мною утилита для создания языковых файлов в любом формате(там шаблонная система). На ней я уже много проектов сделал. Вполне удобно.

Если у кого-то есть варинты лучше - то пишите. Иначе же прошу всех ознакомиться с моей утилитой и начать ее использовать как можно быстрее. Обязательно прочтите в этой папке файл readme.txt. Там инструкции по установке.


P.S. На php код внутри - особо не смотрите. Я писал давно, когда еще многого не знал smile Но работает все хорошо.
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Vingrad CMS | Следующая тема »


 




[ Время генерации скрипта: 0.0616 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.