OpenTTD Source 20250524-master-gc366e6a48e
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#ifdef WITH_ICU_I18N
14#include <unicode/coll.h>
15#endif /* WITH_ICU_I18N */
16#include "strings_type.h"
17#include <filesystem>
18
19static const uint8_t CASE_GENDER_LEN = 16;
20static const uint8_t MAX_NUM_GENDERS = 8;
21static const uint8_t MAX_NUM_CASES = 16;
22
25 static const uint32_t IDENT = 0x474E414C;
26
27 uint32_t ident = 0;
28 uint32_t version = 0;
29 char name[32] = "";
30 char own_name[32] = "";
31 char isocode[16] = "";
32 uint16_t offsets[TEXT_TAB_END] = {};
33
35 char digit_group_separator[8] = ",";
40 uint16_t missing = 0;
41 uint8_t plural_form = 0;
42 uint8_t text_dir = 0;
51 uint16_t winlangid = 0;
52 uint8_t newgrflangid = 0;
53 uint8_t num_genders = 0;
54 uint8_t num_cases = 0;
55 uint8_t pad[3] = {};
56
59
60 bool IsValid() const;
61 bool IsReasonablyFinished() const;
62
68 uint8_t GetGenderIndex(std::string_view gender_str) const
69 {
70 for (uint8_t i = 0; i < MAX_NUM_GENDERS; i++) {
71 if (gender_str.compare(this->genders[i]) == 0) return i;
72 }
73 return MAX_NUM_GENDERS;
74 }
75
81 uint8_t GetCaseIndex(std::string_view case_str) const
82 {
83 for (uint8_t i = 0; i < MAX_NUM_CASES; i++) {
84 if (case_str.compare(this->cases[i]) == 0) return i;
85 }
86 return MAX_NUM_CASES;
87 }
88};
90static_assert(sizeof(LanguagePackHeader) % 4 == 0);
91
94 std::filesystem::path file;
95};
96
98typedef std::vector<LanguageMetadata> LanguageList;
99
102
105
106#ifdef WITH_ICU_I18N
107extern std::unique_ptr<icu::Collator> _current_collator;
108#endif /* WITH_ICU_I18N */
109
110bool ReadLanguagePack(const LanguageMetadata *lang);
111const LanguageMetadata *GetLanguage(uint8_t newgrflangid);
112
113#endif /* LANGUAGE_H */
LanguageList _languages
The actual list of language meta data.
Definition strings.cpp:54
const LanguageMetadata * _current_language
The currently loaded language.
Definition strings.cpp:55
static const uint8_t MAX_NUM_GENDERS
Maximum number of supported genders.
Definition language.h:20
std::unique_ptr< icu::Collator > _current_collator
Collator for the language currently in use.
Definition strings.cpp:60
std::vector< LanguageMetadata > LanguageList
Type for the list of language meta data.
Definition language.h:98
static const uint8_t CASE_GENDER_LEN
The (maximum) length of a case/gender string.
Definition language.h:19
const LanguageMetadata * GetLanguage(uint8_t newgrflangid)
Get the language with the given NewGRF language ID.
Definition strings.cpp:2136
bool ReadLanguagePack(const LanguageMetadata *lang)
Read a particular language.
Definition strings.cpp:2001
static const uint8_t MAX_NUM_CASES
Maximum number of supported cases.
Definition language.h:21
Types related to strings.
@ TEXT_TAB_END
End of language files.
Make sure the size is right.
Definition language.h:93
std::filesystem::path file
Name of the file we read this data from.
Definition language.h:94
Header of a language file.
Definition language.h:24
uint8_t GetCaseIndex(std::string_view case_str) const
Get the index for the given case.
Definition language.h:81
uint8_t plural_form
plural form index
Definition language.h:41
bool IsValid() const
Check whether the header is a valid header for OpenTTD.
Definition strings.cpp:1970
bool IsReasonablyFinished() const
Check whether a translation is sufficiently finished to offer it to the public.
Definition strings.cpp:1990
uint32_t version
32-bits of auto generated version info which is basically a hash of strings.h
Definition language.h:28
char isocode[16]
the ISO code for the language (not country code)
Definition language.h:31
char own_name[32]
the localized name of this language
Definition language.h:30
uint8_t pad[3]
pad header to be a multiple of 4
Definition language.h:55
char name[32]
the international name of this language
Definition language.h:29
uint16_t offsets[TEXT_TAB_END]
the offsets
Definition language.h:32
uint16_t winlangid
Windows language ID: Windows cannot and will not convert isocodes to something it can use to determin...
Definition language.h:51
uint8_t num_genders
the number of genders of this language
Definition language.h:53
char cases[MAX_NUM_CASES][CASE_GENDER_LEN]
the cases used by this translation
Definition language.h:58
uint16_t missing
number of missing strings.
Definition language.h:40
char digit_group_separator[8]
Thousand separator used for anything not currencies.
Definition language.h:35
uint8_t newgrflangid
newgrf language id
Definition language.h:52
uint8_t text_dir
default direction of the text
Definition language.h:42
char genders[MAX_NUM_GENDERS][CASE_GENDER_LEN]
the genders used by this translation
Definition language.h:57
uint8_t num_cases
the number of cases of this language
Definition language.h:54
uint32_t ident
32-bits identifier
Definition language.h:27
char digit_decimal_separator[8]
Decimal separator.
Definition language.h:39
char digit_group_separator_currency[8]
Thousand separator used for currencies.
Definition language.h:37
static const uint32_t IDENT
Identifier for OpenTTD language files, big endian for "LANG".
Definition language.h:25
uint8_t GetGenderIndex(std::string_view gender_str) const
Get the index for the given gender.
Definition language.h:68