Language.cc

Go to the documentation of this file.
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

Generated on Thu Jul 6 00:07:21 2006 for zypp by  doxygen 1.4.6