1//
2// Copyright (c) 2009-2011 Artyom Beilis (Tonkikh)
3//
4// Distributed under the Boost Software License, Version 1.0.
5// https://www.boost.org/LICENSE_1_0.txt
6
7#ifndef BOOST_LOCALE_LOCALIZATION_BACKEND_HPP
8#define BOOST_LOCALE_LOCALIZATION_BACKEND_HPP
9
10#include <boost/locale/generator.hpp>
11#include <boost/locale/hold_ptr.hpp>
12#include <locale>
13#include <memory>
14#include <string>
15#include <vector>
16
17#ifdef BOOST_MSVC
18# pragma warning(push)
19# pragma warning(disable : 4275 4251 4231 4660)
20#endif
21
22namespace boost { namespace locale {
23
24 /// \brief this class represents a localization backend that can be used for localizing your application.
25 ///
26 /// Backends are usually registered inside the localization backends manager and allow transparent support
27 /// of different backends, so a user can switch the backend by simply linking the application to the correct one.
28 ///
29 /// Backends may support different tuning options, but these are the default options available to the user
30 /// for all of them
31 ///
32 /// -# \c locale - the name of the locale in POSIX format like en_US.UTF-8
33 /// -# \c use_ansi_encoding - select system locale using ANSI codepages rather then UTF-8 under Windows
34 /// by default
35 /// -# \c message_path - path to the location of message catalogs (vector of strings)
36 /// -# \c message_application - the name of applications that use message catalogs (vector of strings)
37 ///
38 /// Each backend can be installed with a different default priority so when you work with two different backends,
39 /// you can specify priority so this backend will be chosen according to their priority.
40 class BOOST_LOCALE_DECL localization_backend {
41 protected:
42 localization_backend(const localization_backend&) = default;
43 localization_backend& operator=(const localization_backend&) = default;
44
45 public:
46 localization_backend() = default;
47 virtual ~localization_backend();
48
49 /// Make a polymorphic copy of the backend
50 virtual localization_backend* clone() const = 0;
51
52 /// Set option for backend, for example "locale" or "encoding"
53 virtual void set_option(const std::string& name, const std::string& value) = 0;
54
55 /// Clear all options
56 virtual void clear_options() = 0;
57
58 /// Create a facet for category \a category and character type \a type
59 virtual std::locale install(const std::locale& base, category_t category, char_facet_t type) = 0;
60
61 }; // localization_backend
62
63 /// \brief Localization backend manager is a class that holds various backend and allows creation
64 /// of their combination or selection
65 class BOOST_LOCALE_DECL localization_backend_manager {
66 public:
67 /// New empty localization_backend_manager
68 localization_backend_manager();
69 /// Copy localization_backend_manager
70 localization_backend_manager(const localization_backend_manager&);
71 /// Assign localization_backend_manager
72 localization_backend_manager& operator=(const localization_backend_manager&);
73 /// Move construct localization_backend_manager
74 localization_backend_manager(localization_backend_manager&&) noexcept;
75 /// Move assign localization_backend_manager
76 localization_backend_manager& operator=(localization_backend_manager&&) noexcept;
77
78 /// Destructor
79 ~localization_backend_manager();
80
81 /// Create new localization backend according to current settings. Ownership is passed to caller
82 std::unique_ptr<localization_backend> create() const;
83
84 BOOST_DEPRECATED("This function is deprecated, use 'create()' instead")
85 std::unique_ptr<localization_backend> get() const { return create(); } // LCOV_EXCL_LINE
86 BOOST_DEPRECATED("This function is deprecated, use 'create()' instead")
87 std::unique_ptr<localization_backend> get_unique_ptr() const { return create(); } // LCOV_EXCL_LINE
88
89 /// Add new backend to the manager, each backend should be uniquely defined by its name.
90 ///
91 /// This library provides: "icu", "posix", "winapi" and "std" backends.
92 void add_backend(const std::string& name, std::unique_ptr<localization_backend> backend);
93
94 // clang-format off
95 BOOST_DEPRECATED("This function is deprecated, use 'add_backend' instead")
96 void adopt_backend(const std::string& name, localization_backend* backend) { add_backend(name, backend: std::unique_ptr<localization_backend>(backend)); } // LCOV_EXCL_LINE
97 // clang-format on
98
99 /// Clear backend
100 void remove_all_backends();
101
102 /// Get list of all available backends
103 std::vector<std::string> get_all_backends() const;
104
105 /// Select specific backend by name for a category \a category. It allows combining different
106 /// backends for user preferences.
107 void select(const std::string& backend_name, category_t category = all_categories);
108
109 /// Set new global backend manager, the old one is returned.
110 ///
111 /// This function is thread safe
112 static localization_backend_manager global(const localization_backend_manager&);
113 /// Get global backend manager
114 ///
115 /// This function is thread safe
116 static localization_backend_manager global();
117
118 private:
119 class impl;
120 hold_ptr<impl> pimpl_;
121 };
122
123}} // namespace boost::locale
124
125#ifdef BOOST_MSVC
126# pragma warning(pop)
127#endif
128
129#endif
130

source code of boost/libs/locale/include/boost/locale/localization_backend.hpp