blob: cfc659f5a2736a93acc0083822057e87cbaec09d (
plain)
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
|
#include "localization.hpp"
static unsigned str_hash(const char *str)
{
unsigned hash = 5381;
for(; *str; str++)
hash = ((hash << 5) + hash) + (*str); /* hash * 33 + c */
return hash;
}
const char *localize(const char *str)
{
const char *new_str = localization.find_string(str_hash(str));
//dbg_msg("", "no localization for '%s'", str);
return new_str ? new_str : str;
}
LOC_CONSTSTRING::LOC_CONSTSTRING(const char *str)
{
default_str = str;
hash = str_hash(default_str);
version = -1;
}
void LOC_CONSTSTRING::reload()
{
version = localization.version();
const char *new_str = localization.find_string(hash);
current_str = new_str;
if(!current_str)
current_str = default_str;
}
LOCALIZATIONDATABASE::LOCALIZATIONDATABASE()
{
current_version = 0;
}
void LOCALIZATIONDATABASE::add_string(const char *org_str, const char *new_str)
{
STRING s;
s.hash = str_hash(org_str);
s.replacement = new_str;
strings.add(s);
current_version++;
}
const char *LOCALIZATIONDATABASE::find_string(unsigned hash)
{
array<STRING>::range r = ::find(strings.all(), hash);
if(r.empty())
return 0;
return r.front().replacement;
}
|