- Create the cache directly from the schema (installed) file.
[platform/upstream/libzypp.git] / zypp / Language.cc
1 /*---------------------------------------------------------------------\
2 |                          ____ _   __ __ ___                          |
3 |                         |__  / \ / / . \ . \                         |
4 |                           / / \ V /|  _/  _/                         |
5 |                          / /__ | | | | | |                           |
6 |                         /_____||_| |_| |_|                           |
7 |                                                                      |
8 \---------------------------------------------------------------------*/
9 /** \file       zypp/Language.cc
10  *
11 */
12 #include "zypp/Language.h"
13 #include "zypp/TranslatedText.h"
14 #include "zypp/CapFactory.h"
15
16 ///////////////////////////////////////////////////////////////////
17 namespace zypp
18 { /////////////////////////////////////////////////////////////////
19
20   ///////////////////////////////////////////////////////////////////
21   namespace detail
22   { /////////////////////////////////////////////////////////////////
23
24     ///////////////////////////////////////////////////////////////////
25     //
26     //  CLASS NAME : LanguageImpl
27     //
28     /** Exposition only. */
29     class LanguageImpl : public LanguageImplIf
30     {
31     public:
32       LanguageImpl( const Locale & locale_r )
33       : _locale( locale_r )
34       {}
35
36     public:
37       virtual TranslatedText summary() const
38       { return TranslatedText( _locale.name() ); }
39
40       virtual TranslatedText description() const
41       { return summary(); }
42
43     private:
44        Locale _locale;
45     };
46     ///////////////////////////////////////////////////////////////////
47
48
49     /////////////////////////////////////////////////////////////////
50   } // namespace detail
51   ///////////////////////////////////////////////////////////////////
52
53
54   IMPL_PTR_TYPE(Language);
55
56
57
58   ///////////////////////////////////////////////////////////////////
59   //
60   //    METHOD NAME : Language::Language
61   //    METHOD TYPE : Ctor
62   //
63   Language::Language( const NVRAD & nvrad_r )
64   : ResObject( TraitsType::kind, nvrad_r )
65   {}
66
67   ///////////////////////////////////////////////////////////////////
68   //
69   //    METHOD NAME : Language::~Language
70   //    METHOD TYPE : Dtor
71   //
72   Language::~Language()
73   {}
74
75   Language::Ptr Language::installedInstance( const Locale & locale_r )
76   {
77     static std::map<Locale,Ptr> _ptrmap;
78     Ptr ret( _ptrmap[locale_r] );
79     if ( ! ret )
80       {
81         detail::ResImplTraits<detail::LanguageImpl>::Ptr langImpl( new detail::LanguageImpl( locale_r ) );
82         NVRAD dataCollect( locale_r.code() );
83
84         if ( locale_r.country().hasCode() )
85           {
86             // Recommend fallback Language
87             Locale fallback( locale_r.fallback() );
88             if ( fallback != Locale::noCode )
89               dataCollect[Dep::RECOMMENDS].insert( CapFactory().parse( ResTraits<Language>::kind, fallback.code() ) );
90           }
91
92         ret = _ptrmap[locale_r] = detail::makeResolvableFromImpl( dataCollect, langImpl );
93       }
94     return ret;
95   }
96
97   Language::Ptr Language::availableInstance( const Locale & locale_r )
98   {
99     static std::map<Locale,Ptr> _ptrmap;
100     Ptr ret( _ptrmap[locale_r] );
101     if ( ! ret )
102       {
103         detail::ResImplTraits<detail::LanguageImpl>::Ptr langImpl( new detail::LanguageImpl( locale_r ) );
104         NVRAD dataCollect( locale_r.code() );
105
106         if ( locale_r.country().hasCode() )
107           {
108             // Recommend fallback Language
109             Locale fallback( locale_r.fallback() );
110             if ( fallback != Locale::noCode )
111               dataCollect[Dep::RECOMMENDS].insert( CapFactory().parse( ResTraits<Language>::kind, fallback.code() ) );
112           }
113
114         ret = _ptrmap[locale_r] = detail::makeResolvableFromImpl( dataCollect, langImpl );
115       }
116     return ret;
117   }
118
119   /////////////////////////////////////////////////////////////////
120 } // namespace zypp
121 ///////////////////////////////////////////////////////////////////