diff --git a/applications/lazedit/lazedit_config.pas b/applications/lazedit/lazedit_config.pas index afa86ad87..370cb35ff 100644 --- a/applications/lazedit/lazedit_config.pas +++ b/applications/lazedit/lazedit_config.pas @@ -40,8 +40,8 @@ unit lazedit_config; interface uses - SysUtils, Classes, EditorPageControl, lazedit_constants, Forms,{FCL_Misc,} IniFiles, - LCLProc; + SysUtils, Classes, EditorPageControl, lazedit_constants, lazedit_translations, + Forms, IniFiles, LCLProc; type //globale type for all configurable options @@ -73,7 +73,7 @@ type FileTypeMaskList: TFileTypeMaskList; TemplateMaskList: String; RecentFiles: Array[0..MruEntries - 1] of String; - Translation: Integer; + Translation: TLanguageIds; end; function LoadOptions(var Options: TLazEditOptions; FileName: String): Boolean; @@ -114,6 +114,7 @@ var ftIndex: TEditorFileType; S: String; i: Integer; + Lang: LongInt; begin Result := False; try @@ -167,7 +168,11 @@ begin end; // Translation and other general - Options.Translation := Ini.ReadInteger(scGeneral, idTranslation, 0); + Lang := Ini.ReadInteger(scGeneral, idTranslation, 0); + if (Lang >= Ord(Low(TLanguageIds))) and (Lang <= Ord(High(TLanguageIds))) then + Options.Translation := TLanguageIds(Lang) + else + Options.Translation := lidEnglish; finally Ini.Free; @@ -240,7 +245,7 @@ begin end; // Translation and other general - Ini.WriteInteger(scGeneral, idTranslation, Options.Translation); + Ini.WriteInteger(scGeneral, idTranslation, Ord(Options.Translation)); try Ini.UpdateFile; diff --git a/applications/lazedit/lazedit_translations.pas b/applications/lazedit/lazedit_translations.pas index d6daf4ae9..362cfbc50 100644 --- a/applications/lazedit/lazedit_translations.pas +++ b/applications/lazedit/lazedit_translations.pas @@ -46,9 +46,16 @@ type { TTranslations } + TLanguageIds = (lidEnglish, lidDutch, lidPortuguese); + +const + MenuLangNameSuffixes: Array[TLanguageIds] of string = ('English','Dutch','Portuguese'); + +type + TTranslations = class(TObject) private - FLanguageId: Integer; + FLanguageId: TLanguageIds; public { Main form } { mnuEditPasteTableContentTab: TMenuItem; @@ -213,8 +220,8 @@ type procedure TranslateToEnglish; procedure TranslateToDutch; procedure TranslateToPortuguese; - procedure TranslateToLanguageID(AID: Integer); - function GetCurrentLanguageID: Integer; + procedure TranslateToLanguageID(ALangId: TLanguageIds); + function GetCurrentLanguageID: TLanguageIds; end; var @@ -642,18 +649,18 @@ begin mnuViewFontsize := 'Tamanho da &fonte'; end; -procedure TTranslations.TranslateToLanguageID(AID: Integer); +procedure TTranslations.TranslateToLanguageID(ALangId: TLanguageIds); begin - FLanguageID := AID; - case AID of - 1: TranslateToDutch; - 2: TranslateToPortuguese; + FLanguageID := ALangId; + case ALangId of + lidDutch: TranslateToDutch; + lidPortuguese: TranslateToPortuguese; else TranslateToEnglish; end; end; -function TTranslations.GetCurrentLanguageID: Integer; +function TTranslations.GetCurrentLanguageID: TLanguageIds; begin Result := FLanguageID; end; diff --git a/applications/lazedit/main.lfm b/applications/lazedit/main.lfm index 5211f966d..d8ad05b8a 100644 --- a/applications/lazedit/main.lfm +++ b/applications/lazedit/main.lfm @@ -1757,16 +1757,16 @@ object LazEditMainForm: TLazEditMainForm Caption = 'mnuTools' object mnuToolsLanguage: TMenuItem Caption = 'mnuToolsLanguage' - object mnuEnglish: TMenuItem + object mnuLanguageEnglish: TMenuItem Caption = 'English' OnClick = mnuLanguageChangeClick end - object mnuDutch: TMenuItem + object mnuLanguageDutch: TMenuItem Tag = -1 Caption = 'Dutch' OnClick = mnuLanguageChangeClick end - object mnuPortuguese: TMenuItem + object mnuLanguagePortuguese: TMenuItem Tag = -2 Caption = 'Português' OnClick = mnuLanguageChangeClick diff --git a/applications/lazedit/main.pp b/applications/lazedit/main.pp index 8dd8ffd6f..4f88d510e 100644 --- a/applications/lazedit/main.pp +++ b/applications/lazedit/main.pp @@ -112,9 +112,9 @@ type mnuToolbarsMain: TMenuItem; mnuInsertSep2: TMenuItem; mnuToolsLanguage: TMenuItem; - mnuEnglish: TMenuItem; - mnuDutch: TMenuItem; - mnuPortuguese: TMenuItem; + mnuLanguageEnglish: TMenuItem; + mnuLanguageDutch: TMenuItem; + mnuLanguagePortuguese: TMenuItem; mnuTools: TMenuItem; mnuAbout: TMenuItem; mnuViewFont: TMenuItem; @@ -455,6 +455,7 @@ type procedure UpdateMenuItems; procedure CreateMruMenuItemsArray; function TryHlMenuTagToFileType(ATag: PtrInt; out AFileType: TEditorFileType): Boolean; + function TryLangMenuTagToLangId(ATag: PtrInt; out ALangId: TLanguageIds): Boolean; function FileTypeToFilterIndex(const Index: TEditorFileType): Integer; procedure ConstructOpenDialogFileFilters; @@ -629,9 +630,15 @@ begin end; procedure TLazEditMainForm.mnuLanguageChangeClick(Sender: TObject); +var + ALangId: TLanguageIds; begin - vTranslations.TranslateToLanguageID(Abs(TMenuItem(Sender).Tag)); - DoTranslateAll(); + if TryLangMenuTagToLangId((Sender as TMenuItem).Tag, ALangId) then + begin + vTranslations.TranslateToLanguageID(ALangId); + DoTranslateAll(); + end + else debugln(Format('Error: Invalid tag for MenuItem %s: %x',[(Sender as TMenuItem).Name,(Sender as TMenuItem).Tag]));; end; @@ -1447,6 +1454,7 @@ begin end; // Translation + vTranslations.TranslateToLanguageID(Options.Translation); // Toolbars @@ -1665,6 +1673,15 @@ begin if Result then AFileType := TEditorFileType(ATag); end; +function TLazEditMainForm.TryLangMenuTagToLangId(ATag: PtrInt; out + ALangId: TLanguageIds): Boolean; +begin + ATag := ATag and $FF0000; + ATag := ATag shr 16; + Result := (ATag >= Ord(Low(TLanguageIds))) and (ATag <= Ord(High(TLanguageIds))); + if Result then ALangId := TLanguageIds(ATag); +end; + function TLazEditMainForm.FileTypeToFilterIndex(const Index: TEditorFileType ): Integer; const @@ -1685,6 +1702,7 @@ var //NE: Boolean; //NS: Boolean; Index: TEditorFileType; + LangId: TLanguageIds; begin for i := 0 to self.ComponentCount - 1 do begin @@ -1692,6 +1710,7 @@ begin N := C.Name; if (C is TAction) or (C is TMenuItem) then begin + C.Tag := 0; //initialize all Tags to 0 //Things that need an open editor if Pos('LAYOUT',UpperCase(N)) > 0 then C.Tag := C.Tag or tgNeedsEditor; if Pos('EDIT',UpperCase(N)) > 0 then C.Tag := C.Tag or tgNeedsEditor; @@ -1714,6 +1733,16 @@ begin end; end; end; + if Pos('MNULANGUAGE', Uppercase(N)) > 0 then + begin + for LangId := Low(TLanguageIds) to High(TLanguageIds) do + begin + if ('MNULANGUAGE' + Uppercase(MenuLangNameSuffixes[LangId])= Uppercase(N)) then + begin + C.Tag := C.Tag or (Ord(LangId) shl 16); + end; + end; + end; //Things that need text on the clipboard if Pos('PASTE',UpperCase(N)) > 0 then C.Tag := C.Tag or tgNeedsClipPaste; //Things that need a selection in the editor @@ -1738,6 +1767,7 @@ begin { if (C is TMenuItem) or (C is TAction) then + //if (C = mnuLanguageEnglish) or (C = mnuLanguageDutch) or (C = mnuLanguagePortuguese) then begin NE := (C.Tag and tgNeedsEditor) > 0; NS := (C.Tag and tgNeedsSelection) > 0;