void CWeatherJob::LoadLocalizedToken() { // We load the english strings in to get our tokens std::string language = LANGUAGE_DEFAULT; CSettingString* languageSetting = static_cast<CSettingString*>(CSettings::Get().GetSetting(CSettings::SETTING_LOCALE_LANGUAGE)); if (languageSetting != NULL) language = languageSetting->GetDefault(); // Try the strings PO file first CPODocument PODoc; if (PODoc.LoadFile(URIUtils::AddFileToFolder(CLangInfo::GetLanguagePath(language), "strings.po"))) { int counter = 0; while (PODoc.GetNextEntry()) { if (PODoc.GetEntryType() != ID_FOUND) continue; uint32_t id = PODoc.GetEntryID(); PODoc.ParseEntry(ISSOURCELANG); if (id > LOCALIZED_TOKEN_LASTID2) break; if ((LOCALIZED_TOKEN_FIRSTID <= id && id <= LOCALIZED_TOKEN_LASTID) || (LOCALIZED_TOKEN_FIRSTID2 <= id && id <= LOCALIZED_TOKEN_LASTID2) || (LOCALIZED_TOKEN_FIRSTID3 <= id && id <= LOCALIZED_TOKEN_LASTID3) || (LOCALIZED_TOKEN_FIRSTID4 <= id && id <= LOCALIZED_TOKEN_LASTID4)) { if (!PODoc.GetMsgid().empty()) { m_localizedTokens.insert(make_pair(PODoc.GetMsgid(), id)); counter++; } } } CLog::Log(LOGDEBUG, "POParser: loaded %i weather tokens", counter); return; } CLog::Log(LOGDEBUG, "Weather: no PO string file available, to load English tokens, " "fallback to strings.xml file"); // We load the tokens from the strings.xml file std::string strLanguagePath = URIUtils::AddFileToFolder(CLangInfo::GetLanguagePath(language), "strings.xml"); CXBMCTinyXML xmlDoc; if (!xmlDoc.LoadFile(strLanguagePath) || !xmlDoc.RootElement()) { CLog::Log(LOGERROR, "Weather: unable to load %s: %s at line %d", strLanguagePath.c_str(), xmlDoc.ErrorDesc(), xmlDoc.ErrorRow()); return; } TiXmlElement* pRootElement = xmlDoc.RootElement(); if (pRootElement->ValueStr() != "strings") return; const TiXmlElement *pChild = pRootElement->FirstChildElement(); while (pChild) { std::string strValue = pChild->ValueStr(); if (strValue == "string") { // Load new style language file with id as attribute const char* attrId = pChild->Attribute("id"); if (attrId && !pChild->NoChildren()) { int id = atoi(attrId); if ((LOCALIZED_TOKEN_FIRSTID <= id && id <= LOCALIZED_TOKEN_LASTID) || (LOCALIZED_TOKEN_FIRSTID2 <= id && id <= LOCALIZED_TOKEN_LASTID2) || (LOCALIZED_TOKEN_FIRSTID3 <= id && id <= LOCALIZED_TOKEN_LASTID3) || (LOCALIZED_TOKEN_FIRSTID4 <= id && id <= LOCALIZED_TOKEN_LASTID4)) { std::string utf8Label(pChild->FirstChild()->ValueStr()); if (!utf8Label.empty()) m_localizedTokens.insert(make_pair(utf8Label, id)); } } } pChild = pChild->NextSiblingElement(); } }