LazUtils, LCL: Trim encoding from found language ID if it presents there (e. g. ru_RU.utf8) in order to always correctly load translation files like project1.ru_RU.po. Based on patch by ACTom, merge request !182.

This commit is contained in:
Maxim Ganetsky 2023-06-01 18:16:36 +03:00
parent f6a6366812
commit 42bcafe228
2 changed files with 20 additions and 0 deletions

View File

@ -210,6 +210,7 @@ function UTF16ToUTF8(const P: PWideChar; WideCnt: SizeUInt): AnsiString; overloa
// locale
procedure LazGetLanguageIDs(var Lang, FallbackLang: String);
procedure LazGetShortLanguageID(var Lang: String);
procedure LazGetTrimmedLanguageID(var Lang: String);
var
FPUpChars: array[char] of char;
@ -4070,6 +4071,7 @@ begin
{$ELSE}
GetLanguageIDs(Lang, FallbackLang);
{$ENDIF}
LazGetTrimmedLanguageID(Lang);
end;
{
@ -4090,6 +4092,20 @@ begin
if Length(Lang) > 2 then Lang := Lang[1] + Lang[2];
end;
{
Language ID sometimes can be in a form of `ru_RU.utf8`, which will prevent
loading files with language in a form of `.ru_RU.po`.
This procedure trims this encoding.
}
procedure LazGetTrimmedLanguageID(var Lang: String);
var
p: SizeInt;
begin
p := Pos('.', Lang);
if p > 0 then
Lang := Copy(Lang, 1, p - 1);
end;
procedure InitFPUpchars;
var
c: Char;

View File

@ -120,6 +120,10 @@ begin
if Lang = '' then
LazGetLanguageIDs(Lang, T);
//Trim encoding from Lang if it presents. E. g. Lang can be `ru_RU.utf8`.
if Lang <> '' then
LazGetTrimmedLanguageID(Lang);
end;
function FindLocaleFileName(LCExt, LangID, Dir, LocaleFileName: string; out FoundLang: string): string;