// Copyright (c) 2005, Rodrigo Braz Monteiro // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // * Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // * Neither the name of the Aegisub Group nor the names of its contributors // may be used to endorse or promote products derived from this software // without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. // // Aegisub Project http://www.aegisub.org/ // // $Id$ /// @file aegisublocale.cpp /// @brief Enumerate available locales for picking translation on Windows /// @ingroup utility /// /////////// // Headers #include "config.h" #include #include #include #include #include #include #include "aegisublocale.h" #include "standard_paths.h" #include /////////////// // Constructor AegisubLocale::AegisubLocale () { locale = NULL; curCode = -1; } AegisubLocale::~AegisubLocale() { delete locale; } ////////////// // Initialize void AegisubLocale::Init(int language) { if (language == -1) language = wxLANGUAGE_ENGLISH; if (locale) delete locale; if (!wxLocale::IsAvailable(language)) { language = wxLANGUAGE_UNKNOWN; } curCode = language; locale = new wxLocale(language); #ifdef __WINDOWS__ locale->AddCatalogLookupPathPrefix(StandardPaths::DecodePath(_T("?data/locale/"))); locale->AddCatalog(_T("aegisub")); #else locale->AddCatalog(_T(GETTEXT_PACKAGE)); #endif locale->AddCatalog(_T("wxstd")); setlocale(LC_NUMERIC, "C"); setlocale(LC_CTYPE, "C"); } /////////////////// // Pick a language int AegisubLocale::PickLanguage() { // Get list wxArrayInt langs = GetAvailableLanguages(); // Check if english is in it, else add it if (langs.Index(wxLANGUAGE_ENGLISH) == wxNOT_FOUND) { langs.Insert(wxLANGUAGE_ENGLISH,0); } // Check if user local language is available, if so, make it first int user = wxLocale::GetSystemLanguage(); if (langs.Index(user) != wxNOT_FOUND) { langs.Remove(user); langs.Insert(user,0); } // Generate names wxArrayString langNames; for (size_t i=0;iLanguage); } } } #else wchar_t* langs[] = { _T("ca"), _T("da"), _T("de"), _T("es"), _T("fr_FR"), _T("hu"), _T("it"), _T("ja"), _T("ko"), _T("ru"), _T("pt_BR"), _T("zh_TW") }; size_t len = sizeof(langs)/sizeof(wchar_t*); for (size_t i=0; iLanguage); } #endif return final; }