Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: JamS007 от Январь 01, 2010, 12:29



Название: Перевод приложения на другие языки
Отправлено: JamS007 от Январь 01, 2010, 12:29
Здравствуйте,

пишу проект, который обещает стать очень объемным. Хочу вынести все надписи в отдельный *.h файл, чтоб потом легко переводить.

делаю примерно так:
Код:
#ifndef TRANSLATE_H
#define TRANSLATE_H

#include <QString>

const QString PanelsViewBtn_Groops = "Группы";
const QString PanelsViewBtn_Tasks  = "Задачи";


#endif // TRANSLATE_H

но на экране, после этого, появляются всякие крякозяблы.  Подскажите как грамотно осуществить перевод приложения в Qt. Может для этого есть спец. средства, а если моим способом, то почему шрифты отображаються неправильно?


Название: Re: Перевод приложения на другие языки
Отправлено: lit-uriy от Январь 01, 2010, 14:33
>>Хочу вынести все надписи в отдельный *.h файл, чтоб потом легко переводить.
т.е. ты собирался переводить, исправляя исходник?


Название: Re: Перевод приложения на другие языки
Отправлено: DOOMer от Январь 01, 2010, 15:01
JamS007,  зачем такие сложности. В  Qt предусмотрены далеко не самые плохие средства для облегчения интернационализации разрабатывемых приложений. В принципе даже выносить все строки, нуждающиеся в переводе, в отдельный заголовочник необязательно.

Просто "оборачивай" еобходимые строки  функцией   QApplication::trUtf8("bla_bla_bla");. А перед релизом приложенрия прогони исходники через утилиту  lupdate, она выберет все что ты отметил (и в коде и в  ui-файлах) в отдельный ts-файл. Который уже и надо переводить через поставляемую с   Qt утилиту  linguits. А потом с помощью lrelease собрать все  в  qm-файл.

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

В документации все описано -  http://doc.trolltech.com/4.6/internationalization.html



Название: Re: Перевод приложения на другие языки
Отправлено: JamS007 от Январь 01, 2010, 17:02
Спасибо!


Название: Re: Перевод приложения на другие языки
Отправлено: Dendy от Январь 01, 2010, 17:06
Добавлю от себя - не приучайтесь к плохому, не используйте trUtf8() - это маленькое зло, оставленое нам разработчиками. Довольно спорно переводить программу с русского на другие языки. Пользуйтесь tr().


Название: Re: Перевод приложения на другие языки
Отправлено: lit-uriy от Январь 01, 2010, 18:22
>>не используйте trUtf8() - это маленькое зло
скорее наоборт. Особенно для случая, когда делаешь некий универсальный класс. Исходник класса написан в UTF-8, использована эта функция.

Применяя в другом коде, где кодировка может отличатся от UTF-8, всё будет работать, т.к. чётко указана кодировка именно этих строк. А вот если использовать класс с кодировкой UTF-8 и вункцией tr(), то для приложения в котором основная кодировка отличается от UTF-8 и соответсвенно кодек для tr() установлен другой, то получим проблемы.


Название: Re: Перевод приложения на другие языки
Отправлено: Dendy от Январь 01, 2010, 19:53
Забыл сказать - и никаких мультибайтных символов в коде. Исключения бывают, но они достаточно редки, например имена или спец-символы (буквы копирайта и т.п.), которые лень подставлять константой или переводу не подлежат.

break, как по вашему китаец будет переводить trUtf8("Привет")? Ему нужно будет знать русский? Или русскому китайский?


Название: Re: Перевод приложения на другие языки
Отправлено: lit-uriy от Январь 01, 2010, 22:21
Цитировать
break, как по вашему китаец будет переводить trUtf8("Привет")? Ему нужно будет знать русский? Или русскому китайский?
Конечно нужно будет знать, т.к. переводит тот кому это надо.
Надо? Изучай язык и переводи.


Название: Re: Перевод приложения на другие языки
Отправлено: Dendy от Январь 01, 2010, 23:34
То-есть из-за того что разработчик не знает английского китайскому переводчику нужно учить русский? Оставим этот спор, я вижу он зашёл в тупик.