Автор Гілка: Gettext tutorial (howto)  (Прочитано 2270 раз)

Відсутній mim

  • Новачок
  • *
  • дописів: 44
  • Карма: +0/-0
Gettext tutorial (howto)
« : 2008-06-10 16:29:42 »
чи може хтось порадити сабж? за винятком того жаху, що написано в info gettext?

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Re: Gettext tutorial (howto)
« Відповідей #1 : 2008-06-10 17:36:13 »
Там все просто як двері. Всі текстові рядочки, які треба перекласти, замінюються на виклик функції (в сі/сі++ - через макрос).

http://uk.wikipedia.org/wiki/Gettext
[Fedora Linux]

Відсутній mim

  • Новачок
  • *
  • дописів: 44
  • Карма: +0/-0
Re: Gettext tutorial (howto)
« Відповідей #2 : 2008-06-11 10:34:15 »
було б так просто - не було б так складно

1. Що за макрос? вже десь оголошений, чи його треба самому декларувати?
2. Як сумістити використання макросу і xgettext ? Особливо, якщо використовувати не "_", а щось інше.
3. Спочатку утворюється pot-файл, потім тупим копіюванням роблять po-файли, потім з них роблять mo-файли. Як всі ці файли називати (тобто, якими повинні бути імена цих файлів)?
4. Po-файли мають якийсь заголовок, що в ньому за поля? Як задати кодування, зокрема.
5. Куди, в який каталог на машині кінцевого користувача треба покласти файли перекладу? Чи треба при цьому виконувати якісь додаткові дії, типу виклику якої-небудь програми для реєстрації перекладу?
6. Відповідно, які пограми (бібліотеки) мають бути встановлені у користувача? Як приєднати ці бібліотеки до програми статично, щоб в разі чого не виникало проблем
7. Що повинна зробити програма, щоб знайти файли перекладу? Чи можна (і як саме) отримати список наявних перекладів?

P.S. мова - с/с++

Відсутній yurchor

  • Видавець
  • *******
  • дописів: 3636
  • Карма: +3/-0
  • Grateful for our Iron Lung
    • Вікі користувачів KDE
Re: Gettext tutorial (howto)
« Відповідей #3 : 2008-06-11 13:42:48 »
Можете про все прочитати тут. А загалом, непогано було б самому ручками порозбирати макроси на прикладі окремо взятого проекту (мені сподобались макроси audacity і dia).

Ну і звичайно, інтегровані середовища розробки (KDevelop, Anjuta) самі створюють теки po і шаблони перекладів pot. Про решту мають подбати локалізатори.
« Змінено: 2008-06-11 13:48:57 від yurchor »
Try to reach you before winter comes
Always a place for you in my heart
You're not alone
All used up
I'd give anything to talk to you

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Re: Gettext tutorial (howto)
« Відповідей #4 : 2008-06-11 14:45:21 »
було б так просто - не було б так складно
1. Що за макрос? вже десь оголошений, чи його треба самому декларувати?
Треба декларувати самому:
#define _(a) gettext(a)
#define N_(a) (a)
N_ - це аналог gettext_noop (макрос, який нічого не робить а просто відмічає текст для перекладу).

2. Як сумістити використання макросу і xgettext ? Особливо, якщо використовувати не "_", а щось інше.
Параметр -k function:n вказує шукати функцію function і брати її n-ий аргумент. По замовчуванню для Сі xgettext шукає gettext, dgettext:2, dcgettext:2, ngettext:1, dngettext:2,3 , dcngettext і gettext_noop. (Замовчування не діють коли вказано -k).

3. Спочатку утворюється pot-файл, потім тупим копіюванням роблять po-файли, потім з них роблять mo-файли. Як всі ці файли називати (тобто, якими повинні бути імена цих файлів)?
program_name.pot, LANG.po, LANG.mo.

Наприклад: gedit.pot, uk.po, uk.mo.

4. Po-файли мають якийсь заголовок, що в ньому за поля? Як задати кодування, зокрема.

В темплейті, який створюється, все ніби прописано:
msgid ""
msgstr ""
"Project-Id-Version: НАЗВА_ПРОЕКТУ ВЕРСІЯ\n"
"POT-Creation-Date: ДАТА\n"
"PO-Revision-Date: ДАТА\n"
"Last-Translator: Ім’я Автора <адреса>\n"
"Language-Team: Ukrainian <адреса>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=КОДУВАННЯ\n"
"Content-Transfer-Encoding: 8bit\n"

5. Куди, в який каталог на машині кінцевого користувача треба покласти файли перекладу? Чи треба при цьому виконувати якісь додаткові дії, типу виклику якої-небудь програми для реєстрації перекладу?
Класти в PREFIX/share/locale/LANG/, напр. /usr/share/locale/uk.

6. Відповідно, які пограми (бібліотеки) мають бути встановлені у користувача? Як приєднати ці бібліотеки до програми статично, щоб в разі чого не виникало проблем
Бібліотека gettext.
Там ліцензія LGPLv2+ або GPLv3+ (GPLv2+ для старіших версій). Якщо ви використовуєте таку саму ліцензію ((L)GPLv2+), то ви можете скомпілювати статично. Статична компіляція відбувається як завжди. :-)

7. Що повинна зробити програма, щоб знайти файли перекладу? Чи можна (і як саме) отримати список наявних перекладів?
Нічого не повинна. Бібліотека сама знає, де шукати.
Можна пошукати файли /usr/share/locale/*/НАЗВА.mo і запропонувати користувачу на вибір.
[Fedora Linux]

Відсутній mim

  • Новачок
  • *
  • дописів: 44
  • Карма: +0/-0
Re: Gettext tutorial (howto)
« Відповідей #5 : 2008-06-11 19:58:29 »
дякую, стаття дуже допомогла, і пояснення теж :)

єдине, склалося враження, що все ж таки бібліотека libc, але наразі це не так важливо