View previous topic :: View next topic |
Author |
Message |
Моторокер
Joined: 06 May 2005 Posts: 1517 Location: г. Пермь (читается Перьмь)
|
(Separately) Posted: Fri May 25, 2007 15:29 Post subject: Автоопределение языка |
|
|
Добавляю в плагин автоопределение языка.
При первой загрузке сравниваю этой функцией название текущего языка со строкой Name в lng файле.
Code: | { Определение текущего языка }
function WhichLanguage: string;
var
ID: LangID;
Language: array [0..100] of char;
begin
ID:= GetSystemDefaultLangID;
VerLanguageName(ID, Language, 100);
Result:= String(Language);
end; |
Проблемы например с украинским – название языка хранится на украинском, в русская винда выдаёт его как «Украинский», т.е. автоопределение не срабатывает.
Maximus предложил делать по другому – хранить в lng файле id и сравнивать его с GetSystemDefaultLangID, как в decClipboardFS.
Думаю сделать подобное в дополнение к первому способу, только в id указывать несколько значений, чтобы автоматом определять язык для языков, используемых в нескольких странах.
Залез в Windows.pas, там есть такие строчки:
Code: | (*
* Language IDs.
*
* The following two combinations of primary language ID and
* sublanguage ID have special semantics:
*
* Primary Language ID Sublanguage ID Result
* ------------------- --------------- ------------------------
* LANG_NEUTRAL SUBLANG_NEUTRAL Language neutral
* LANG_NEUTRAL SUBLANG_DEFAULT User default language
* LANG_NEUTRAL SUBLANG_SYS_DEFAULT System default language
*)
const
{ Primary language IDs. } |
Типа язык и подъязык. Не понял, как их можно использовать и можно ли. _________________ плагины для Total Commander, статьи Graphics Converter; NSCopy; SEO HTML; KillOK; Плагин на Delphi
ПармаСруб - строительство домов и бань в Перми |
|
Back to top |
|
|
Nik
Joined: 01 Jan 2005 Posts: 583 Location: Киров
|
(Separately) Posted: Sat Jul 14, 2007 18:48 Post subject: |
|
|
Английское название языка можно вытащить функцией (возвращает значение типа string)
Code: | GetLocaleInformation(LOCALE_SENGLANGUAGE) |
Использую этот способ уже давно (в AmpView и не только) - никаких проблем ни с одним языком не возникало.
Выглядит всё примерно так:
Code: |
if FileExists(PlugDir+'\Language\'+GetIniString('main', 'language', GetLocaleInformation(LOCALE_SENGLANGUAGE)+'.lng', IniFile))
then LoadLang(PlugDir+'\Language\'+GetIniString('main', 'language', GetLocaleInformation(LOCALE_SENGLANGUAGE)+'.lng', IniFile))
|
_________________ Качественный хостинг. |
|
Back to top |
|
|
Моторокер
Joined: 06 May 2005 Posts: 1517 Location: г. Пермь (читается Перьмь)
|
(Separately) Posted: Mon Jul 16, 2007 14:29 Post subject: |
|
|
Maximus предложил использовать только id языка, я так и сделал + если совпадает id полностью, открывают этот файл. Если полностью не совпадает, сравниваю только первые 2 байта. Таким образом, неважно что за язык и как он назван – русский например сработает для всех стран, где основной язык – русский. А то есть всякие подъязыки экзотические, на каждый не запасёшься английских названий. _________________ плагины для Total Commander, статьи Graphics Converter; NSCopy; SEO HTML; KillOK; Плагин на Delphi
ПармаСруб - строительство домов и бань в Перми |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|