LCL, DefaultTranslator: reduce code duplication, patch from Mario Ray Mahardhika, bug #23986

git-svn-id: trunk@40470 -
This commit is contained in:
maxim 2013-03-03 22:26:46 +00:00
parent 5f5d746e7f
commit dfe9c8ba18

View File

@ -87,78 +87,74 @@ var
function GetLocaleFileName(const LangID, LCExt: string): string; function GetLocaleFileName(const LangID, LCExt: string): string;
var var
LangShortID: string; LangShortID: string;
AppDir,LCFileName,FullLCFileName: String;
begin begin
if LangID <> '' then if LangID <> '' then
begin begin
AppDir := ExtractFilePath(ParamStrUTF8(0));
LCFileName := ChangeFileExt(ExtractFileName(ParamStrUTF8(0)), LCExt);
FullLCFileName := ChangeFileExt(ExtractFileName(ParamStrUTF8(0)), '.' + LangID) + LCExt;
//ParamStrUTF8(0) is said not to work properly in linux, but I've tested it //ParamStrUTF8(0) is said not to work properly in linux, but I've tested it
Result := ExtractFilePath(ParamStrUTF8(0)) + LangID + Result := AppDir + LangID + DirectorySeparator + LCFileName;
DirectorySeparator + ChangeFileExt(ExtractFileName(ParamStrUTF8(0)), LCExt);
if FileExistsUTF8(Result) then if FileExistsUTF8(Result) then
exit; exit;
Result := ExtractFilePath(ParamStrUTF8(0)) + 'languages' + DirectorySeparator + LangID + Result := AppDir + 'languages' + DirectorySeparator + LangID +
DirectorySeparator + ChangeFileExt(ExtractFileName(ParamStrUTF8(0)), LCExt); DirectorySeparator + LCFileName;
if FileExistsUTF8(Result) then if FileExistsUTF8(Result) then
exit; exit;
Result := ExtractFilePath(ParamStrUTF8(0)) + 'locale' + DirectorySeparator Result := AppDir + 'locale' + DirectorySeparator + LangID +
+ LangID + DirectorySeparator + ChangeFileExt(ExtractFileName(ParamStrUTF8(0)), LCExt); DirectorySeparator + LCFileName;
if FileExistsUTF8(Result) then if FileExistsUTF8(Result) then
exit; exit;
Result := ExtractFilePath(ParamStrUTF8(0)) + 'locale' + DirectorySeparator Result := AppDir + 'locale' + DirectorySeparator + LangID +
+ LangID + DirectorySeparator + 'LC_MESSAGES' + DirectorySeparator + DirectorySeparator + 'LC_MESSAGES' + DirectorySeparator + LCFileName;
ChangeFileExt(ExtractFileName(ParamStrUTF8(0)), LCExt);
if FileExistsUTF8(Result) then if FileExistsUTF8(Result) then
exit; exit;
{$IFDEF UNIX} {$IFDEF UNIX}
//In unix-like systems we can try to search for global locale //In unix-like systems we can try to search for global locale
Result := '/usr/share/locale/' + LangID + '/LC_MESSAGES/' + Result := '/usr/share/locale/' + LangID + '/LC_MESSAGES/' + LCFileName;
ChangeFileExt(ExtractFileName(ParamStrUTF8(0)), LCExt);
if FileExistsUTF8(Result) then if FileExistsUTF8(Result) then
exit; exit;
{$ENDIF} {$ENDIF}
//Let us search for reducted files //Let us search for reducted files
LangShortID := copy(LangID, 1, 2); LangShortID := copy(LangID, 1, 2);
//At first, check all was checked //At first, check all was checked
Result := ExtractFilePath(ParamStrUTF8(0)) + LangShortID + Result := AppDir + LangShortID + DirectorySeparator + LCFileName;
DirectorySeparator + ChangeFileExt(ExtractFileName(ParamStrUTF8(0)), LCExt);
if FileExistsUTF8(Result) then if FileExistsUTF8(Result) then
exit; exit;
Result := ExtractFilePath(ParamStrUTF8(0)) + 'languages' + DirectorySeparator + Result := AppDir + 'languages' + DirectorySeparator +
LangShortID + DirectorySeparator + ChangeFileExt( LangShortID + DirectorySeparator + LCFileName;
ExtractFileName(ParamStrUTF8(0)), LCExt);
if FileExistsUTF8(Result) then if FileExistsUTF8(Result) then
exit; exit;
Result := ExtractFilePath(ParamStrUTF8(0)) + 'locale' + DirectorySeparator Result := AppDir + 'locale' + DirectorySeparator
+ LangShortID + DirectorySeparator + ChangeFileExt( + LangShortID + DirectorySeparator + LCFileName;
ExtractFileName(ParamStrUTF8(0)), LCExt);
if FileExistsUTF8(Result) then if FileExistsUTF8(Result) then
exit; exit;
Result := ExtractFilePath(ParamStrUTF8(0)) + 'locale' + DirectorySeparator Result := AppDir + 'locale' + DirectorySeparator + LangShortID +
+ LangShortID + DirectorySeparator + 'LC_MESSAGES' + DirectorySeparator + DirectorySeparator + 'LC_MESSAGES' + DirectorySeparator + LCFileName;
ChangeFileExt(ExtractFileName(ParamStrUTF8(0)), LCExt);
if FileExistsUTF8(Result) then if FileExistsUTF8(Result) then
exit; exit;
//Full language in file name - this will be default for the project //Full language in file name - this will be default for the project
//We need more careful handling, as it MAY result in incorrect filename //We need more careful handling, as it MAY result in incorrect filename
try try
Result := ExtractFilePath(ParamStrUTF8(0)) + ChangeFileExt(ExtractFileName(ParamStrUTF8(0)), '.' + LangID) + LCExt; Result := AppDir + FullLCFileName;
if FileExistsUTF8(Result) then if FileExistsUTF8(Result) then
exit; exit;
//Common location (like in Lazarus) //Common location (like in Lazarus)
Result := ExtractFilePath(ParamStrUTF8(0)) + 'locale' + DirectorySeparator + Result := AppDir + 'locale' + DirectorySeparator + FullLCFileName;
ChangeFileExt(ExtractFileName(ParamStrUTF8(0)), '.' + LangID) + LCExt;
if FileExistsUTF8(Result) then if FileExistsUTF8(Result) then
exit; exit;
Result := ExtractFilePath(ParamStrUTF8(0)) + 'languages' + Result := AppDir + 'languages' + DirectorySeparator + FullLCFileName;
DirectorySeparator + ChangeFileExt(ExtractFileName(ParamStrUTF8(0)), '.' + LangID) + LCExt;
if FileExistsUTF8(Result) then if FileExistsUTF8(Result) then
exit; exit;
except except
@ -166,22 +162,22 @@ var
end; end;
{$IFDEF UNIX} {$IFDEF UNIX}
Result := '/usr/share/locale/' + LangShortID + '/LC_MESSAGES/' + Result := '/usr/share/locale/' + LangShortID + '/LC_MESSAGES/' +
ChangeFileExt(ExtractFileName(ParamStrUTF8(0)), LCExt); LCFileName;
if FileExistsUTF8(Result) then if FileExistsUTF8(Result) then
exit; exit;
{$ENDIF} {$ENDIF}
Result := ExtractFilePath(ParamStrUTF8(0)) + ChangeFileExt(
ExtractFileName(ParamStrUTF8(0)), '.' + LangShortID) + LCExt; FullLCFileName := ChangeFileExt(ExtractFileName(ParamStrUTF8(0)), '.' + LangShortID) + LCExt;
Result := AppDir + FullLCFileName;
if FileExistsUTF8(Result) then if FileExistsUTF8(Result) then
exit; exit;
Result := ExtractFilePath(ParamStrUTF8(0)) + 'locale' + DirectorySeparator + Result := AppDir + 'locale' + DirectorySeparator + FullLCFileName;
ChangeFileExt(ExtractFileName(ParamStrUTF8(0)), '.' + LangShortID) + LCExt;
if FileExistsUTF8(Result) then if FileExistsUTF8(Result) then
exit; exit;
Result := ExtractFilePath(ParamStrUTF8(0)) + 'languages' + DirectorySeparator + Result := AppDir + 'languages' + DirectorySeparator + FullLCFileName;
ChangeFileExt(ExtractFileName(ParamStrUTF8(0)), '.' + LangShortID) + LCExt;
if FileExistsUTF8(Result) then if FileExistsUTF8(Result) then
exit; exit;
end; end;