00001 /*---------------------------------------------------------------------\ 00002 | ____ _ __ __ ___ | 00003 | |__ / \ / / . \ . \ | 00004 | / / \ V /| _/ _/ | 00005 | / /__ | | | | | | | 00006 | /_____||_| |_| |_| | 00007 | | 00008 \---------------------------------------------------------------------*/ 00012 #include "zypp/Language.h" 00013 #include "zypp/TranslatedText.h" 00014 #include "zypp/CapFactory.h" 00015 00017 namespace zypp 00018 { 00019 00021 namespace detail 00022 { 00023 00025 // 00026 // CLASS NAME : LanguageImpl 00027 // 00029 class LanguageImpl : public LanguageImplIf 00030 { 00031 public: 00032 LanguageImpl( const Locale & locale_r ) 00033 : _locale( locale_r ) 00034 {} 00035 00036 public: 00037 virtual TranslatedText summary() const 00038 { return TranslatedText( _locale.name() ); } 00039 00040 virtual TranslatedText description() const 00041 { return summary(); } 00042 00043 private: 00044 Locale _locale; 00045 }; 00047 00048 00050 } // namespace detail 00052 00053 00054 IMPL_PTR_TYPE(Language); 00055 00056 00057 00059 // 00060 // METHOD NAME : Language::Language 00061 // METHOD TYPE : Ctor 00062 // 00063 Language::Language( const NVRAD & nvrad_r ) 00064 : ResObject( TraitsType::kind, nvrad_r ) 00065 {} 00066 00068 // 00069 // METHOD NAME : Language::~Language 00070 // METHOD TYPE : Dtor 00071 // 00072 Language::~Language() 00073 {} 00074 00075 Language::Ptr Language::installedInstance( const Locale & locale_r ) 00076 { 00077 static std::map<Locale,Ptr> _ptrmap; 00078 Ptr ret( _ptrmap[locale_r] ); 00079 if ( ! ret ) 00080 { 00081 detail::ResImplTraits<detail::LanguageImpl>::Ptr langImpl( new detail::LanguageImpl( locale_r ) ); 00082 NVRAD dataCollect( locale_r.code() ); 00083 00084 if ( locale_r.country().hasCode() ) 00085 { 00086 // Recommend fallback Language 00087 Locale fallback( locale_r.fallback() ); 00088 if ( fallback != Locale::noCode ) 00089 dataCollect[Dep::RECOMMENDS].insert( CapFactory().parse( ResTraits<Language>::kind, fallback.code() ) ); 00090 } 00091 00092 ret = _ptrmap[locale_r] = detail::makeResolvableFromImpl( dataCollect, langImpl ); 00093 } 00094 return ret; 00095 } 00096 00097 Language::Ptr Language::availableInstance( const Locale & locale_r ) 00098 { 00099 static std::map<Locale,Ptr> _ptrmap; 00100 Ptr ret( _ptrmap[locale_r] ); 00101 if ( ! ret ) 00102 { 00103 detail::ResImplTraits<detail::LanguageImpl>::Ptr langImpl( new detail::LanguageImpl( locale_r ) ); 00104 NVRAD dataCollect( locale_r.code() ); 00105 00106 if ( locale_r.country().hasCode() ) 00107 { 00108 // Recommend fallback Language 00109 Locale fallback( locale_r.fallback() ); 00110 if ( fallback != Locale::noCode ) 00111 dataCollect[Dep::RECOMMENDS].insert( CapFactory().parse( ResTraits<Language>::kind, fallback.code() ) ); 00112 } 00113 00114 ret = _ptrmap[locale_r] = detail::makeResolvableFromImpl( dataCollect, langImpl ); 00115 } 00116 return ret; 00117 } 00118 00120 } // namespace zypp