使用setlocale使用正确的代码

时间:2017-02-22 18:10:03

标签: mfc setlocale

我看过setlocale,但我很难找到我想要的东西。

在我的代码中,我有:

void CMeetingScheduleAssistantApp::SetLocale()
{
    CString strLang[NUM_LANGUAGES] =
    {
        _T("eng"), _T("deu"), _T("esp"), _T("ita"),
        _T("plk"), _T("fra"), _T("ptb"), _T("nld"),
        _T("sve"), _T("slv"), _T("csy"), _T("fin"),
        _T("dan"), _T("ukr"), _T("rus"),
        _T("eng"), /*_T("fpo") Tagalog */
        _T("eng"), /* Haitian Creole */
        _T("eng"), /* Afrikaans */
        _T("sqi"),
        _T("chs"), /* Chinese (Simplified) */
        _T("hrv"),
        _T("trk"),
        _T("eng"),  /* Twi */
        _T("swk"),  // AJT v11.3.4
        _T("eng"),  // _T("eti") Estonian AJT v12.0.5
        _T("rom"),  // Romanian AJT v12.0.8
        _T("ell"),  // Greek AJT v13.0.0
        _T("bgr"),  // Bulgarian AJT v13.0.2
        _T("eng"),  // Malagasy AJT v14.0.4
        _T("ara"),  // Arabic AJT v16.0.0
        _T("ind"),  // Indonesian AJT v16.0.2
        _T("hin"),  // Hindi AJT v16.0.7
        _T("tai"),  // Tamil AJT v16.1.0
        _T("vit"),  // Vietnamese v16.1.1
        _T("eng"),  // Zulu AJT v16.1.6
        _T("eng"),  // Gun AJT v17.0.9
        _T("ln-CG"),  // Lingala v17.0.9
        _T("ptg")   // Portuguese Portugal v17.1.0
        // Add more languages here
    };

    _tsetlocale(LC_ALL, strLang[m_eLanguage - LANGUAGE_ENGLISH]);
}

这已经完成并且始终正常。拨打此电话后日期格式正确。

但是看看上面提到的帮助主题提供的链接,我找不到像ptb等列出的代码。仅pt-BR

我认为我的代码仍然有效,是否可以在任何地方记录?

1 个答案:

答案 0 :(得分:1)

setlocale需要Locale Names, Languages, and Country/Region Strings下记录的区域设置名称。可以通过locale name标识区域设置:

  

locale名称基于RFC 4646(Windows Vista及更高版本)的语言标记惯例,由LOCALE_SNAME表示。通常,模式< language> - < REGION>用来。这里,language是一个小写的ISO 639语言代码。可用时使用ISO 639-1中的代码。否则,使用ISO 639-2 / T的代码。

     

[...]

     

如果区域设置是中性区域设置(无区域),则LOCALE_SNAME值将遵循模式< language>。

ISO 639-2三字母语言代码的完整列表发布在wikipedia