OpenTTD Source  12.0-beta2
language.h
Go to the documentation of this file.
1 /*
2  * This file is part of OpenTTD.
3  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6  */
7 
10 #ifndef LANGUAGE_H
11 #define LANGUAGE_H
12 
13 #include "core/smallvec_type.hpp"
14 #ifdef WITH_ICU_I18N
15 #include <unicode/coll.h>
16 #endif /* WITH_ICU_I18N */
17 #include "strings_type.h"
18 
19 static const uint8 CASE_GENDER_LEN = 16;
20 static const uint8 MAX_NUM_GENDERS = 8;
21 static const uint8 MAX_NUM_CASES = 16;
22 
25  static const uint32 IDENT = 0x474E414C;
26 
27  uint32 ident;
28  uint32 version;
29  char name[32];
30  char own_name[32];
31  char isocode[16];
33 
40  uint16 missing;
41  byte plural_form;
42  byte text_dir;
43 
51  uint16 winlangid;
52  uint8 newgrflangid;
53  uint8 num_genders;
54  uint8 num_cases;
55  byte pad[3];
56 
59 
60  bool IsValid() const;
61  bool IsReasonablyFinished() const;
62 
68  uint8 GetGenderIndex(const char *gender_str) const
69  {
70  for (uint8 i = 0; i < MAX_NUM_GENDERS; i++) {
71  if (strcmp(gender_str, this->genders[i]) == 0) return i;
72  }
73  return MAX_NUM_GENDERS;
74  }
75 
81  uint8 GetCaseIndex(const char *case_str) const
82  {
83  for (uint8 i = 0; i < MAX_NUM_CASES; i++) {
84  if (strcmp(case_str, this->cases[i]) == 0) return i;
85  }
86  return MAX_NUM_CASES;
87  }
88 };
90 static_assert(sizeof(LanguagePackHeader) % 4 == 0);
91 
94  char file[MAX_PATH];
95 };
96 
98 typedef std::vector<LanguageMetadata> LanguageList;
99 
101 extern LanguageList _languages;
102 
104 extern const LanguageMetadata *_current_language;
105 
106 #ifdef WITH_ICU_I18N
107 extern std::unique_ptr<icu::Collator> _current_collator;
108 #endif /* WITH_ICU_I18N */
109 
110 bool ReadLanguagePack(const LanguageMetadata *lang);
111 const LanguageMetadata *GetLanguage(byte newgrflangid);
112 
113 #endif /* LANGUAGE_H */
LanguagePackHeader::IsReasonablyFinished
bool IsReasonablyFinished() const
Check whether a translation is sufficiently finished to offer it to the public.
Definition: strings.cpp:1725
LanguagePackHeader::missing
uint16 missing
number of missing strings.
Definition: language.h:40
LanguagePackHeader::text_dir
byte text_dir
default direction of the text
Definition: language.h:42
MAX_NUM_GENDERS
static const uint8 MAX_NUM_GENDERS
Maximum number of supported genders.
Definition: language.h:20
LanguagePackHeader::version
uint32 version
32-bits of auto generated version info which is basically a hash of strings.h
Definition: language.h:28
LanguageMetadata
Make sure the size is right.
Definition: language.h:93
LanguagePackHeader::plural_form
byte plural_form
plural form index
Definition: language.h:41
TEXT_TAB_END
@ TEXT_TAB_END
End of language files.
Definition: strings_type.h:38
smallvec_type.hpp
_current_collator
std::unique_ptr< icu::Collator > _current_collator
Collator for the language currently in use.
Definition: strings.cpp:51
LanguagePackHeader::genders
char genders[MAX_NUM_GENDERS][CASE_GENDER_LEN]
the genders used by this translation
Definition: language.h:57
LanguageList
std::vector< LanguageMetadata > LanguageList
Type for the list of language meta data.
Definition: language.h:98
LanguagePackHeader::num_cases
uint8 num_cases
the number of cases of this language
Definition: language.h:54
strings_type.h
LanguagePackHeader::pad
byte pad[3]
pad header to be a multiple of 4
Definition: language.h:55
LanguagePackHeader::IDENT
static const uint32 IDENT
Identifier for OpenTTD language files, big endian for "LANG".
Definition: language.h:25
LanguagePackHeader::cases
char cases[MAX_NUM_CASES][CASE_GENDER_LEN]
the cases used by this translation
Definition: language.h:58
LanguagePackHeader::newgrflangid
uint8 newgrflangid
newgrf language id
Definition: language.h:52
LanguagePackHeader::name
char name[32]
the international name of this language
Definition: language.h:29
_current_language
const LanguageMetadata * _current_language
The currently loaded language.
Definition: strings.cpp:46
LanguagePackHeader::offsets
uint16 offsets[TEXT_TAB_END]
the offsets
Definition: language.h:32
LanguageMetadata::file
char file[MAX_PATH]
Name of the file we read this data from.
Definition: language.h:94
LanguagePackHeader::digit_decimal_separator
char digit_decimal_separator[8]
Decimal separator.
Definition: language.h:39
LanguagePackHeader::own_name
char own_name[32]
the localized name of this language
Definition: language.h:30
LanguagePackHeader::isocode
char isocode[16]
the ISO code for the language (not country code)
Definition: language.h:31
LanguagePackHeader::GetGenderIndex
uint8 GetGenderIndex(const char *gender_str) const
Get the index for the given gender.
Definition: language.h:68
LanguagePackHeader::GetCaseIndex
uint8 GetCaseIndex(const char *case_str) const
Get the index for the given case.
Definition: language.h:81
LanguagePackHeader::IsValid
bool IsValid() const
Check whether the header is a valid header for OpenTTD.
Definition: strings.cpp:1705
LanguagePackHeader::digit_group_separator_currency
char digit_group_separator_currency[8]
Thousand separator used for currencies.
Definition: language.h:37
LanguagePackHeader::winlangid
uint16 winlangid
Windows language ID: Windows cannot and will not convert isocodes to something it can use to determin...
Definition: language.h:51
LanguagePackHeader::num_genders
uint8 num_genders
the number of genders of this language
Definition: language.h:53
LanguagePackHeader::digit_group_separator
char digit_group_separator[8]
Thousand separator used for anything not currencies.
Definition: language.h:35
LanguagePackHeader::ident
uint32 ident
32-bits identifier
Definition: language.h:27
GetLanguage
const LanguageMetadata * GetLanguage(byte newgrflangid)
Get the language with the given NewGRF language ID.
Definition: strings.cpp:1885
_languages
LanguageList _languages
The actual list of language meta data.
Definition: strings.cpp:45
MAX_NUM_CASES
static const uint8 MAX_NUM_CASES
Maximum number of supported cases.
Definition: language.h:21
ReadLanguagePack
bool ReadLanguagePack(const LanguageMetadata *lang)
Read a particular language.
Definition: strings.cpp:1736
LanguagePackHeader
Header of a language file.
Definition: language.h:24
CASE_GENDER_LEN
static const uint8 CASE_GENDER_LEN
The (maximum) length of a case/gender string.
Definition: language.h:19