74 template<
typename... T_Child>
75 typename std::enable_if<
all_derived<T, T_Child...>::value,
void>::type
78 auto l = { (setSupportedLocale<T_Child>(), 0)... };
92 template<
typename T_Tuple>
93 typename std::enable_if<is_tuple<T_Tuple>::value,
void>::type
95 registerTupleLocales_using_index<T_Tuple>(
110 if (_supportedLocales.empty())
113 if (!_systemCode.empty() &&
setLocale(_systemCode))
118 _locale = _supportedLocales.begin()->second.get();
128 typename std::unordered_map<std::string, std::unique_ptr<T>>::iterator it = _supportedLocales.find(code);
130 if (it != _supportedLocales.end()) {
131 _locale = it->second.get();
147 std::string _systemCode;
148 T* _locale =
nullptr;
149 std::unordered_map<std::string, std::unique_ptr<T>> _supportedLocales;
167 void setSystemCode() {
168 #if defined(__APPLE__)
170 CFLocaleRef locale = CFLocaleCopyCurrent();
176 CFStringRef identifier = (CFStringRef)CFLocaleGetValue(locale, kCFLocaleIdentifier);
178 char buffer[16] = {0};
179 if (CFStringGetCString(identifier, buffer,
sizeof(buffer), kCFStringEncodingUTF8)) {
180 _systemCode = std::string(buffer, 2);
185 #elif defined(__unix__) || defined(__linux__)
189 std::string name = loc.name();
190 if (!name.empty() && name !=
"C" && name !=
"POSIX")
191 _systemCode = name.substr(0, 2);
209 template <typename T_Child, typename = typename std::enable_if<is_derived_from<T_Child, T>::value>::type>
210 void setSupportedLocale() {
212 std::unique_ptr<T_Child> newInstance(
new T_Child());
213 std::string key = newInstance->languageCode();
214 _supportedLocales[key] = std::move(newInstance);
217 template<
typename Tuple, std::size_t... Is>
220 auto l = { (setSupportedLocale<typename std::tuple_element<Is, Tuple>::type>(), 0)... };
std::enable_if< all_derived< T, T_Child... >::value, void >::type setSupportedLocales()
Register a list of supported locales using template parameter pack.
Definition I18n.hpp:76
std::enable_if< is_tuple< T_Tuple >::value, void >::type setSupportedLocales()
Register supported locales using a std::tuple of types. Each type must derive from T and be default-c...
Definition I18n.hpp:94