Luanti 5.15.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 <vector>
13
14class Translations;
16
18{
19public:
20 void loadTranslation(const std::string &filename, const std::string &data);
21 void clear();
22 const std::wstring &getTranslation(
23 const std::wstring &textdomain, const std::wstring &s) const;
24 const std::wstring &getPluralTranslation(const std::wstring &textdomain,
25 const std::wstring &s, unsigned long int number) const;
26 static const std::string_view getFileLanguage(const std::string &filename);
27 static inline bool isTranslationFile(const std::string &filename)
28 {
29 return getFileLanguage(filename) != "";
30 }
31 // for testing
32 inline size_t size()
33 {
34 return m_translations.size() + m_plural_translations.size()/2;
35 }
36
37private:
38 std::unordered_map<std::wstring, std::wstring> m_translations;
39 std::unordered_map<std::wstring, std::pair<GettextPluralForm::Ptr, std::vector<std::wstring>>> m_plural_translations;
40
41 void addTranslation(const std::wstring &textdomain, const std::wstring &original,
42 const std::wstring &translated);
43 void addPluralTranslation(const std::wstring &textdomain,
44 const GettextPluralForm::Ptr &plural,
45 const std::wstring &original,
46 std::vector<std::wstring> &translated);
47 std::wstring unescapeC(const std::wstring &str);
48 std::optional<std::pair<std::wstring, std::wstring>> parsePoLine(const std::string &line);
49 bool inEscape(const std::wstring &str, size_t pos);
50 void loadPoEntry(const std::wstring &basefilename, const GettextPluralForm::Ptr &plural_form, const std::map<std::wstring, std::wstring> &entry);
51 void loadMoEntry(const std::wstring &basefilename, const GettextPluralForm::Ptr &plural_form, const std::string &original, const std::string &translated);
52 void loadTrTranslation(const std::string &data);
53 void loadPoTranslation(const std::string &basefilename, const std::string &data);
54 void loadMoTranslation(const std::string &basefilename, const std::string &data);
55};
std::shared_ptr< GettextPluralForm > Ptr
Definition gettext_plural_form.h:14
Definition translation.h:18
std::wstring unescapeC(const std::wstring &str)
Definition translation.cpp:198
size_t size()
Definition translation.h:32
const std::wstring & getPluralTranslation(const std::wstring &textdomain, const std::wstring &s, unsigned long int number) const
Definition translation.cpp:48
static const std::string_view getFileLanguage(const std::string &filename)
Definition translation.cpp:20
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:38
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
static bool isTranslationFile(const std::string &filename)
Definition translation.h:27
std::unordered_map< std::wstring, std::pair< GettextPluralForm::Ptr, std::vector< std::wstring > > > m_plural_translations
Definition translation.h:39
void loadPoEntry(const std::wstring &basefilename, const GettextPluralForm::Ptr &plural_form, const std::map< std::wstring, std::wstring > &entry)
Definition translation.cpp:320
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