/* ============ Trans_Init ============ */ void Trans_Init( void ) { char langList[ MAX_TOKEN_CHARS ] = ""; char encList[ MAX_TOKEN_CHARS ] = ""; std::set<Language> langs; Language lang; Cmd_AddCommand( "updatelanguage", Trans_UpdateLanguage_f ); language = Cvar_Get( "language", "", CVAR_ARCHIVE ); trans_debug = Cvar_Get( "trans_debug", "0", CVAR_ARCHIVE ); trans_languages = Cvar_Get( "trans_languages", "", CVAR_ROM ); trans_encodings = Cvar_Get( "trans_encodings", "", CVAR_ROM ); // set tinygettext log callbacks Log::set_log_error_callback( &Trans_Error ); Log::set_log_warning_callback( &Trans_Warning ); Log::set_log_info_callback( &Trans_Info ); trans_manager.set_filesystem( std::auto_ptr<FileSystem>( new DaemonFileSystem ) ); trans_managergame.set_filesystem( std::auto_ptr<FileSystem>( new DaemonFileSystem ) ); trans_manager.add_directory( "translation/client" ); trans_managergame.add_directory( "translation/game" ); langs = trans_manager.get_languages(); for( std::set<Language>::iterator p = langs.begin(); p != langs.end(); p++ ) { Q_strcat( langList, sizeof( langList ), va( "\"%s\" ", p->get_name().c_str() ) ); Q_strcat( encList, sizeof( encList ), va( "\"%s%s%s\" ", p->get_language().c_str(), p->get_country().c_str()[0] ? "_" : "", p->get_country().c_str() ) ); } Cvar_Set( "trans_languages", langList ); Cvar_Set( "trans_encodings", encList ); Com_Printf( P_( "Loaded %u language\n", "Loaded %u languages\n", langs.size() ), ( int )langs.size() ); }
int main(int argc, char** argv) { try { if (argc == 3 && strcmp(argv[1], "language-dir") == 0) { DictionaryManager dictionary_manager; dictionary_manager.add_directory(argv[2]); const std::set<Language>& languages = dictionary_manager.get_languages(); std::cout << "Number of languages: " << languages.size() << std::endl; for (std::set<Language>::const_iterator i = languages.begin(); i != languages.end(); ++i) { const Language& language = *i; std::cout << "Env: " << language.str() << std::endl << "Name: " << language.get_name() << std::endl << "Language: " << language.get_language() << std::endl << "Country: " << language.get_country() << std::endl << "Modifier: " << language.get_modifier() << std::endl << std::endl; } } else if (argc == 3 && strcmp(argv[1], "language") == 0) { const char* language_cstr = argv[2]; Language language = Language::from_name(language_cstr); if (language) std::cout << "Env: " << language.str() << std::endl << "Name: " << language.get_name() << std::endl << "Language: " << language.get_language() << std::endl << "Country: " << language.get_country() << std::endl << "Modifier: " << language.get_modifier() << std::endl; else std::cout << "not found" << std::endl; } else if (argc == 4 && strcmp(argv[1], "translate") == 0) { const char* filename = argv[2]; const char* message = argv[3]; Dictionary dict; read_dictionary(filename, dict); std::cout << "TRANSLATION: \"\"\"" << dict.translate(message) << "\"\"\""<< std::endl; } else if (argc == 5 && strcmp(argv[1], "translate") == 0) { const char* filename = argv[2]; const char* context = argv[3]; const char* message = argv[4]; Dictionary dict; read_dictionary(filename, dict); std::cout << dict.translate_ctxt(context, message) << std::endl; } else if (argc == 6 && strcmp(argv[1], "translate") == 0) { const char* filename = argv[2]; const char* message_singular = argv[3]; const char* message_plural = argv[4]; int num = atoi(argv[5]); Dictionary dict; read_dictionary(filename, dict); std::cout << dict.translate_plural(message_singular, message_plural, num) << std::endl; } else if (argc == 7 && strcmp(argv[1], "translate") == 0) { const char* filename = argv[2]; const char* context = argv[3]; const char* message_singular = argv[4]; const char* message_plural = argv[5]; int num = atoi(argv[6]); Dictionary dict; read_dictionary(filename, dict); std::cout << dict.translate_ctxt_plural(context, message_singular, message_plural, num) << std::endl; } else if ((argc == 4 || argc == 5) && strcmp(argv[1], "directory") == 0) { const char* directory = argv[2]; const char* message = argv[3]; const char* language = (argc == 5) ? argv[4] : NULL; DictionaryManager manager; manager.add_directory(directory); if (language) { Language lang = Language::from_name(language); if (lang) { manager.set_language(lang); } else { std::cout << "Unknown language: " << language << std::endl; exit(EXIT_FAILURE); } } std::cout << "Directory: '" << directory << "'" << std::endl; std::cout << "Message: '" << message << "'" << std::endl; std::cout << "Language: '" << manager.get_language().str() << "' (name: '" << manager.get_language().get_name() << "', language: '" << manager.get_language().get_language() << "', country: '" << manager.get_language().get_country() << "', modifier: '" << manager.get_language().get_modifier() << "')" << std::endl; std::cout << "Translation: '" << manager.get_dictionary().translate(message) << "'" << std::endl; } else if ((argc == 3) && strcmp(argv[1], "list-msgstrs") == 0) { const char* filename = argv[2]; Dictionary dict; read_dictionary(filename, dict); dict.foreach(print_msg); dict.foreach_ctxt(print_msg_ctxt); } else { print_usage(argc, argv); } } catch(std::exception& err) { std::cout << "Exception: " << err.what() << std::endl; } return 0; }
/* ============ Trans_Init ============ */ extern "C" void Trans_Init( void ) { char langList[ MAX_TOKEN_CHARS ] = ""; char encList[ MAX_TOKEN_CHARS ] = ""; FL_Locale *locale; std::set<Language> langs; Language lang; Cmd_AddCommand( "updatelanguage", Trans_UpdateLanguage_f ); language = Cvar_Get( "language", "", CVAR_ARCHIVE ); trans_debug = Cvar_Get( "trans_debug", "0", CVAR_ARCHIVE ); trans_languages = Cvar_Get( "trans_languages", "", CVAR_ROM ); trans_encodings = Cvar_Get( "trans_encodings", "", CVAR_ROM ); // set tinygettext log callbacks Log::set_log_error_callback( &Trans_Error ); Log::set_log_warning_callback( &Trans_Warning ); Log::set_log_info_callback( &Trans_Info ); trans_manager.set_filesystem( std::auto_ptr<FileSystem>( new DaemonFileSystem ) ); trans_managergame.set_filesystem( std::auto_ptr<FileSystem>( new DaemonFileSystem ) ); trans_manager.add_directory( "translation/client" ); trans_managergame.add_directory( "translation/game" ); langs = trans_manager.get_languages(); for( std::set<Language>::iterator p = langs.begin(); p != langs.end(); p++ ) { Q_strcat( langList, sizeof( langList ), va( "\"%s\" ", p->get_name().c_str() ) ); Q_strcat( encList, sizeof( encList ), va( "\"%s%s%s\" ", p->get_language().c_str(), p->get_country().c_str()[0] ? "_" : "", p->get_country().c_str() ) ); } Cvar_Set( "trans_languages", langList ); Cvar_Set( "trans_encodings", encList ); // Only detect locale if no previous language set. if( !language->string[0] ) { FL_FindLocale( &locale, FL_MESSAGES ); // Invalid or not found. Just use builtin language. if( !locale->lang || !locale->lang[0] || !locale->country || !locale->country[0] ) { Cvar_Set( "language", "en" ); } else { Cvar_Set( "language", va( "%s%s%s", locale->lang, locale->country[0] ? "_" : "", locale->country ) ); } FL_FreeLocale( &locale ); } Trans_SetLanguage( language->string ); Com_Printf( P_( "Loaded %u language\n", "Loaded %u languages\n", langs.size() ), ( int )langs.size() ); }