71
70
EMOFileError = class(Exception);
73
procedure GetLanguageIDs(var Lang, FallbackLang: string);
74
74
procedure TranslateResourceStrings(AFile: TMOFile);
75
75
procedure TranslateResourceStrings(const AFilename: String);
80
uses {$ifdef win32} windows, {$endif}dos;
83
83
GettextUsed: Boolean;
211
211
// Resourcestring translation procedures
212
212
// -------------------------------------------------------
215
Define USEITERATOR if you want to translate the strings using
216
the SetResourceStrings call. This is not recommended for this
217
particular iplementation, since we must pass through a global
218
variable TheFile : TMOFile. However that works too.
225
function Translate (Name,Value : AnsiString; Hash : Longint) : AnsiString;
215
function Translate (Name,Value : AnsiString; Hash : Longint; arg:pointer) : AnsiString;
228
Result:=TheFile.Translate(Value,Hash);
217
Result:=TMOFile(arg).Translate(Value,Hash);
231
221
procedure TranslateResourceStrings(AFile: TMOFile);
223
SetResourceStrings(@Translate,AFile);
228
procedure GetLanguageIDs(var Lang, FallbackLang: string);
230
Buffer: array[1..4] of char;
237
SetResourceStrings(@Translate);
237
UserLCID := GetUserDefaultLCID;
238
if GetLocaleInfo(UserLCID, LOCALE_SABBREVLANGNAME, @Buffer, 4)<>0 then
239
FallbackLang := lowercase(copy(Buffer,1,2));
240
if GetLocaleInfo(UserLCID, LOCALE_SABBREVCTRYNAME, @Buffer, 4)<>0 then begin
241
Country := copy(Buffer,1,2);
243
// some 2 letter codes are not the first two letters of the 3 letter code
244
// there are probably more, but first let us see if there are translations
245
if (Buffer='PRT') then Country:='PT';
247
Lang := FallbackLang+'_'+Country;
241
procedure TranslateResourceStrings(AFile: TMOFile);
243
i, j, count: Integer;
246
for i:=0 to ResourceStringTableCount - 1 do
248
count := ResourceStringCount(I);
249
for j := 0 to count - 1 do
251
s := AFile.Translate(GetResourceStringDefaultValue(i, j),
252
GetResourceStringHash(i, j));
253
if Length(s) > 0 then
255
SetResourceStringValue(i, j, s);
263
procedure TranslateResourceStrings(const AFilename: String);
266
lang, FallbackLanguage: String;
253
procedure GetLanguageIDs(var Lang, FallbackLang: string);
268
255
lang := GetEnv('LC_ALL');
269
256
if Length(lang) = 0 then
276
263
exit; // no language defined via environment variables
266
FallbackLang := Copy(lang, 1, 2);
280
FallbackLanguage := Copy(lang, 1, 2);
270
procedure TranslateResourceStrings(const AFilename: String);
273
lang, FallbackLang: String;
275
GetLanguageIDs(Lang, FallbackLang);
282
mo := TMOFile.Create(Format(AFilename, [FallbackLanguage]));
277
mo := TMOFile.Create(Format(AFilename, [FallbackLang]));
284
279
TranslateResourceStrings(mo);