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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Перевод с английского на русский  (Прочитано 15487 раз)
8Observer8
Гость
« : Октябрь 02, 2014, 13:08 »

Привет!

Я ожидаю, что слово "Hello" переведётся на русский, но этого не происходит.

В книге Шлее и в этой статье прочитал о переводе и проделал следующее:

- написал такой код:
Код
C++ (Qt)
#include <QApplication>
#include <QLabel>
#include <QTranslator>
#include <QDir>
 
int main( int argc, char *argv[] )
{
   QApplication app( argc, argv );
 
   QTranslator myTranslator;
   myTranslator.load( QDir::currentPath() + "/main_ru.ts" );
   app.installTranslator( &myTranslator );
 
   QLabel label( QObject::tr( "Hello" ) );
   label.show();
 
   return app.exec();
}
 

- получил файл main_ru.ts с помощью команды:
Код:
lupdate main.cpp -ts main_ru.ts

- открыл файл "main_ru.ts" и написал перевод:
Код:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ru_RU">
<context>
    <name>QObject</name>
    <message>
        <location filename="main.cpp" line="9"/>
        <source>Hello</source>
        <translation>Привет</translation>
    </message>
</context>
</TS>

Запускаю программу и по-прежденему вижу "Hello"

P.S. Пробовал открывать файл "main_ru.ts" с помощью "Qt Linguist", но он ругается: "Encountered incorrectly encoded content"
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4349



Просмотр профиля
« Ответ #1 : Октябрь 02, 2014, 13:22 »

А где запуск lrelease?
И в транслятор нужно загружать не .ts (это исходник), а .qm
Записан
8Observer8
Гость
« Ответ #2 : Октябрь 02, 2014, 13:33 »

Запустил:
Код:
lrelease i18n.pro

Такое выдаёт:
Цитировать
lrelease error: Parse error at C:/Users/Ivan/GoogleDrive/Qt/i18n/i18n/main_ru.ts:1:38: Encountered incorrectly encoded content.
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4349



Просмотр профиля
« Ответ #3 : Октябрь 02, 2014, 13:34 »

Запустил:
Код:
lrelease i18n.pro
Но зачем?  Улыбающийся
Записан
8Observer8
Гость
« Ответ #4 : Октябрь 02, 2014, 13:40 »

Я сначала просто запустил lrelease и вывелось сообщение:
Цитировать
Usage:
    lrelease [options] project-file
Вот я и решил, что после этой команды должен появиться ".qm" файл. Разве нет?
Записан
OKTA
Гость
« Ответ #5 : Октябрь 02, 2014, 13:48 »

Возьми лингвист, а то править руками конфигурационный файл, который должен быть в одной кодировке, а твой редактор сохранит в черт знает какой, сомнительно  Показает язык
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #6 : Октябрь 02, 2014, 13:56 »

Вот я и решил, что после этой команды должен появиться ".qm" файл. Разве нет?
слушай, ты ж привел ссылку на статью с хабра. Ты ее вообще читал?
Записан
8Observer8
Гость
« Ответ #7 : Октябрь 02, 2014, 14:05 »

Удалил файл "main_ru.ts" и ввёл команду:
Цитировать
lupdate main.cpp -ts main_ru.ts

Открыл "Qt Linguist". Открыл из него файл "main_ru.ts". Написал русский перевод. Выбрал в меню "Release". Изменил строку кода:
Код
C++ (Qt)
myTranslator.load( QDir::currentPath() + "/main_ru.qm", "." );
 

Работает! Всем большое спасибо!

P.S. У Шлее написано, что надо использовать lrelease (написано она лучше сжимает). Как я понял, лучше редактировать в "Qt Linguist", а сжимать из командной сроки с помощью lrelease
Записан
OKTA
Гость
« Ответ #8 : Октябрь 02, 2014, 14:06 »

а тебе не кажется, что лингвист и использует lrelease?  Смеющийся
Записан
8Observer8
Гость
« Ответ #9 : Октябрь 02, 2014, 14:15 »

слушай, ты ж привел ссылку на статью с хабра. Ты ее вообще читал?
Читал, но нечего не понял, а вот по книге разобрался.

а тебе не кажется, что лингвист и использует lrelease?  Смеющийся
Так в книге написано:
« Последнее редактирование: Октябрь 02, 2014, 14:20 от 8Observer8 » Записан
8Observer8
Гость
« Ответ #10 : Октябрь 02, 2014, 14:29 »

Затык был в том, что Far сохранил файл ".ts", после редактирования, в какой-то кодировке, видимо.
Записан
OKTA
Гость
« Ответ #11 : Октябрь 02, 2014, 14:32 »

Мда, странный перевод, если сказано, что для получения QM файлов можно использовать lupdate  Смеющийся
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #12 : Октябрь 02, 2014, 14:45 »

QDir::currentPath() возвращает т.н. «рабочую папку». лучше используй qApp->applicationDirPath()
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
8Observer8
Гость
« Ответ #13 : Октябрь 02, 2014, 15:05 »

Мда, странный перевод, если сказано, что для получения QM файлов можно использовать lupdate  Смеющийся
Может в книге ошибка?

QDir::currentPath() возвращает т.н. «рабочую папку». лучше используй qApp->applicationDirPath()
Разница между ними в том, что одна возвращает "build-i18n-Desktop_Qt_5_3_2_MinGW_32bit-Debug", а другая "build-i18n-Desktop_Qt_5_3_2_MinGW_32bit-Debug/debug". А я то подумал, что она вернёт путь, где ".cpp" лежат...
Записан
OKTA
Гость
« Ответ #14 : Октябрь 02, 2014, 15:33 »

Может в книге ошибка?
Вероятно ошибка, как и то предположение, что лингвист не использует в своей работе lrelease. Переписывать дважды один код? не, спасибо  Смеющийся
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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