我的Delphi(XE 10)程序使用nonunicode(單字節)遺留火鳥數據庫(字符集NONE),因此它的數據(即從中讀取或保存到數據庫)取決於Windows區域爲nonunicode程序。根據此Windows設置,相同的數據庫字符可以在程序中顯示爲\ u0101(正確)或\ u0432(即不正確)。 IBX用作數據庫訪問技術。SetThreadLocale整個Delphi應用程序
我的程序只適用中的指定地方進行nonunicode方案,這是客戶端可以接受的。問題是 - 無論Windows設置如何,我都可以讓程序感受特定的預定義語言環境?
我想,我應該使用SetThreadLocale
這一點。但是在哪裏放這個電話?在主窗體的初始化部分調用這個函數是足夠的還是應該在項目源文件(應用程序被初始化)中調用它,或者我應該在每個模塊的初始化部分調用它?
由於意見我意識到的GetThreadLocale returns different value than GetUserDefaultLCID? 我現在明白,我應該寫更多的代碼:
SetThreadLocale(my_preferred_locale_id);
SysLocale.DefaultLCID := my_preferred_locale_id;
GetFormatSettings;
但主要的問題仍然存在 - 在那裏把這段代碼 - 我應該把它進入多個地方。我有WebSnap應用程序,我猜它可以在自動和複雜的踏板管理下進行。代碼應該去哪裏?
沒有什麼幫助:
- 加入LC_CTYPE = WIN1257到TIBDatabase.Params
- 設置SetThreadLocale ......這裏,那裏到處
- 設置項目選項 - 版本信息 - 語言 - 區域設置ID
https://github.com/xupefei/Locale-Emulator區域設置仿真器是解決問題的唯一工具,但爲什麼德爾福不允許這樣做沒有外部工具?
這個答案http://stackoverflow.com/a/2947349/368364可能會給你一個更大的圖片。 – RBA
這可能也與此有關http://superuser.com/questions/167950/changing-windows-locales-on-a-per-process-basis – JensG
有作爲XE10 –