LanguageManager::LanguageManager() : m_invariant(OS_NEW LanguageCulture()), m_root(OS_NEW LanguageFolder()) { addFolder(m_root); m_dumpKey = false; }
shared_ptr<LanguageCulture> LanguageCulture::addCulture(const String &id) { Cultures::const_iterator i = m_cultures.find(String(id).to_lower()); if(i != m_cultures.end()) return i->second; shared_ptr<LanguageCulture> culture(OS_NEW LanguageCulture(get_this_ptr())); m_cultures[String(id).to_lower()] = culture; return culture; }
void LanguageCulture::parse(shared_ptr<XMLNode> node) { if(node->getName() == _S("culture")) { m_id = node->getAttributeString(_S("id")); m_englishName = node->getAttributeString(_S("englishName")); m_nativeName = node->getAttributeString(_S("nativeName")); m_isNeutralCulture = conversions::from_utf16<bool>(node->getAttributeString(_S("isNeutralCulture"))); m_defaultNotNeutral = node->getAttributeString(_S("defaultNotNeutral")); m_isoName = node->getAttributeString(_S("isoName")); m_lcid = conversions::from_utf16<uint32>(node->getAttributeString(_S("LCID"))); m_defaultTimeOffset = conversions::from_utf16<int32>(node->getAttributeString(_S("defaultTimeOffset"))); LanguageManager::instance()->getCultures()[String(getID()).to_lower()] = get_this_ptr(); shared_ptr<XMLNode> nodeCultures = node->getNode(_S("cultures")); if(nodeCultures != nullptr) { shared_ptr<XMLNodes> childs = nodeCultures->getNodes(); for(XMLNodes::const_iterator i = childs->begin(); i != childs->end(); ++i) { shared_ptr<XMLNode> subNode = *i; OS_ASSERT(subNode->getName() == _S("culture")); shared_ptr<LanguageCulture> subCulture(OS_NEW LanguageCulture(get_this_ptr())); subCulture->parse(subNode); m_cultures[String(subCulture->getID()).to_lower()] = subCulture; } } shared_ptr<XMLNode> nodeDataTimeFormatInfo = node->getNode(_S("dateTimeFormatInfo")); if(nodeDataTimeFormatInfo != nullptr) { //m_calendarWeekRule = nodeDataTimeFormatInfo->getAttributeString(_S("calendarWeekRule")); //m_dateSeparator = nodeDataTimeFormatInfo->getAttributeString(_S("dateSeparator")); //m_timeSeparator = nodeDataTimeFormatInfo->getAttributeString(_S("timeSeparator")); m_amDesignator = nodeDataTimeFormatInfo->getAttributeString(_S("amDesignator")); m_pmDesignator = nodeDataTimeFormatInfo->getAttributeString(_S("pmDesignator")); m_longDatePattern = nodeDataTimeFormatInfo->getAttributeString(_S("longDatePattern")); m_shortDatePattern = nodeDataTimeFormatInfo->getAttributeString(_S("shortDatePattern")); m_longTimePattern = nodeDataTimeFormatInfo->getAttributeString(_S("longTimePattern")); m_shortTimePattern = nodeDataTimeFormatInfo->getAttributeString(_S("shortTimePattern")); shared_ptr<XMLNode> nodeDayNames = nodeDataTimeFormatInfo->getNode(_S("dayNames")); if(nodeDayNames != nullptr) { shared_ptr<XMLNodes> childs = nodeDayNames->getNodes(); for(XMLNodes::const_iterator i = childs->begin(); i != childs->end(); ++i) { shared_ptr<XMLNode> nodeDayName = *i; uint32 index = conversions::from_utf16<uint32>(nodeDayName->getAttributeString(_S("index"))); String name = nodeDayName->getAttributeString(_S("name")); String abbreviated = nodeDayName->getAttributeString(_S("abbreviated")); OS_ASSERT(index < 7); m_dayNamesLong[index] = name; m_dayNamesShort[index] = abbreviated; } } shared_ptr<XMLNode> nodeMonthNames = nodeDataTimeFormatInfo->getNode(_S("monthNames")); { shared_ptr<XMLNodes> childs = nodeMonthNames->getNodes(); for(XMLNodes::const_iterator i = childs->begin(); i != childs->end(); ++i) { shared_ptr<XMLNode> nodeMonthName = *i; uint32 index = conversions::from_utf16<uint32>(nodeMonthName->getAttributeString(_S("index"))); String name = nodeMonthName->getAttributeString(_S("name")); String abbreviated = nodeMonthName->getAttributeString(_S("abbreviated")); OS_ASSERT(index < 12); m_monthNamesLong[index] = name; m_monthNamesShort[index] = abbreviated; } } } } }