#include <tinygettext.hpp>
Public Member Functions | |
Dictionary (const LanguageDef &language_, const std::string &charset="") | |
Dictionary () | |
std::string | get_charset () const |
Return the charset used for this dictionary. | |
void | set_charset (const std::string &charset) |
Set a charset for this dictionary, this will NOT convert stuff, it is for information only, you have to convert stuff yourself when you add it with add_translation(). | |
void | set_language (const LanguageDef &lang) |
Set the language that is used for this dictionary, this is mainly needed to evaluate plural forms. | |
std::string | translate (const std::string &msgid, const std::string &msgid2, int num) |
Translate the string msgid to its correct plural form, based on the number of items given by num. | |
std::string | translate (const std::string &msgid) |
Translate the string msgid. | |
const char * | translate (const char *msgid) |
Translate the string msgid. | |
void | add_translation (const std::string &msgid, const std::string &msgid2, const std::map< int, std::string > &msgstrs) |
Add a translation from msgid to msgstr to the dictionary, where msgid is the singular form of the message, msgid2 the plural form and msgstrs a table of translations. | |
void | add_translation (const std::string &msgid, const std::string &msgstr) |
Add a translation from msgid to msgstr to the dictionary. | |
Private Types | |
typedef std::map< std::string, std::string > | Entries |
typedef std::map< std::string, std::map< int, std::string > > | PluralEntries |
Private Attributes | |
Entries | entries |
PluralEntries | plural_entries |
LanguageDef | language |
std::string | charset |
Each Dictionary only works for a single language, for managing multiple languages and .po files at once use the DictionaryManager.
Definition at line 46 of file tinygettext.hpp.
typedef std::map<std::string, std::string> TinyGetText::Dictionary::Entries [private] |
Definition at line 49 of file tinygettext.hpp.
typedef std::map<std::string, std::map<int, std::string> > TinyGetText::Dictionary::PluralEntries [private] |
Definition at line 52 of file tinygettext.hpp.
TinyGetText::Dictionary::Dictionary | ( | const LanguageDef & | language_, | |
const std::string & | charset = "" | |||
) |
TinyGetText::Dictionary::Dictionary | ( | ) |
std::string TinyGetText::Dictionary::get_charset | ( | ) | const |
Return the charset used for this dictionary.
Definition at line 439 of file tinygettext.cpp.
References charset.
Referenced by TinyGetText::POFileReader::parse_header().
00440 { 00441 return charset; 00442 }
void TinyGetText::Dictionary::set_charset | ( | const std::string & | charset | ) |
Set a charset for this dictionary, this will NOT convert stuff, it is for information only, you have to convert stuff yourself when you add it with add_translation().
Definition at line 445 of file tinygettext.cpp.
References charset.
Referenced by TinyGetText::DictionaryManager::get_dictionary(), and TinyGetText::POFileReader::parse_header().
00446 { 00447 charset = charset_; 00448 }
void TinyGetText::Dictionary::set_language | ( | const LanguageDef & | lang | ) |
Set the language that is used for this dictionary, this is mainly needed to evaluate plural forms.
Definition at line 451 of file tinygettext.cpp.
References language.
Referenced by TinyGetText::DictionaryManager::get_dictionary().
00452 { 00453 language = lang; 00454 }
std::string TinyGetText::Dictionary::translate | ( | const std::string & | msgid, | |
const std::string & | msgid2, | |||
int | num | |||
) |
Translate the string msgid to its correct plural form, based on the number of items given by num.
msgid2 is msgid in plural form.
Definition at line 457 of file tinygettext.cpp.
References language, log_debug, log_warning, TinyGetText::LanguageDef::plural, TinyGetText::plural2_1(), and plural_entries.
00458 { 00459 PluralEntries::iterator i = plural_entries.find(msgid); 00460 std::map<int, std::string>& msgstrs = i->second; 00461 00462 if (i != plural_entries.end() && !msgstrs.empty()) 00463 { 00464 int g = language.plural(num); 00465 std::map<int, std::string>::iterator j = msgstrs.find(g); 00466 if (j != msgstrs.end()) 00467 { 00468 return j->second; 00469 } 00470 else 00471 { 00472 // Return the first translation, in case we can't translate the specific number 00473 return msgstrs.begin()->second; 00474 } 00475 } 00476 else 00477 { 00478 #ifdef TRANSLATION_DEBUG 00479 log_warning << "Couldn't translate: " << msgid << std::endl; 00480 log_warning << "Candidates: " << std::endl; 00481 for (PluralEntries::iterator i = plural_entries.begin(); i != plural_entries.end(); ++i) 00482 log_debug << "'" << i->first << "'" << std::endl; 00483 #endif 00484 00485 if (plural2_1(num)) // default to english rules 00486 return msgid2; 00487 else 00488 return msgid; 00489 } 00490 }
std::string TinyGetText::Dictionary::translate | ( | const std::string & | msgid | ) |
Translate the string msgid.
Definition at line 510 of file tinygettext.cpp.
References entries, and log_warning.
00511 { 00512 Entries::iterator i = entries.find(msgid); 00513 if (i != entries.end() && !i->second.empty()) 00514 { 00515 return i->second; 00516 } 00517 else 00518 { 00519 #ifdef TRANSLATION_DEBUG 00520 log_warning << "Couldn't translate: " << msgid << std::endl; 00521 #endif 00522 return msgid; 00523 } 00524 }
const char * TinyGetText::Dictionary::translate | ( | const char * | msgid | ) |
Translate the string msgid.
Definition at line 493 of file tinygettext.cpp.
References entries, and log_warning.
00494 { 00495 Entries::iterator i = entries.find(msgid); 00496 if (i != entries.end() && !i->second.empty()) 00497 { 00498 return i->second.c_str(); 00499 } 00500 else 00501 { 00502 #ifdef TRANSLATION_DEBUG 00503 log_warning << "Couldn't translate: " << msgid << std::endl; 00504 #endif 00505 return msgid; 00506 } 00507 }
void TinyGetText::Dictionary::add_translation | ( | const std::string & | msgid, | |
const std::string & | msgid2, | |||
const std::map< int, std::string > & | msgstrs | |||
) |
Add a translation from msgid to msgstr to the dictionary, where msgid is the singular form of the message, msgid2 the plural form and msgstrs a table of translations.
The right translation will be calculated based on the num argument to translate().
Definition at line 527 of file tinygettext.cpp.
References plural_entries.
Referenced by TinyGetText::POFileReader::tokenize_po().
00529 { 00530 // Do we need msgid2 for anything? its after all supplied to the 00531 // translate call, so we just throw it away 00532 plural_entries[msgid] = msgstrs; 00533 }
void TinyGetText::Dictionary::add_translation | ( | const std::string & | msgid, | |
const std::string & | msgstr | |||
) |
Add a translation from msgid to msgstr to the dictionary.
Definition at line 536 of file tinygettext.cpp.
References entries.
00537 { 00538 entries[msgid] = msgstr; 00539 }
Entries TinyGetText::Dictionary::entries [private] |
LanguageDef TinyGetText::Dictionary::language [private] |
std::string TinyGetText::Dictionary::charset [private] |