• Версия для печати

Скрипт для облегчения локализации ISPConfig 3.1

Описание: Настройка, обслуживание, эксплуатация, управление панелью ISPConfig 3. А так же обсуждение установки и оптимизация сайта под ISPConfig 3
Правила раздела: Условием использования нашего форума, является соблюдение настоящих Правил форума.


Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам, а вы рискуете получить предупреждение.
Модератор: kulia

Автор
Сообщение
SinglWolf M
Автор темы
Аватара
SinglWolf M
Автор темы
Возраст: 46
Репутация: 199
Лояльность: 71
Сообщения: 1294
С нами: 5 лет 8 месяцев
Откуда: Башкирия
ICQ

#1 SinglWolf » Чт, 19 января 2017, 19:58

Короче... немного лирики :-D
Слепил давеча на коленке скриптик для облегчения перевода много-много одинаковых фраз в языковых файлах ISPConfig 3.1.
Первая версия, потом вторая, третья.... И понеслась №%*?: по кочкам :-D ...
Пора выкладывать на всеобщий суд.

Описание (что умеет):
0. Имеет защиту от "дурачка" :-D
1. Все сообщения скрипта на английском языке. Их не много и они простые.
2. Делает бекап языковых файлов (мало ли... всякое бывает :-) )
3. Исправляет (приводит к единому виду) идентификаторы в языковых файлах (по простому, заменяет двойные кавычки на одинарные)
4. Создаёт список языковых файлов с абсолютными путями
5. Автоматически создаёт шаблон для замены одинаковых фраз. Естественно, что автоматически невозможно сделать идеальный шаблон. Придётся поработать ручками.
6. Не будет работать, если есть хоть 1 дубль идентификаторов в шаблоне.

7. Проверяет целостность шаблона (запустить с параметром test)
  • Формат шаблона такой (строка дана для примера):

    Код: Выделить всё

    'Add group'~"Добавить группу"#

    где
    'Add group' - идентификатор. Обёртка в одинарные кавычки обязательна! (я не зря привёл этот пример, ибо, да - встречаются идентификаторы с пробелами. Из-за этого пришлось изобретать разделитель. См. ниже)
    ~ - разделитель, маркер конца идентификатора.
    "Добавить группу" - собственно это и есть фраза для замены. Может быть как в одинарных кавычках, так и в двойных. Соблюдайте парность и экранировку символов.
    # - маркер конца строки. Не спрашивайте зачем. Много текста. Но без него работать не будет, предупреждаю. :-D
  • Засада получившегося шаблона заключается в следующем. Там есть(будут) много одинаковых идентификаторов, например, таких:

    Код: Выделить всё

    'active_txt'~"Active"#
    'active_txt'~"Активен?"#
    'active_txt'~"Активна?"#
    'active_txt'~"Активные"#

    Смысл одинаковый. Нужно оставить только одну строку с правильным переводом (если нет правильного перевода - исправить\перевести), а остальные с таким же идентификатором удалить. Иначе в языковые файлы будет подставлена самая последняя строка по списку скрипт версии выше 0.4 отакажется работать.
  • Есть ещё круче засада, например такая:
    Спойлер

    Код: Выделить всё

    'add_new_record_txt'~"Add Directive Snippet"#
    'add_new_record_txt'~"Add new circle"#
    'add_new_record_txt'~"Add new Database"#
    'add_new_record_txt'~"Add new DNS Zone manually"#
    'add_new_record_txt'~"Add new Domain"#
    'add_new_record_txt'~"Add new Filter"#
    'add_new_record_txt'~"Add new Folder"#
    'add_new_record_txt'~"Add new Folder User"#
    'add_new_record_txt'~"Add new PHP version"#
    'add_new_record_txt'~"Add new secondary DNS Zone"#
    'add_new_record_txt'~"Add new Secondary DNS-Zone"#
    'add_new_record_txt'~"Add new subdomain"#
    'add_new_record_txt'~"Add new user"#
    'add_new_record_txt'~"Add new User"#
    'add_new_record_txt'~"Add new Webdav-User"#
    'add_new_record_txt'~"Add new website"#
    'add_new_record_txt'~"Добавить Catchall"#
    'add_new_record_txt'~"Добавить DNS A-Record"#
    'add_new_record_txt'~"Добавить Shell-пользователя"#
    'add_new_record_txt'~"Добавить алиас"#
    'add_new_record_txt'~"Добавить запись"#
    'add_new_record_txt'~"Добавить запись Firewall"#
    'add_new_record_txt'~"Добавить запись в белый список"#
    'add_new_record_txt'~"Добавить запись в черный список"#
    'add_new_record_txt'~"Добавить клиента"#
    'add_new_record_txt'~"Добавить нового FTP-Пользователя"#
    'add_new_record_txt'~"Добавить нового relay получателя"#
    'add_new_record_txt'~"Добавить нового пользователя"#
    'add_new_record_txt'~"Добавить новую DNS Zone (SOA)"#
    'add_new_record_txt'~"Добавить новую Email пересылку"#
    'add_new_record_txt'~"Добавить новую БД"#
    'add_new_record_txt'~"Добавить новую группу"#
    'add_new_record_txt'~"Добавить новую запись"#
    'add_new_record_txt'~"Добавить новую запись в белый список"#
    'add_new_record_txt'~"Добавить новую запись в чернрый список"#
    'add_new_record_txt'~"Добавить новую политику"#
    'add_new_record_txt'~"Добавить новую спам запись"#
    'add_new_record_txt'~"Добавить новый Email алиас"#
    'add_new_record_txt'~"Добавить новый IP адрес"#
    'add_new_record_txt'~"Добавить новый алиас"#
    'add_new_record_txt'~"Добавить новый вебсайт"#
    'add_new_record_txt'~"Добавить новый домен"#
    'add_new_record_txt'~"Добавить новый контентный фильтр"#
    'add_new_record_txt'~"Добавить новый сервер"#
    'add_new_record_txt'~"Добавить новый Субдомен"#
    'add_new_record_txt'~"Добавить новый счет"#
    'add_new_record_txt'~"Добавить новый транспорт"#
    'add_new_record_txt'~"Добавить новый Фильтр"#
    'add_new_record_txt'~"Добавить новый ящик"#
    'add_new_record_txt'~"Добавить пользователя спам-фильтра"#
    'add_new_record_txt'~"Добавить реселлера"#
    'add_new_record_txt'~"Создайте новое сообщение службы поддержки"#

    По здравому смыслу такие строки обязательно нужно безжалостно вырезать, иначе фигня получится с переводом :'(
    Зачем так разрабы сделали, непонятно. %)
    Строки с непонятными содержимым лучше удалить.
    Дублей идентификаторов быть не должно, разумеется. :-)
Уф.Вроде всё.
Ограничения (куда же без них...)
0. Скрипт для Linux (Debian, Ubuntu, etc...)
1. В пути к скрипту не должно быть пробелов
2. Запускать лучше под рутом, ибо не проверял под пользователем. :-[
3. Перед запуском скрипта отредактируйте, если нужно, значения переменных (язык для перевода, путь к языковым файлам и выключить режим отладки)
Параметры запуска
Скачайте аттач и распакуйте в удобное место и зайдите в каталог скрипта

Код: Выделить всё

cd replacer

Далее можно запустить без параметров:

Код: Выделить всё

./replacer.sh

Скрипт сообщит следующее (например):

Код: Выделить всё

Usage: /root/replacer/replacer.sh {prepare|replace|restore|check|test}
The parsing of the template, for example:
'Website quota (Harddisk)'~"Website quota (Harddisk)"#
|          IDs           | | String for replace     |
 "~" - the separator between ID and String for replace
 "#" - the marker of the end of the row

./replacer.sh prepare - выполняет пункты 2-5 описания
./replacer.sh replace - берёт заготовки из шаблона и... работает, короче. :-D По умолчанию включен режим отладки, в котором просто выводит данные для замены на дисплей. Пример:

Код: Выделить всё

DEBUG MODE
ID: '1001' => Value: "Имя пользователя или пароль пусты."
DEBUG MODE
ID: '1002' => Value: "Имя пользователя или пароль неправильны."
display IDs and substitution strings completed.

./replacer.sh restore - восстанавливает языковые файлы из бекапа. Приводит языковые файлы в исходное состояние. Это бывает нужно, если вы накосячили (строк много, ошибиться легко) в файле шаблонов и панель загнулась.
+Версия 0.5
./replacer.sh check - проверяет дубли идентификаторов в шаблоне. (при запуске скрипта с параметром replace, проверка на дубли делается автоматом.)
+Версия 0.6
./replacer.sh test - проверяет шаблон на ошибки средствами PHP!!! Если шаблон в порядке, то на дисплее появится аккуратная картинка, например, такая (для шаблона на 6 строк):

Код: Выделить всё

Creates a list of IDs.
Please wait...
Find duplicate IDs.
Duplicates IDs not found.
The template file is ready to go!
Array
(
    [1001] => Имя пользователя или пароль пусты.
    [1002] => Имя пользователя или пароль неправильны.
    [10 - highest] => 10 - highest
    [1 - lowest] => 1 - lowest
    [5 - medium] => 5 - medium
    [About ISPConfig] => Об ISPConfig
)

Вроде всё написал. Если что - спрашивайте, не стесняйтесь.
Удачного перевода! *DRINK*
Вложения
replacer_v06.tar.gz
Версия 0.6
(2.4 КБ) 20 скачиваний
replacer_v05.tar.gz
Версия 0.5
(2.26 КБ) 22 скачивания
replacer.zip
Версия 0.4
(2.18 КБ) 20 скачиваний

kulia M
Аватара
kulia M
Репутация: 25
Лояльность: 22
Сообщения: 131
С нами: 3 года 4 месяца
Откуда: Москва

#2 kulia » Пт, 20 января 2017, 0:49

Запустил, прогнал последовательно. Скрипт отработал без запинок, ничего не спрашивал. В терминале выдавалась замена фраз (очень много). Но английские фразы так и оставались :-)
Дальше то какие действия по локализации? Из панели править или из терминала?
Создал на Линукс-форуме тему "Установка Internet Explorer под Убунту".
Тему удалили через 4 минуты, выдали бан на 10 дней...

SinglWolf M
Автор темы
Аватара
SinglWolf M
Автор темы
Возраст: 46
Репутация: 199
Лояльность: 71
Сообщения: 1294
С нами: 5 лет 8 месяцев
Откуда: Башкирия
ICQ

#3 SinglWolf » Пт, 20 января 2017, 9:08

kulia писал(а):Но английские фразы так и оставались
В скрипте 0.4 была ошибка, перезалил :-[
______________
Для тех, кто не читает инструкции в танке повторяю:
Скрипт по умолчанию ничего не заменяет! Он в режиме DEBUG MODE, о чём, собственно, честно сообщает.
kulia писал(а):Дальше то какие действия по локализации?
Для перевода в режим реальной замены нужно поменять значение переменной DEBUG с 1 на 0 путём редактирования файла самого скрипта в любом текстовом редакторе, например:

Код: Выделить всё

nano replacer.sh

Привожу кусок кода

Код: Выделить всё

# DEBUG="0" - real replace strings in the translation files
# DEBUG="1" - only display IDs and substitution strings
DEBUG="1"
#
translate_lang="ru"
#
path_to_translate="/usr/local/ispconfig/"
#
name_template="template_for_placeholders.txt"

Далее нужно привести в порядок шаблон фраз! Тоже, путём редактирования файла, по умолчанию, template_for_placeholders.txt, он находится в корне каталога скрипта.
Кстати, работы по приведению шаблона в порядок, вам обеспечено не на один вечер :-D
kulia писал(а):Из панели править или из терминала?
Естественно, что из терминала. Можно удалённо подключиться к серверу, чтобы править шаблон в любимом текстовом редакторе. Кодировка шаблона UTF-8

Добавлено спустя 5 часов 44 минуты:
Выкладываю свежую версию 0.5. Скрипт настолько поумнел, что не даст вам сделать замену фраз если в шаблоне для замены есть два одинаковых идентификатора. :-D
Шапку темы обновил.

Добавлено спустя 1 час 29 минут:
Очередная версия 0.6 обрела функцию проверки шаблона средствами PHP. См. описание в шапке. \m/


Вернуться в «ISPConfig 3»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 1 гость