Слепил давеча на коленке скриптик для облегчения перевода много-много одинаковых фраз в языковых файлах ISPConfig 3.1.
Первая версия, потом вторая, третья.... И понеслась №%*?: по кочкам ...
Пора выкладывать на всеобщий суд.
Описание (что умеет):
0. Имеет защиту от "дурачка"
1. Все сообщения скрипта на английском языке. Их не много и они простые.
2. Делает бекап языковых файлов (мало ли... всякое бывает )
3. Исправляет (приводит к единому виду) идентификаторы в языковых файлах (по простому, заменяет двойные кавычки на одинарные)
4. Создаёт список языковых файлов с абсолютными путями
5. Автоматически создаёт шаблон для замены одинаковых фраз. Естественно, что автоматически невозможно сделать идеальный шаблон. Придётся поработать ручками.
6. Не будет работать, если есть хоть 1 дубль идентификаторов в шаблоне.
7. Проверяет целостность шаблона (запустить с параметром test)
- Формат шаблона такой (строка дана для примера):
где
Код: Выделить всё
'Add group'~"Добавить группу"#
'Add group' - идентификатор. Обёртка в одинарные кавычки обязательна! (я не зря привёл этот пример, ибо, да - встречаются идентификаторы с пробелами. Из-за этого пришлось изобретать разделитель. См. ниже)
~ - разделитель, маркер конца идентификатора.
"Добавить группу" - собственно это и есть фраза для замены. Может быть как в одинарных кавычках, так и в двойных. Соблюдайте парность и экранировку символов.
# - маркер конца строки. Не спрашивайте зачем. Много текста. Но без него работать не будет, предупреждаю. - Засада получившегося шаблона заключается в следующем. Там есть(будут) много одинаковых идентификаторов, например, таких:
Смысл одинаковый. Нужно оставить только одну строку с правильным переводом (если нет правильного перевода - исправить\перевести), а остальные с таким же идентификатором удалить. Иначе в языковые файлы будет подставлена самая последняя строка по списку скрипт версии выше 0.4 отакажется работать.
Код: Выделить всё
'active_txt'~"Active"# 'active_txt'~"Активен?"# 'active_txt'~"Активна?"# 'active_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 replace - берёт заготовки из шаблона и... работает, короче. По умолчанию включен режим отладки, в котором просто выводит данные для замены на дисплей. Пример:
Код: Выделить всё
DEBUG MODE
ID: '1001' => Value: "Имя пользователя или пароль пусты."
DEBUG MODE
ID: '1002' => Value: "Имя пользователя или пароль неправильны."
display IDs and substitution strings completed.
+Версия 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
)
Удачного перевода!