更改語言環境定義(與語言環境設置相反)
初步評論:這個問題不是關於通過更改, ,等設置語言環境,而是關於更改語言環境定義,例如 in或分別,以獲得有關更合適選項的建議,而不是更改這些系統設置。
LC_ALL``LC_TIME``LANG``/usr/share/i18n/locales/de_DE
目的是獲得ISO 時間表示並且沒有不希望的副作用。
%Y-%m-%d``%H:%M:%S
我在網上找到的建議都是不合適的(例如,將語言環境設置為“丹麥語”不會保留母語的工作日名稱拼寫)。
現在,我目前看到的獲得所需行為的唯一選擇是更改我的本地語言環境的定義
/usr/share/i18n/locales/de_DE
。這不是一個完美的解決方案,因為隨著系統更新,這些更改的文件可能會再次被覆蓋。我的問題是:
- 有沒有比更改特定係統語言環境文件更好的語言環境相關選項來獲得所需的功能?
- 更改特定語言環境定義文件時是否會出現任何問題?(在系統更新的情況下,如何防止該文件被覆蓋?)
- 定義現有語言環境文件的新特定變體並在設置中使用它會更好
LC_*
嗎?(以及如何正確地讓系統知道新的文件/定義?)- 還有其他建議嗎?
在最近的一個問題中,我問這種變化的最佳實踐是什麼。還沒有答案。不過,我可以給你我正在使用的食譜,它已被證明行之有效。所有程序都正確選擇了日期。
我的描述適用於 Ubuntu,但可能適用於 Debian 和 Mint。
準備工作
將您要自定義的語言環境複製
/usr/share/i18n/locales
到新文件中。例如cp /usr/share/i18n/locales/de_DE /usr/share/i18n/locales/de_DE@isodate
將除部分之外的所有內容調整
LC_TIME
為:copy "de_DE"
調整
LC_TIME
部分以匹配您想要的結果。您可以使用我上面連結的問題中的設置作為模板。看起來這幾乎正是您想要的。如果您的語言環境不使用“AM/PM”表示法,請將其設置為空:
t_fmt_ampm "" am_pm "";""
讓系統知道
編輯文件
/var/lib/locales/supported.d/local
並在那裡添加有關您的語言環境定義的資訊。即如果您上面的文件名是isodate
,則添加這樣的行,否則請調整:de_DE.UTF-8@isodate UTF-8
如果
/var/lib/locales/supported.d/local
不存在,則創建該名稱的文件。不要將您的更改放入該文件夾中的相應文件en
或de
文件中,因為一旦系統上的language-pack-*-base
和language-pack-*
軟體包收到更新,它們可能會被覆蓋。現在執行
dpkg-reconfigure locales
:# dpkg-reconfigure locales Generating locales... de_DE.UTF-8@isodate... done de_DE.UTF-8... up-to-date Generation complete.
在您的情況下,這將表明
de_DE.UTF-8@isodate
已生成語言環境(假設您沒有語法問題)。最後但並非最不重要的添加以下內容
/etc/default/locale
:LC_TIME="de_DE.UTF-8@isodate"
這將確保僅
LC_TIME
覆蓋使用定義的預設語言環境LANG
。重新登錄,您應該能夠在使用
date
或使用相應 libc 執行時功能的其他工具時看到新的 ISO 日期/時間。這裡的目的是在不針對系統(例如針對包管理器和朋友)工作的同時進行最少的侵入性更改。當然,您也可以簡單地創建您的語言環境的副本,以與上述類似的方式安裝它,然後調整
LANG
. 關鍵是,只要您不想冒更改被包更新覆蓋的風險,您就必須使用自定義副本(無論您進行何種自定義;即copy
,或者只是保留部分原樣原本的)。以及是否更改LANG
為指向完整的自定義語言環境定義 -或者是否添加LC_TIME
僅指向自定義語言環境定義文件的同名的相關自定義部分 - 您將無法調整全域設置之一。