From: Carl Hetherington Date: Mon, 8 Apr 2024 19:19:23 +0000 (+0200) Subject: Add new setup of i18n for macOS (#2778). X-Git-Tag: v2.17.16~21 X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=35e479a49b36cb09880d3171795d39c32a498bcc Add new setup of i18n for macOS (#2778). --- diff --git a/src/wx/wx_util.cc b/src/wx/wx_util.cc index b81a9a292..4af13b52a 100644 --- a/src/wx/wx_util.cc +++ b/src/wx/wx_util.cc @@ -45,6 +45,9 @@ LIBDCP_DISABLE_WARNINGS #include #include #include +#ifdef DCPOMATIC_OSX +#include +#endif LIBDCP_ENABLE_WARNINGS #include @@ -409,6 +412,58 @@ checked_set(RegionSubtagWidget* widget, optional } +#ifdef DCPOMATIC_OSX + +void +dcpomatic_setup_i18n() +{ + wxLog::EnableLogging(); + + auto get_locale_value = [](CFLocaleKey key) { + CFLocaleRef cflocale = CFLocaleCopyCurrent(); + auto value = (CFStringRef) CFLocaleGetValue(cflocale, key); + char buffer[64]; + CFStringGetCString(value, buffer, sizeof(buffer), kCFStringEncodingUTF8); + CFRelease(cflocale); + return string(buffer); + }; + + auto translations = new wxTranslations(); + + auto config_lang = Config::instance()->language(); + if (config_lang && !config_lang->empty()) { + translations->SetLanguage(std_to_wx(*config_lang)); + } else { + /* We want to use the user's preferred language. It seems that if we use the wxWidgets default we will get the + * language for the locale, which may not be what we want (e.g. for a machine in Germany, configured for DE locale, + * but with the preferred language set to English). + * + * Instead, the the language code from macOS then get the corresponding canonical language string with region, + * which wxTranslations::SetLanguage will accept. + */ + auto const language_code = get_locale_value(kCFLocaleLanguageCode); + auto const info = wxUILocale::FindLanguageInfo(std_to_wx(language_code)); + if (info) { + translations->SetLanguage(info->GetCanonicalWithRegion()); + } + } + +#ifdef DCPOMATIC_DEBUG + wxFileTranslationsLoader::AddCatalogLookupPathPrefix(wxT("build/src/wx/mo")); + wxFileTranslationsLoader::AddCatalogLookupPathPrefix(wxT("build/src/tools/mo")); +#endif + + translations->AddStdCatalog(); + translations->AddCatalog(wxT("libdcpomatic2-wx")); + translations->AddCatalog(wxT("dcpomatic2")); + + wxTranslations::Set(translations); + + dcpomatic_setup_gettext_i18n(config_lang.get_value_or("")); +} + +#else + void dcpomatic_setup_i18n () { @@ -458,6 +513,8 @@ dcpomatic_setup_i18n () } } +#endif + int wx_get (wxSpinCtrl* w)