mirror of
https://github.com/godotengine/godot.git
synced 2026-05-12 22:35:35 +00:00
Add default plural rules
This makes the PO loader correctly handle the situation where the optional `Plural-Forms` header field does not exist. The `Translation` class and its subclasses always have access to valid plural rules via `_get_plural_rules()`. Plural rules are prioritized: 1. `Translation.plural_rules_override` 2. `TranslationServer.get_plural_rules(locale)` 3. The English plural rules: `nplurals=2; plurals=(n != 1)` Co-Authored-By: Pāvels Nadtočajevs <7645683+bruvzg@users.noreply.github.com>
This commit is contained in:
@@ -33,6 +33,8 @@
|
||||
#include "core/io/resource.h"
|
||||
#include "core/object/gdvirtual.gen.inc"
|
||||
|
||||
class PluralRules;
|
||||
|
||||
class Translation : public Resource {
|
||||
GDCLASS(Translation, Resource);
|
||||
OBJ_SAVE_TYPE(Translation);
|
||||
@@ -41,6 +43,9 @@ class Translation : public Resource {
|
||||
String locale = "en";
|
||||
HashMap<StringName, StringName> translation_map;
|
||||
|
||||
mutable PluralRules *plural_rules_cache = nullptr;
|
||||
String plural_rules_override;
|
||||
|
||||
virtual Vector<String> _get_message_list() const;
|
||||
virtual Dictionary _get_messages() const;
|
||||
virtual void _set_messages(const Dictionary &p_messages);
|
||||
@@ -48,6 +53,8 @@ class Translation : public Resource {
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
PluralRules *_get_plural_rules() const;
|
||||
|
||||
GDVIRTUAL2RC(StringName, _get_message, StringName, StringName);
|
||||
GDVIRTUAL4RC(StringName, _get_plural_message, StringName, StringName, int, StringName);
|
||||
|
||||
@@ -64,5 +71,8 @@ public:
|
||||
virtual int get_message_count() const;
|
||||
virtual Vector<String> get_translated_message_list() const;
|
||||
|
||||
Translation() {}
|
||||
void set_plural_rules_override(const String &p_rules);
|
||||
String get_plural_rules_override() const;
|
||||
|
||||
~Translation();
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user