Tłumaczenie Aplikacji stworzonej w Lazarus za pomocą i18n

Tłumaczenie Aplikacji stworzonej w Lazarus za pomocą i18n
Programista Art
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
0

Cześć. Mam takie pytanie jak tłumaczyć tekst który jest w ComBoBox i w Memo?
To działa dobrze dla zmiennych na przykład dla messageDlg, showMessage

Kopiuj
resourcestring
  DatabaseCaption = 'Database';
//ma być przed implementation   
implementation
{$R *.lfm}  

  //użycie
procedure TForm1.AddCaptionStringGrid;   
begin
  StringGrid.Cells[1,0] := DatabaseCaption;  //Będzie przetłumaczony tekst na różne języki
end;

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12269
1
Programista Art napisał(a):

Cześć. Mam takie pytanie jak tłumaczyć tekst który jest w ComBoBox i w Memo?

Pamiętaj, że w Lazarusie istnieje gotowa funkcjonalność do tłumaczenia interfejsu użytkownika, zwana i18n — poczytaj co nieco na ten temat. Jeśli nie chcesz z niej korzystać, to test wystarczy odczytać z zadanej właściwości kontrolki, przetłumaczyć, a na koniec przypisać do tej samej właściwości.

Napisz coś więcej, bo na razie nie wiadomo co dokładnie chcesz zrobić. Nie wiem czy chcesz dodać wersje językowe do całego programu, czy ręcznie i w trakcie działania programu tłumaczyć wybrane teksty kontrolek. Szczegóły by się przydały.

Programista Art
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
0
furious programming napisał(a):
Programista Art napisał(a):

Cześć. Mam takie pytanie jak tłumaczyć tekst który jest w ComBoBox i w Memo?

Pamiętaj, że w Lazarusie istnieje gotowa funkcjonalność do tłumaczenia interfejsu użytkownika, zwana i18n — poczytaj co nieco na ten temat. Jeśli nie chcesz z niej korzystać, to test wystarczy odczytać z zadanej właściwości kontrolki, przetłumaczyć, a na koniec przypisać do tej samej właściwości.

Napisz coś więcej, bo na razie nie wiadomo co dokładnie chcesz zrobić. Nie wiem czy chcesz dodać wersje językowe do całego programu, czy ręcznie i w trakcie działania programu tłumaczyć wybrane teksty kontrolek. Szczegóły by się przydały.

Część, korzystam z i18n i podczas zmiany języka chce żeby w Memo i w ComBoBox zmieniał się tekst na wybrany język

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12269
1
Kopiuj
Memo.Text     := MyFunctionToTranslateText(Memo.Text);
ComboBox.Text := MyFunctionToTranslateText(ComboBox.Text);

To samo jeśli chodzi o inne kontrolki mogące zawierać tekst podawany przez użytkownika (ComboBox, Edit itd.). Jedyne co potrzebujesz to funkcji/metody, która przyjmie tekst wejściowy (i opcjonalnie dane na temat języka źródłowego i docelowego), przetłumaczy tekst oraz zwróci wynik, który trzeba przypisać do tej samej właściwości kontrolki, z której pobrałeś ten tekst.

Programista Art
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
0
furious programming napisał(a):
Kopiuj
Memo.Text     := MyFunctionToTranslateText(Memo.Text);
ComboBox.Text := MyFunctionToTranslateText(ComboBox.Text);

To samo jeśli chodzi o inne kontrolki mogące zawierać tekst podawany przez użytkownika (ComboBox, Edit itd.). Jedyne co potrzebujesz to funkcji/metody, która przyjmie tekst wejściowy (i opcjonalnie dane na temat języka źródłowego i docelowego), przetłumaczy tekst oraz zwróci wynik, który trzeba przypisać do tej samej właściwości kontrolki, z której pobrałeś ten tekst.

Dziękuje, spróbuje

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12269
1

W razie gdybyś chciał dynamicznie przetłumaczyć dosłownie wszystkie teksty w oknie, to zawsze możesz skorzystać z RTTI i rekurencyjnie przelecieć wszystko co ma właściwości Caption, Text, Hint itd. (albo dynamicznie wyszukując wszystkie właściwości typu String, TStringList itp.), zaczynając od instancji formularza, aż do samych kontrolek.

SK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 101
1

Przypuszczam, że ComboBox ma więcej niż jeden element i chcesz przetłumaczyć wszystkie elementy?
Do tłumaczenia wszystkich elementów można użyć pętli:

Kopiuj
for i:=0 to Pred(Combobox.Items.Count) do
  ComboBox.Items[i]:=MyFunctionToTranslateText(ComboBox.Items[i]);

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.