Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Перевод проекта на другой язык.

1.2K
01 мая 2004 года
Kalitkin
108 / / 05.03.2004
Столкнулся с проблемой. Есть ОГРОМНЫЙ проект с бесконечным числом стрингов т.е. слов на русском языке. Проект этот надо перевести на другой язык (например на английский). Как быть? Проект написан на Visual C++, в нем порядка 100 классов и в каждом есть стринги.
И самый главный вопрос – если я начинаю писать новый проект, то как быть со стрингами, не запихивать же их в базу данных (хотя если ничего не подскажете так и сделаю). Мне кажется, что можно сделать файл типа String table, и все слова запихивать туда(чтобы потом можно было его открыть и быстро перевести все слова на другой язык) или я ошибаюсь? Или как ни будь поступить с rc файлом? В общем, не знаю. Может, кто уже сталкивался с подобной проблемой?
Заранее всем спасибо.
10
01 мая 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Kalitkin
Мне кажется, что можно сделать файл типа String table, и все слова запихивать туда(чтобы потом можно было его открыть и быстро перевести все слова на другой язык) или я ошибаюсь?


По "науке", возможность перевода на другой язык должна быть заложена в проекте еще во время проектирования. И, по возможности, должна быть сведена к переводу ресурсов, без изменения кода. Исключение могут составлять только модули, ответственные за национально-зависимые настройки, например, сортировку строк, если коды в алфавите не упорядочены по возрастанию.

1.2K
01 мая 2004 года
Kalitkin
108 / / 05.03.2004
Цитата:
Originally posted by smartsoft

По "науке", возможность перевода на другой язык должна быть заложена в проекте еще во время проектирования. И, по возможности, должна быть сведена к переводу ресурсов, без изменения кода.



Я сейчас проектирую новый проект. Как мне по «науке» заложить в проект возможность в будущем переводить только файл ресурсов не трогая исходного кода?

319
01 мая 2004 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by Kalitkin


Я сейчас проектирую новый проект. Как мне по «науке» заложить в проект возможность в будущем переводить только файл ресурсов не трогая исходного кода?



Использовать ссылки на текстовые ресурсы вместо прямого использования строк.
Например использовать идентификаторы для строк.

Можно вообще отдельно создать класс, где будешь хранить все строковые ресурсы и переменную на язык. В программе устанавливаешь язык какой надо, а твой класс, соответственно возвращает строку в зависимости от языка, которую ты и подставляешь в твоей программе куда надо.

1.2K
02 мая 2004 года
Kalitkin
108 / / 05.03.2004
Цитата:
Originally posted by xelos


Использовать ссылки на текстовые ресурсы вместо прямого использования строк.
Например использовать идентификаторы для строк.

Можно вообще отдельно создать класс, где будешь хранить все строковые ресурсы и переменную на язык. В программе устанавливаешь язык какой надо, а твой класс, соответственно возвращает строку в зависимости от языка, которую ты и подставляешь в твоей программе куда надо.



Спасибо, на счет класса класная идея, надо подумать.

7.6K
07 мая 2004 года
Karold
1 / / 07.05.2004
В случае когда проект уже закончен, а добавить мультиязыковую поддержку нуна я поступаю обычно так...
делаю массивчик стуктур (структура из двух слов оригинальное (с которого надо переводить) и переведенное), функцию перевода слова (фразы)..которой даем оригинал, она ищет по массиву и возвращает соответствующее значение перевода и пишу примерно след. функцию:
void TranslateWindow(CWnd* pWnd, UINT uiTemplateResID)
{
ASSERT(pWnd);
ASSERT_VALID(pWnd);
ASSERT(::IsWindow(pWnd->m_hWnd));
CWnd* pChildWnd = pWnd->GetWindow(GW_CHILD);

while(pChildWnd)
{
int nID = pChildWnd->GetDlgCtrlID();
if(nID != 0)
{
CString strText = _T("");
pChildWnd->GetWindowText(strText);
CString strTranslated = TranslateText(strText);
pChildWnd->SetWindowText(strTranslated);
}

pChildWnd = pChildWnd->GetNextWindow();
}
CString strText = _T("");
pWnd->GetWindowText(strText);
CString strTranslated = TranslateText(strText);
pWnd->SetWindowText(strTranslated);
};

где TranslateText наша функция перевода фразы(слова)...а функцию ТранслейтВиндов вызываем после формирования каждого из существующих окошек (она переведет вам ресурсы)...остается теперь пробежаться по программе и повставлять везде где используются строки функцию TranslateText.
Работа кропотливая, но если правильно написать TranslateText, то можно даже ничего руками в файлик не заносить..а просто поиграться с программой и каждое ненайденное слово сохранять в файл (в формате оригинал== ), затем после == дописать перевод на нужный язык и уже в следующий раз подгрузать в массив и то и другое. На мой взгляд это самый быстрый путь. Обычно какая бы по величине прога не была занимает не больше одного дня.
1.2K
08 мая 2004 года
Kalitkin
108 / / 05.03.2004
Цитата:
Originally posted by Karold
В случае когда проект уже закончен, а добавить мультиязыковую поддержку нуна я поступаю обычно так...
делаю массивчик стуктур (структура из двух слов оригинальное (с которого надо переводить) и переведенное), функцию перевода слова (фразы)..которой даем оригинал, она ищет по массиву и возвращает соответствующее значение перевода и пишу примерно след. функцию:
void TranslateWindow(CWnd* pWnd, UINT uiTemplateResID)
{
ASSERT(pWnd);
ASSERT_VALID(pWnd);
ASSERT(::IsWindow(pWnd->m_hWnd));
CWnd* pChildWnd = pWnd->GetWindow(GW_CHILD);

while(pChildWnd)
{
int nID = pChildWnd->GetDlgCtrlID();
if(nID != 0)
{
CString strText = _T("");
pChildWnd->GetWindowText(strText);
CString strTranslated = TranslateText(strText);
pChildWnd->SetWindowText(strTranslated);
}

pChildWnd = pChildWnd->GetNextWindow();
}
CString strText = _T("");
pWnd->GetWindowText(strText);
CString strTranslated = TranslateText(strText);
pWnd->SetWindowText(strTranslated);
};

где TranslateText наша функция перевода фразы(слова)...а функцию ТранслейтВиндов вызываем после формирования каждого из существующих окошек (она переведет вам ресурсы)...остается теперь пробежаться по программе и повставлять везде где используются строки функцию TranslateText.
Работа кропотливая, но если правильно написать TranslateText, то можно даже ничего руками в файлик не заносить..а просто поиграться с программой и каждое ненайденное слово сохранять в файл (в формате оригинал== ), затем после == дописать перевод на нужный язык и уже в следующий раз подгрузать в массив и то и другое. На мой взгляд это самый быстрый путь. Обычно какая бы по величине прога не была занимает не больше одного дня.



Конечно спасибо тебе большое, но я уже весь проект (вернее стринги) перевел в id (конечно намучалсяяяяяяя......:))

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог