Russian Qt Forum
Июнь 15, 2024, 21:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Po-файл: русский->английский->остальные_языки  (Прочитано 4645 раз)
e-garin
Гость
« : Март 16, 2011, 17:36 »

Всем привет!

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

Некоторым образом, мы получаем app.po файл (скрипты ходят по различным источникам, среди которых не только текстовые файлы, и собирают все фразы и слова). Все слова в этом файле на русском языке.
Переводчики хотят перевести всё с русского на английский, а переводы на остальные языки делать уже с английского.
Работают переводчики в QT Linguist. С переводом рус-англ всё понятно - получится соответствующий po-файл, в котором исходным языком будет русский, а целевым - английский. А вот как быть дальше? Как из этого файла получить другой po-файл, в котором исходным будет уже английский (набор фраз из перевода с русского), а целевым какой-то другой? Есть ли утилита, позволяющая сделать такое преобразование?

с уважением,
Алексей Спиридонов.
Записан
mitrich
Гость
« Ответ #1 : Март 20, 2011, 00:53 »

В общих чертах .po-файл представляет собой текст вида

#коммент
msgid "Оригинал"
msgstr "Перевод"

Накидал на скорую руку пару простых скриптов на Lua. Если нет строк с несколькими формами множественного числа, вроде работают. Язык в свойствах файла после конвертации менять вручную (ну или скрипты дополнить). Использовать типа lua poinvert.lua in.po out.po

poinvert.lua - меняет оригинал<->перевод местами
Код
Lua
if arg[1] == nil then
   print "Usage: lua poinvert.lua input.po [output.po]"
   os.exit()
end
 
po = {}
i = 1
 
for line in io.lines(arg[1]) do
   if line:sub(1, 5) == "msgid" then
       po[i + 1] = "msgstr" .. line:sub(6)
   elseif line:sub(1, 6) == "msgstr" then
       po[i - 1] = "msgid" .. line:sub(7)
   else
       po[i] = line
   end
 
   i = i + 1;
end
 
if arg[2] then f = io.open(arg[2], "w") else f = io.stdout end
for _, line in pairs(po) do f:write(line, "\n") end
f:close()
 

invtemplate.lua - то же самое, только перевод будет пустой.
Код
Lua
if arg[1] == nil then
   print "Usage: lua invtemplate.lua input.po [output.po]"
   os.exit()
end
 
if arg[2] then f = io.open(arg[2], "w") else f = io.stdout end
 
for line in io.lines(arg[1]) do
   if line:sub(1, 6) == "msgstr" then
       f:write("msgid ", line:sub(7), "\nmsgstr \"\"\n")
   elseif line:sub(1, 5) ~= "msgid" then
       f:write(line, "\n")
   end
end
 
f:close()
 
Интерпретатор под винду в аттаче со скриптами, под другие платформы - см. Lua Binaries и Lua.org.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #2 : Март 20, 2011, 09:31 »

e-garin а стоит ли так изголятся?
Лингвист позволяет подключить к переводу несколько файлов в режиме "только чтение" и тогда переводчик будет видеть несколько языков.

Например мне приходилось переводить ПО в котором главным языком является французский, которого я не знаю.
Делал так:
открываю project_ru.ts (французкий-русский), открываю project_en.ts (французский-русский) в режиме только для чтения. И теперь вижу в области перевода строки:
* французская
* русская
* английская (не редактируемая)
Записан

Юра.
e-garin
Гость
« Ответ #3 : Март 25, 2011, 18:14 »

В общих чертах .po-файл представляет собой текст вида

#коммент
msgid "Оригинал"
msgstr "Перевод"

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

Именно что есть Грустный. И что самое гадское - Лингвист их автоматически мочит при сохранения файла. М.б. можно как-нибудь отключить?

<поскипан lua-код>

Спасибо за скрипт. Мы тут тоже что-то на коленках на пыхе написали. На напоролись на удаление дубликатов лингвистом (см. выше) Грустный.
Записан
e-garin
Гость
« Ответ #4 : Март 25, 2011, 18:21 »

e-garin а стоит ли так изголятся?
Лингвист позволяет подключить к переводу несколько файлов в режиме "только чтение" и тогда переводчик будет видеть несколько языков.

Юрий, спасибо! С Вашей помощью действительно понял, что изгаляться не стоит! Веселый
Ещё раз спасибо огромное!

с уважением,
Алексей.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.064 секунд. Запросов: 22.