* apt-pkg/acquire-item.cc:
[ntk/apt.git] / apt-pkg / indexfile.cc
1 // -*- mode: cpp; mode: fold -*-
2 // Description /*{{{*/
3 // $Id: indexfile.cc,v 1.2.2.1 2003/12/24 23:09:17 mdz Exp $
4 /* ######################################################################
5
6 Index File - Abstraction for an index of archive/souce file.
7
8 ##################################################################### */
9 /*}}}*/
10 // Include Files /*{{{*/
11 #ifdef __GNUG__
12 #pragma implementation "apt-pkg/indexfile.h"
13 #endif
14
15 #include <apt-pkg/configuration.h>
16 #include <apt-pkg/indexfile.h>
17 #include <apt-pkg/error.h>
18
19 #include <clocale>
20 /*}}}*/
21
22 // Global list of Item supported
23 static pkgIndexFile::Type *ItmList[10];
24 pkgIndexFile::Type **pkgIndexFile::Type::GlobalList = ItmList;
25 unsigned long pkgIndexFile::Type::GlobalListLen = 0;
26
27 // Type::Type - Constructor /*{{{*/
28 // ---------------------------------------------------------------------
29 /* */
30 pkgIndexFile::Type::Type()
31 {
32 ItmList[GlobalListLen] = this;
33 GlobalListLen++;
34 }
35 /*}}}*/
36 // Type::GetType - Locate the type by name /*{{{*/
37 // ---------------------------------------------------------------------
38 /* */
39 pkgIndexFile::Type *pkgIndexFile::Type::GetType(const char *Type)
40 {
41 for (unsigned I = 0; I != GlobalListLen; I++)
42 if (strcmp(GlobalList[I]->Label,Type) == 0)
43 return GlobalList[I];
44 return 0;
45 }
46 /*}}}*/
47
48 // IndexFile::ArchiveInfo - Stub /*{{{*/
49 // ---------------------------------------------------------------------
50 /* */
51 string pkgIndexFile::ArchiveInfo(pkgCache::VerIterator Ver) const
52 {
53 return string();
54 }
55 /*}}}*/
56 // IndexFile::FindInCache - Stub /*{{{*/
57 // ---------------------------------------------------------------------
58 /* */
59 pkgCache::PkgFileIterator pkgIndexFile::FindInCache(pkgCache &Cache) const
60 {
61 return pkgCache::PkgFileIterator(Cache);
62 }
63 /*}}}*/
64 // IndexFile::SourceIndex - Stub /*{{{*/
65 // ---------------------------------------------------------------------
66 /* */
67 string pkgIndexFile::SourceInfo(pkgSrcRecords::Parser const &Record,
68 pkgSrcRecords::File const &File) const
69 {
70 return string();
71 }
72 /*}}}*/
73 // IndexFile::TranslationsAvailable - Check if will use Translation /*{{{*/
74 // ---------------------------------------------------------------------
75 /* */
76 bool pkgIndexFile::TranslationsAvailable()
77 {
78 const string Translation = _config->Find("APT::Acquire::Translation", "environment");
79
80 if (Translation.compare("none") != 0)
81 return CheckLanguageCode(LanguageCode().c_str());
82 else
83 return false;
84 }
85 /*}}}*/
86 // IndexFile::CheckLanguageCode - Check the Language Code /*{{{*/
87 // ---------------------------------------------------------------------
88 /* */
89 /* common cases: de_DE, de_DE@euro, de_DE.UTF-8, de_DE.UTF-8@euro,
90 de_DE.ISO8859-1, tig_ER
91 more in /etc/gdm/locale.conf
92 */
93
94 bool pkgIndexFile::CheckLanguageCode(const char *Lang)
95 {
96 if (strlen(Lang) == 2 || (strlen(Lang) == 5 && Lang[2] == '_'))
97 return true;
98
99 if (strcmp(Lang,"C") != 0)
100 _error->Warning("Wrong language code %s", Lang);
101
102 return false;
103 }
104 /*}}}*/
105 // IndexFile::LanguageCode - Return the Language Code /*{{{*/
106 // ---------------------------------------------------------------------
107 /* return the language code */
108 string pkgIndexFile::LanguageCode()
109 {
110 const string Translation = _config->Find("APT::Acquire::Translation", "environment");
111
112 if (Translation.compare("environment") == 0)
113 {
114 string lang = std::setlocale(LC_MESSAGES,NULL);
115
116 // we have a mapping of the language codes that contains all the language
117 // codes that need the country code as well
118 // (like pt_BR, pt_PT, sv_SE, zh_*, en_*)
119 char *need_full_langcode[] = { "pt","sv","zh","en", NULL };
120 for(char **s = need_full_langcode;*s != NULL; s++)
121 if(lang.find(*s) == 0)
122 return lang.substr(0,5);
123
124 if(lang.size() > 2)
125 return lang.substr(0,2);
126 else
127 return lang;
128 }
129 else
130 return Translation;
131 }
132 /*}}}*/