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