Tłumaczenie Aplikacji stworzonej w Lazarus za pomocą i18n

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

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;

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.

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

1
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.

0
furious programming napisał(a):
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

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.

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:

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1