Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Многоязычное приложение 
:(
    Опции темы
DCamer
Дата 28.3.2010, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



В C++ Builder есть встроенная функция перевода, однако она не собираете текст из .cpp, например из такой части:
Код

void __fastcall TForm2::Button2Click(TObject *Sender)
{
  if(SaveDialog1->Execute())
  {
    Memo1->Lines->SaveToFile(SaveDialog1->FileName);
    sStatusBar1->Font->Color=clGreen;
    sStatusBar1->Panels->Items[0]->Text = "Успешно сохранено!";
  }
  else
  {
    sStatusBar1->Panels->Items[0]->Text = "Файл не сохранён!";
  }
}

Нельзя ли это как-нибудь исправить?
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
DCamer
Дата 28.3.2010, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



Или каким-нибудь способом RC/LNG/INI и т.д., более интересуют .lng и .ini

Это сообщение отредактировал(а) DCamer - 28.3.2010, 20:17
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
borisbn
Дата 28.3.2010, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Думаю, программу переписывать всё-таки придётся. типа:
Код

  if(SaveDialog1->Execute())
  {
    Memo1->Lines->SaveToFile(SaveDialog1->FileName);
    sStatusBar1->Font->Color=clGreen;
    sStatusBar1->Panels->Items[0]->Text = m_messages->successSaved().c_str(); // "Успешно сохранено!";
  }
  else
  {
    sStatusBar1->Panels->Items[0]->Text = m_messages->failedSaved().c_str(); // "Файл не сохранён!";
  }



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
DCamer
Дата 28.3.2010, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



Цитата(borisbn @  28.3.2010,  21:07 Найти цитируемый пост)
m_messages

Что это?
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
Alca
Дата 28.3.2010, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



 smile 


--------------------
PM WWW ICQ Skype Jabber   Вверх
DCamer
Дата 28.3.2010, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



Alca, что смешного?
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
borisbn
Дата 28.3.2010, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Цитата(DCamer @  28.3.2010,  21:15 Найти цитируемый пост)
Цитата(borisbn @  28.3.2010,  21:07 )m_messages  Что это?

ну что-то типа твоего класса, возвращающего нужные строки в зависимости от выбранного языка.
типа
Код

class LangMessages
{
...
    void setLanguageFileName( const std::string & langFileName )
    {
        ini = new TIniFile( langFileName.c_str() );
    }
    std::string successSaved()
    {
        return ini->ReadString( "bla bla bla", "successSaved_message", "Успешно сохранено!" );
    }
};
...
LangMessages m_messages;



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
vikaz
Дата 29.3.2010, 05:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



Может даже лучше не использовать функции:

Код

sStatusBar1->Panels->Items[0]->Text = m_messages->successSaved().c_str();

 а использовать члены класса, а может даже использовать StringList. Хотя это накладывает другие сложности, но использование 1 массива упрощает класс....
Код

sStatusBar1->Panels->Items[0]->Text = m_messages->successSaved;
или
sStatusBar1->Panels->Items[0]->Text = m_messages->ListLang->Strings[1];
 
Так не придется описывать каждый возврат, хотя это не так сложно, но явно будет лишней писаниной. В классе сделать всего одну функцию, которая будет загружать определенный вид ini файла в зависимости от настроек!
Код

class Lang
{
 public:
 Lang ();
~Lang ();
 bool LoadLang (AnsiString Lang); //Здесь Lang - путь к файлу с определенным языком.
 // перечислить все нужные члены классы или просто StringList
}


Это сообщение отредактировал(а) vikaz - 29.3.2010, 05:34


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
borisbn
Дата 29.3.2010, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Кстати, vikaz навёл на мысль: с StringList'ом можно сделать ещё прикольней.
Заполнить его такими строками (для english):
Код

Успешно сохранено!=Successfully saved
Файл не сохранён!=Failed to save

или такими (для русского):
Код

Успешно сохранено!=Успешно сохранено!
Файл не сохранён!=Файл не сохранён!

а потом 
Код

sStatusBar1->Panels->Items[0]->Text = m_languageStringList->Values[ "Успешно сохранено!" ];




--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
RatHat
Дата 29.3.2010, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 5.9.2005

Репутация: -1
Всего: 1



Если тебе нужно реализовать многоязычную поддержку, то проще всего это делать через файлы формата .ini.
То есть, у тебя есть файлы, например, "eng.lng", "rus.lng" и еще какие-то.
А в них у тебя хранятся записи типа:

Код

1="Успешно сохранено"
2="Ошибка сохранения"
3="Научись кнопки нажимать!!!"
4="Вот так-то лучше, молодец"


Ну и для английского файла :
Код

1="Successfully saved"
2="Failed to save"
...


Ну и т.д. 
И в зависимости от того, какой у тебя язык выбран, считывать записи из того или иного файла через набор функций для работы с ini-файлами. Вот. Это будет достаточно удобно. Плюс, можно тогда легко добавлять новые языки - докидываешь в папку еще один файл, например, "fran.lng" и всё)

Это сообщение отредактировал(а) RatHat - 29.3.2010, 11:30
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
DCamer
Дата 29.3.2010, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



borisbn, vikaz, RatHat, как я понимаю во всех примерах TIniFile?
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
borisbn
Дата 29.3.2010, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



DCamer, нет. В моём последнем примере строки вида
Код

Успешно сохранено!=Successfully saved
Файл не сохранён!=Failed to save

заносятся в обычный файл, потом делается
Код

m_languageStringList->LoadFromFile( имя файла );



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
RatHat
Дата 29.3.2010, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 5.9.2005

Репутация: -1
Всего: 1



DCamer, да, через TIniFile достаточно удобно получается)
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
DCamer
Дата 29.3.2010, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



RatHat, и каким образом его применить как описали вы?
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
RatHat
Дата 29.3.2010, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 5.9.2005

Репутация: -1
Всего: 1



DCamer, ну как...я ж говорю, делаешь несколько файлов просто разных)

как-то типа вот:

Код

TIniFile * MyFile = new TIniFile("MyProgram.ini"); //конфигурационный файл программы.

AnsiString lang = MyIni->ReadString("system","language","rus"); /*считываешь из кофигурационного файла значение параметра "language"*/

AnsiString LangFileName = AnsiString("\\langs\\messages_" + lang + ".lng"); //файл, например, "messages_rus.lng"

TIniFile *LangFile = new TiniFile(LangFileName); 

ShowMessage(LangFile->ReadString("Warnings", "WrongWord","Внимание, возможно это слово неверно написано!" )); 


как-то так, я писал не проверяя кода, но саму идею ты поймёшь)
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0635 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.