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