Luanti 5.16.0-dev
Loading...
Searching...
No Matches
translation.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2017 Nore, Nathanaƫlle Courant <nore@mesecons.net>
4
5#pragma once
6
8#include <unordered_map>
9#include <map>
10#include <optional>
11#include <string>
12#include <string_view>
13#include <vector>
14
15class Translations;
17
19{
20public:
21 void loadTranslation(const std::string &filename, const std::string &data);
22 void clear();
23
24 const std::wstring &getTranslation(
25 const std::wstring &textdomain, const std::wstring &s) const;
26 const std::wstring &getPluralTranslation(const std::wstring &textdomain,
27 const std::wstring &s, unsigned long int number) const;
28
29 static const std::string_view getFileLanguage(std::string_view filename);
30 static inline bool isTranslationFile(std::string_view filename)
31 {
32 return !getFileLanguage(filename).empty();
33 }
34
35 // for testing
36 inline size_t size()
37 {
38 return m_translations.size() + m_plural_translations.size()/2;
39 }
40
41private:
42 std::unordered_map<std::wstring, std::wstring> m_translations;
43 std::unordered_map<std::wstring, std::pair<GettextPluralForm::Ptr, std::vector<std::wstring>>> m_plural_translations;
44
45 void addTranslation(const std::wstring &textdomain, const std::wstring &original,
46 const std::wstring &translated);
47 void addPluralTranslation(const std::wstring &textdomain,
48 const GettextPluralForm::Ptr &plural,
49 const std::wstring &original,
50 std::vector<std::wstring> &translated);
51 std::wstring unescapeC(const std::wstring &str);
52 std::optional<std::pair<std::wstring, std::wstring>> parsePoLine(const std::string &line);
53 bool inEscape(const std::wstring &str, size_t pos);
54 void loadPoEntry(const std::wstring &basefilename, const GettextPluralForm::Ptr &plural_form, const std::map<std::wstring, std::wstring> &entry);
55 void loadMoEntry(const std::wstring &basefilename, const GettextPluralForm::Ptr &plural_form, const std::string &original, const std::string &translated);
56 void loadTrTranslation(const std::string &data);
57 void loadPoTranslation(const std::string &basefilename, const std::string &data);
58 void loadMoTranslation(const std::string &basefilename, const std::string &data);
59};
std::shared_ptr< GettextPluralForm > Ptr
Definition gettext_plural_form.h:14
Definition translation.h:19
std::wstring unescapeC(const std::wstring &str)
Definition translation.cpp:198
size_t size()
Definition translation.h:36
const std::wstring & getPluralTranslation(const std::wstring &textdomain, const std::wstring &s, unsigned long int number) const
Definition translation.cpp:48
void loadMoTranslation(const std::string &basefilename, const std::string &data)
Definition translation.cpp:551
void clear()
Definition translation.cpp:32
void addTranslation(const std::wstring &textdomain, const std::wstring &original, const std::wstring &translated)
Definition translation.cpp:66
const std::wstring & getTranslation(const std::wstring &textdomain, const std::wstring &s) const
Definition translation.cpp:38
void loadTrTranslation(const std::string &data)
Definition translation.cpp:93
std::unordered_map< std::wstring, std::wstring > m_translations
Definition translation.h:42
bool inEscape(const std::wstring &str, size_t pos)
Definition translation.cpp:354
void loadTranslation(const std::string &filename, const std::string &data)
Definition translation.cpp:628
void addPluralTranslation(const std::wstring &textdomain, const GettextPluralForm::Ptr &plural, const std::wstring &original, std::vector< std::wstring > &translated)
Definition translation.cpp:75
void loadMoEntry(const std::wstring &basefilename, const GettextPluralForm::Ptr &plural_form, const std::string &original, const std::string &translated)
Definition translation.cpp:513
std::unordered_map< std::wstring, std::pair< GettextPluralForm::Ptr, std::vector< std::wstring > > > m_plural_translations
Definition translation.h:43
static bool isTranslationFile(std::string_view filename)
Definition translation.h:30
void loadPoEntry(const std::wstring &basefilename, const GettextPluralForm::Ptr &plural_form, const std::map< std::wstring, std::wstring > &entry)
Definition translation.cpp:320
static const std::string_view getFileLanguage(std::string_view filename)
Definition translation.cpp:20
std::optional< std::pair< std::wstring, std::wstring > > parsePoLine(const std::string &line)
Definition translation.cpp:368
void loadPoTranslation(const std::string &basefilename, const std::string &data)
Definition translation.cpp:417
Translations * g_client_translations
Definition translation.cpp:17