Piszę program (C/WinAPI) i chcę zrobić GUI w różnych językach (np. Polski, Angielski).
Mój pomysł to:
//(...)
unsigned int LanguageIndex = 0; //0=English, 1=Polish
char szMainDialogTexts[8][1024][512];
INT_PTR CALLBACK MainDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
{
//angielskie napisy
FILE * pFile = NULL;
fopen_s(&pFile, "english.txt", "r");
int i = 0;
while(!feof(pFile))
{
fgets(szMainDialogTexts[0][i], 512, pFile);
i++;
}
fclose(pFile);
//polskie napisy
fopen_s(&pFile, "polish.txt", "r");
i = 0;
while(!feof(pFile))
{
fgets(szMainDialogTexts[1][i], 512, pFile);
i++;
}
fclose(pFile);
}
break;
case WM_COMMAND:
switch(wParam)
{
case IDC_TESTBTN: //wyświetl napisy na kontrolce StaticText
{
int i = 0;
while(lstrcmp(szMainDialogTexts[LanguageIndex][i], "eof") != 0)
{
SetDlgItemText(hwndDlg, IDC_LABEL1, szMainDialogTexts[LanguageIndex][i]);
Sleep(1000);
i++;
}
}
break;
case IDC_CHANGEBTN: //zmień język, jak będzie wiecej jezykow to zrobie liste, albo RadioButton
{
if(LanguageIndex == 0)
LanguageIndex = 1;
else if(LanguageIndex == 1)
LanguageIndex = 0;
}
break;
}
break;
case WM_CLOSE:
ExitProcess(0);
break;
}
return 0;
}
//(...)
english.txt
Green
Good morning
I like You
eof
polish.txt
Zielony
Dzień dobry
Lubię Cię
eof
Powyższy kod działa.
Moje pytania:
- Czy powyższy kod nadaje się do użycia w programie, co o nim sądzicie?
- Nie chcę zaprzęgać dodatkowych bibliotek (XML czy coś), macie jakiś lepszy pomysł niż mój?
- Tablic na napisy ( np. char szMainDialogTexts[8][1024][512]; ) będzie tyle ile okien ma program, czy to nie będzie spowalniało aplikacji, albo zabierało dużo pamięci (takie duże wielowymiarowe tablice)?
Wszelkie sugestie, pomysły, komentarze, krytyka mile widziane.
pozdrawiam