summaryrefslogtreecommitdiff
path: root/core/translation.h
diff options
context:
space:
mode:
Diffstat (limited to 'core/translation.h')
-rw-r--r--core/translation.h45
1 files changed, 11 insertions, 34 deletions
diff --git a/core/translation.h b/core/translation.h
index b4329c0ef7..cba25a434f 100644
--- a/core/translation.h
+++ b/core/translation.h
@@ -31,9 +31,6 @@
#ifndef TRANSLATION_H
#define TRANSLATION_H
-//#define DEBUG_TRANSLATION
-
-#include "core/math/expression.h"
#include "core/resource.h"
class Translation : public Resource {
@@ -42,23 +39,11 @@ class Translation : public Resource {
RES_BASE_EXTENSION("translation");
String locale = "en";
- int plural_forms = 0; // 0 means no "Plural-Forms" is given in the PO header file. The min for all languages is 1.
- String plural_rule;
-
- // TLDR: Maps context to a list of source strings and translated strings. In PO terms, maps msgctxt to a list of msgid and msgstr.
- // The first key corresponds to context, and the second key (of the contained HashMap) corresponds to source string.
- // The value Vector<StringName> in the second map stores the translated strings. Index 0, 1, 2 matches msgstr[0], msgstr[1], msgstr[2]... in the case of plurals.
- // Otherwise index 0 mathes to msgstr in a singular translation.
- // Strings without context have "" as first key.
- HashMap<StringName, HashMap<StringName, Vector<StringName>>> translation_map;
-
- Vector<String> _get_message_list() const;
-
- Dictionary _get_messages() const;
- void _set_messages(const Dictionary &p_messages);
+ Map<StringName, StringName> translation_map;
- int _get_plural_index(int p_n) const;
- int _get_plural_index(const String &p_plural_rule, const Vector<String> &p_input_name, const Array &p_input_value, Ref<Expression> &r_expr) const;
+ virtual Vector<String> _get_message_list() const;
+ virtual Dictionary _get_messages() const;
+ virtual void _set_messages(const Dictionary &p_messages);
protected:
static void _bind_methods();
@@ -66,23 +51,14 @@ protected:
public:
void set_locale(const String &p_locale);
_FORCE_INLINE_ String get_locale() const { return locale; }
- void set_plural_rule(const String &p_plural_rule);
- void add_message(const StringName &p_src_text, const StringName &p_xlated_text, const StringName &p_context = "");
- void add_plural_message(const StringName &p_src_text, const Vector<String> &p_plural_texts, const StringName &p_context = "");
+ virtual void add_message(const StringName &p_src_text, const StringName &p_xlated_text, const StringName &p_context = "");
+ virtual void add_plural_message(const StringName &p_src_text, const Vector<String> &p_plural_xlated_texts, const StringName &p_context = "");
virtual StringName get_message(const StringName &p_src_text, const StringName &p_context = "") const; //overridable for other implementations
virtual StringName get_plural_message(const StringName &p_src_text, const StringName &p_plural_text, int p_n, const StringName &p_context = "") const;
- void erase_message(const StringName &p_src_text, const StringName &p_context = "");
-
- void get_message_list(List<StringName> *r_messages) const;
- int get_message_count() const;
-
- int get_plural_forms() const;
- String get_plural_rule() const;
-
-#ifdef DEBUG_TRANSLATION
- void print_translation_map();
-#endif
+ virtual void erase_message(const StringName &p_src_text, const StringName &p_context = "");
+ virtual void get_message_list(List<StringName> *r_messages) const;
+ virtual int get_message_count() const;
Translation() {}
};
@@ -104,7 +80,7 @@ class TranslationServer : public Object {
static TranslationServer *singleton;
bool _load_translations(const String &p_from);
- StringName _get_message_from_translations(const StringName &p_message, const StringName &p_context, const String &p_locale, const String &p_message_plural = "", int p_n = -1) const;
+ StringName _get_message_from_translations(const StringName &p_message, const StringName &p_context, const String &p_locale, bool plural, const String &p_message_plural = "", int p_n = 0) const;
static void _bind_methods();
@@ -116,6 +92,7 @@ public:
void set_locale(const String &p_locale);
String get_locale() const;
+ Ref<Translation> get_translation_object(const String &p_locale);
String get_locale_name(const String &p_locale) const;