Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.03.13;
Скачать: [xml.tar.bz2];

Вниз

Как восстановить текст компонент?   Найти похожие ветки 

 
GROL   (2003-03-02 12:41) [0]

Предположим, интерфейс приложения поддерживает несколько языков, русский родной. Установили другой, не важно каким путем, поработал, а как вернутся назад на русский, т.е. восстановить то что по умолчанию?
Я вижу варианты:
1. Закрыть/открыть заново приложение. Плохое решение.
2. Загрузить аналогично родной язык, но тогда надо дублировать то, что на форме и в файлах для локализации.
Существует ли способ, позволяющий восстановить в run-time из dfm-ресурсов текст, не пересоздавая саму форму?


 
Strumpf   (2003-03-02 15:19) [1]

Я использую ini-файл и при необходимости, загружаю весь текст из него...


 
Юрий Зотов   (2003-03-02 15:47) [2]

1. Все строки помещаются в DLL, а программа использует только их имена. Сколько поддерживаемых языков - столько и DLL, причем имена констант во всех одинаковые. Завтра потребовался язык племени мумба-юмба - написали еще одну DLL и все.

2. Какую DLL загрузили - такой интерфейс и получили. Надо сменить язык - выгружаем эту DLL, загружаем другую, для всех открытых форм вызываем RecreateWnd.

3. Иногда вместо DLL и правда используют INI-файлы. Остальное примерно то же самое, только строковые переменные должны быть в самой программе и нужно написать код их загрузки из INI.


 
Anatoly Podgoretsky   (2003-03-02 15:58) [3]

И обязательно сменить идеологию, язык по усолчанию должен быть английский, а то не дай бог запустят программу где локализация не русская и гуляю Вася. Кроме того пункт меню занимающийся переключением локализации толжен быть во всех на английском языке, по той же причине. Дальше как у Юрия Зотова или в зависиммости от используемой технологии


 
Strumpf   (2003-03-03 13:48) [4]

И не нужны никакие строковые переменные. Алгоритм - универсален! Перевод осуществляется по мере необходимости в run-time.


String __fastcall Translate(String InText, String Lang, TIniFile *Dict)
/* непосредственный перевод текста */
{
int PosEq = InText.Pos("=");
if (PosEq == InText.Length())
InText.Delete(PosEq,1);
String OutText = Dict->ReadString(Lang,InText,"Not Found");
if (OutText == "Not Found" )
{
Dict->WriteString(Lang,InText,InText);
Dict->UpdateFile();
if (PosEq > 0)
InText += "=";
return InText;
}
if (PosEq > 0)
OutText += "=";
return OutText;
}

void __fastcall Translate_Form(String Lang, String NameFileDict, TForm *SelectedForm)
{
// открываем словарь
TIniFile *Dict = new TIniFile(NameFileDict);
try
{
if (SelectedForm == NULL)
Application->Title = Translate(Application->Title,Lang,Dict);
// цикл по всем формам приложения
int FormCount = (SelectedForm == NULL) ? Screen->FormCount : 1;
for (int k=0; k<=FormCount-1; k++)
{
TForm *Form = (SelectedForm == NULL) ? Screen->Forms[k] : SelectedForm;
Form->Caption = Translate(Form->Caption,Lang,Dict);
// цикл по всем компонентам формы Form
for (int i=0; i<=Form->ComponentCount-1; i++)
{
TComponent *Component = Form->Components[i];
PPropInfo PropCaption = GetPropInfo((PTypeInfo)Component->ClassInfo(),"Caption");
if (PropCaption != NULL)
{
String Caption = Translate((String)GetPropValue(Component,"Caption"),Lang,Dict);
SetPropValue(Component,"Caption",Caption);
}
PPropInfo PropHint = GetPropInfo((PTypeInfo)Component->ClassInfo(),"Hint");
if (PropHint != NULL)
{
String Hint = Translate((String)GetPropValue(Component,"Hint"),Lang,Dict);
SetPropValue(Component,"Hint",Hint);
}
}
}
}
__finally
{
// освобождение памяти
delete Dict;
}
}



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.03.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
1-39290
АндрейБ
2003-03-03 15:21
2003.03.13
QuickReport: печать


6-39449
Nick_N_A
2003-01-18 07:40
2003.03.13
Web-Browser


14-39523
R
2003-02-26 03:00
2003.03.13
WINAPI


14-39503
KMI
2003-02-25 10:10
2003.03.13
Организация приложения


1-39273
Nikos
2003-03-03 18:28
2003.03.13
Поиск в реестре





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский