2012-05-13 62 views
1

有沒有辦法獲得正在運行的操作系統的語言?我希望能夠在開始時更改程序的語言。操作系統的語言?

+0

如果您想遵循國際化的最佳實踐,您不應該在應用程序啓動時更改***語言,您應該在應用程序啓動時選擇***用戶的***語言。正如你從下面的答案中看到的,在LUA中沒有這樣做的標準多平臺。更糟糕的是,操作系統本機功能和操作系統在Windows上的LCID存在差異。***不是你想要的,你正在尋找用戶LCID(相信我,它可能會有所不同)。 –

+0

是的,謝謝。我會讓用戶選擇他最喜歡的語言,這是最好的解決方案。感謝你們所有人! – user1248569

+0

不,這是最糟糕的解決方案。想象一下,系統中的所有應用程序都會這樣做 - 它們基本上會迫使您始終選擇語言(甚至在第一次啓動時)。我不瞭解你,但在我的情況下,你會在這種情況下聽到很多字母。操作系統具有區域首選項設置是有原因的 - 所以您可以選擇一次您的首選項。就LUA而言,我很確定有人寫了一些很好的腳本來檢測語言,只是Google它。 –

回答

0

也許

 print(os.setlocale(nil)); 

可以給你所需要的信息,雖然你可能需要分析它一下。或者你可以訪問正確的env var,例如

print(os.getenv("LANG")); 

給en_GB.utf8我的系統上,這樣你就可以推斷出我的系統「談判」的英語。

+0

感謝您的回答,但當我使用os.getenv進行嘗試時,我得到了「無」。有沒有其他辦法可以解決這個問題? – user1248569

+0

envar沒有設置,但在「* nix」系統上(它也可以在windows上,但是如果你看到零,它不是!);如果你在windows上,你可以嘗試系統特定的方式,比如挖掘寄存器或者使用一些API(GetUserDefaultLangID應該做的);那麼你的程序當然是不可移植的。我不知道lua是否有「win32」模塊 – ShinTakezou

1

這是平臺特定的,超出了Lua標準庫的處理範圍。在一些的情況下,你可能能夠從getenv或其他東西中找到它,但你不能以跨平臺的方式依賴它。

你可以寫一個小的擴展模塊,你移植到你需要支持,讓你爲特定的操作系統信息的各種平臺。