25#include "../../abi/string.hpp"
26#include "../../io/abstract/virtual_fs_operator.hpp"
35namespace essence::globalization::abstract {
42 requires(!std::same_as<std::decay_t<T>,
translator>)
43 explicit translator(T&& value) : wrapper_{std::make_shared<wrapper<T>>(std::forward<T>(value))} {}
49 [[nodiscard]] std::uint32_t
version()
const {
50 return wrapper_->version();
58 return wrapper_->virtual_fs();
66 wrapper_->set_virtual_fs(std::move(fs_operator));
74 return wrapper_->working_directory();
82 wrapper_->set_working_directory(directory);
90 return wrapper_->language();
98 wrapper_->set_language(name);
106 [[nodiscard]] abi::string
get_text(std::string_view name)
const {
107 return wrapper_->get_text(name);
112 virtual ~base() =
default;
113 virtual std::uint32_t version() = 0;
116 virtual abi::string working_directory() = 0;
117 virtual void set_working_directory(std::string_view directory) = 0;
118 virtual abi::string language() = 0;
119 virtual void set_language(std::string_view name) = 0;
120 virtual abi::string get_text(std::string_view name) = 0;
123 template <
typename T>
124 class wrapper final :
public base {
126 template <std::convertible_to<T> U>
127 explicit wrapper(U&& value) : value_{std::forward<U>(value)} {}
129 std::uint32_t version()
override {
130 return value_.version();
133 io::abstract::virtual_fs_operator virtual_fs()
override {
134 return value_.virtual_fs();
137 void set_virtual_fs(io::abstract::virtual_fs_operator fs_operator)
override {
138 value_.set_virtual_fs(std::move(fs_operator));
141 abi::string working_directory()
override {
142 return value_.working_directory();
145 void set_working_directory(std::string_view directory)
override {
146 value_.set_working_directory(directory);
149 abi::string language()
override {
150 return value_.language();
153 void set_language(std::string_view name)
override {
154 value_.set_language(name);
157 abi::string get_text(std::string_view name)
override {
158 return value_.get_text(name);
165 std::shared_ptr<base> wrapper_;
A translator for retrieving texts in multi-languages.
Definition translator.hpp:39
void set_working_directory(std::string_view directory) const
Sets the working directory.
Definition translator.hpp:81
void set_language(std::string_view name) const
Sets the current language.
Definition translator.hpp:97
void set_virtual_fs(io::abstract::virtual_fs_operator fs_operator) const
Sets the underlying virtual filesystem operator.
Definition translator.hpp:65
abi::string working_directory() const
Gets the working directory.
Definition translator.hpp:73
std::uint32_t version() const
Gets the version of the translator.
Definition translator.hpp:49
abi::string get_text(std::string_view name) const
Gets a text in the current language.
Definition translator.hpp:106
io::abstract::virtual_fs_operator virtual_fs() const
Gets the underlying virtual filesystem operator.
Definition translator.hpp:57
abi::string language() const
Gets the current language.
Definition translator.hpp:89
Provides an ability to operator files on a virtual file system defined by the user.
Definition virtual_fs_operator.hpp:37