Многоязычная версия сайта (преобразование шаблонов утилитой sed)

_RVK_

Новичок
Многоязычная версия сайта (преобразование шаблонов утилитой sed)

Есть задача сделать англоязычную версию для существующего ресурса, причем версии могут отличаться не только языками, но и элементами дизайна. Предпологается что изначально таких различий бедет немного и они не будут глобальными. То есть 90% кода все таки будут идентичны.

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

Покопав немножко я обнаружил 2 уттилиты sed и awk. Возможности awk хороши, но выбор пал на sed, ибо его возможностей должно хватить. Попробовал на простом примере:


Тестовый базовый шаблон:

PHP:
<html>
<table width="100%" border="1">
<tr>
<td>Ru</td>
<td>Сайт</td>
</tr>
</table>

<table width="100%" border="1">
<tr>
<td>Эта фраза будет переведена</td>
<td>
<div id='banner'>Этот банер должен быть вырезан</div>
</td>
</tr>
</table>

<table width="100%" border="1">
<tr>
<td></td>
<td><a href="http://mail.ru">Mail.ru</a></td>
</tr>
</table>

</html>
Прогоняем через такой sedовский скрипт:

Код:
s/Ru/En/g
s/Сайт/Site/g
s/Эта фраза будет переведена/This phrase will be translated/g
s/<a href="http:\/\/mail.ru">Mail.ru<\/a>/<a href="http:\/\/yahoo.com">Yahoo.com<\/a>/g
s/<div id='banner'>Этот банер должен быть вырезан<\/div>/ /g
И получаем на выходе нужный результат:

PHP:
<html>
<table width="100%" border="1">
<tr>
<td>En</td>
<td>Site</td>
</tr>
</table>

<table width="100%" border="1">
<tr>
<td>This phrase will be translated</td>
<td>
 
</td>
</tr>
</table>

<table width="100%" border="1">
<tr>
<td></td>
<td><a href="http://yahoo.com">Yahoo.com</a></td>
</tr>
</table>

</html>
Собственно один раз написанный скрипт должен меняться очень редко. Чаще всего для добавления нового перевода.

Но вот что интересно. Когда я высказал подобную идею меня назвали извращенцем, и пояснили что это слишком сложное решение. А проще написать свой компилятор на PHP....

Для меня выгодность моего решения является очевидной. Я никогда не отличался уперстостью, и всегда мог признать собственную неправоту, если привести нормальные доводы. Мне внятных доводов паривести не смогли. Может кто нибудь незаинтересованный сможет оценить это решение?

Чем все таки оно извратно?
 

IZ@TOP

Новичок
Чем все таки оно извратно?
Можно несколько уточнений?
1. Один скрипт на один язык или для каждого шаблона свой?
2. Это чистое решение? Т.е. будет обходится без примеси тулз написанных на PHP?
3. Если на пункт 2 положительный ответ - реализация администрирования языкового словаря полностью возлагается на программиста?
 

_RVK_

Новичок
1. Да один скрипт на 1 язык -1. То есть для нас это пока 1 скрипт.
2, 3. Реализация интерфейся для добавления новых фраз не обязательна, но вполне возможна. Мое решение никаких преград этому не ставит. То есть в чистом виде решение не требует применения никаких других инструментов.
 

IZ@TOP

Новичок
1. Хорошо. Т.е. я делаю так:
user@domin # sed -options -script ~/myscript.sed /www/xxx.com/templates/*
И у нас этот скрипт обрабатывает все файлы которые находятся в директории templates и применяет ко всем тем файлам прописанные там правила?
2,3. Т.е. в таком случае все равно придется писать некий обработчик/сборщик sed файлов?
 

_RVK_

Новичок
1. Хорошо. Т.е. я делаю так:
user@domin # sed -options -script ~/myscript.sed /www/xxx.com/templates/*
И у нас этот скрипт обрабатывает все файлы которые находятся в директории templates и применяет ко всем тем файлам прописанные там правила?
Нет конечно. Я привел пример преобразования одного шаблона. Несложный sh скриптик сделает это и для набора файлов.

2,3. Т.е. в таком случае все равно придется писать некий обработчик/сборщик sed файлов?
sed скрипт будет один. Работу с текстовыми файлами изучают примерно в 1 месяц программирования на PHP. Если так уж необходим интерфейс для его редактирования, проблемм нет никаких.

А изначально можно и ручками его править. Это придется делать нечасто.
 

IZ@TOP

Новичок
Нет конечно. Я привел пример преобразования одного шаблона. Несложный sh скриптик сделает это и для набора файлов.
sh скриптик - понятно. Но не слишком трудоемко выйдет? Компилятор на РНР (пусть написанный самостоятельно), будет создавать записи в словаре самостоятельно, а в твоем случае, придется ручками создавать эти скрипты и следить за взаимосвязью. Во всяком случае мне так кажется.

sed скрипт будет один. Работу с текстовыми файлами изучают примерно в 1 месяц программирования на PHP. Если так уж необходим интерфейс для его редактирования, проблемм нет никаких.
Да, пожалуй, ты прав - работа с текстовыми файлами и их разбор , штука не шибко сложная. Но, тогда, можно автоматически и sed файлы создавать, просто при необходимости добавляя реплейсы, всяких там, баннеров и прочего.

И все же. Мне кажется, процесс поддержки, при использовании подобного подхода, будет несколько трудоемок и, возможно, более допускающий ошибки программирования.
 

SiLeNCer

Новичок
Сдается мне, что все равно, после каждого изменения шаблона, правила sed надо будет проверять руками. А вдруг что похерилось?
 

Tor

Новичок
а теперь пример скрипта для языка, который читается справа налево?
причем меню тоже нужно передвинуть

что, такая проблема с местом, что нельзя хранить кучу шаблонов?
 

IZ@TOP

Новичок
что, такая проблема с местом, что нельзя хранить кучу шаблонов?
Вопрос как раз не в этом, вопрос в том что необходимо делать правки для всех перегружаемых шаблонов, а эти правила будут вносить (как предпологается) некоторые изменения в верстку шаблона для другого языка.

-~{}~ 21.11.06 18:12:

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

hermit_refined

Отшельник
два существенных минуса:
1. sed обрабатывает построчно, в случае многострочных замен придется городить огород; к тому же может возникнуть потребность, например, из двух одинаковых кусков заменить только один из них.
2. при изменении шаблона нужно править и файл замен, а зависимость тут, мягко говоря, "ненаглядная" и неочевидная.

ну и вообще слишком ограничивающее возможности решение, вряд ли долго продержится.
 

_RVK_

Новичок
а теперь пример скрипта для языка, который читается справа налево?
причем меню тоже нужно передвинуть
Пока не рассматривается.

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

hermit_refined

Отшельник
_RVK_
а почему нельзя учитывать эти различия условными конструкциями - в самом шаблоне?
(для красоты можно свои теги какие-нибудь организовать)
 

_RVK_

Новичок
sed обрабатывает построчно, в случае многострочных замен придется городить огород;
Первый здравый довод который я услышал. Да для удаления блока их трех строк придется писать 3 рега. Но такие случаи в принципе редки.

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


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

SiLeNCer

Новичок
Автор оригинала: _RVK_
Первый здравый довод который я услышал. Да для удаления блока их трех строк придется писать 3 рега. Но такие случаи в принципе редки.
Не согласен. Ты же хочешь получить ЧИТАЕМЫЙ HTML-код
 

_RVK_

Новичок
а почему нельзя учитывать эти различия условными конструкциями - в самом шаблоне?
А если добавится еще язык? А два? А если в двух из них блок должен выглядеть одинаково а в третьем и четвертом по своему?

-~{}~ 21.11.06 18:34:

Не согласен. Ты же хочешь получить ЧИТАЕМЫЙ HTML-код
А причем здесь HTML?
 

SiLeNCer

Новичок
Автор оригинала: _RVK_
А причем здесь HTML?
Я говорю про sed минорную замену дизигна, о чем сегодня говорили.
В шаблонах код отформатирован. избавляться от него в угоду удобству работы sed я не считаю правильным.
 

IZ@TOP

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

hermit_refined

Отшельник
А если добавится еще язык? А два? А если в двух из них блок должен выглядеть одинаково а в третьем и четвертом по своему?
ага. представляю себе верстальщика, который при каждом изменении лихорадочно вспоминает "так, этот у нас кусочек изменяется в датской и французской версии, эти два дива не меняются, следующий - отличается только в английской... не забыть бы потом файлы замен подправить... ой, черт, перепутал, это же он только в немецкой изменяется..." ;-)
 

_RVK_

Новичок
В шаблонах код отформатирован. избавляться от него в угоду удобству работы sed я не считаю правильным.
Я же сказал что довод про однострочность принят. Это первый реальный довод за сегодня, кторый указывает на недостаток моего решения. Да. Придется выбирать между читабельностью некоторых участков кода и читабельностью sed-скрипта.

ага. представляю себе верстальщика, который при каждом изменении лихорадочно вспоминает...
Верстальщик этим заниматься не будет. Разница в верстке пока ограничивается лишь наличием/отсутствием некоторых банеров, счетчиков, другими путями к картинкам да разной мелочевкой.
 

uliss

Новичок
Автор оригинала: _RVK_
Нет конечно. Я привел пример преобразования одного шаблона. Несложный sh скриптик сделает это и для набора файлов.
ИМХО лучше сделать Makefile
 
Сверху