71 template<
typename... T_Child>
72 typename std::enable_if<
all_derived<T, T_Child...>::value,
void>::type
75 auto l = { (setSupportedLocale<T_Child>(), 0)... };
89 template<
typename T_Tuple>
90 typename std::enable_if<is_tuple<T_Tuple>::value,
void>::type
92 registerTupleLocales_using_index<T_Tuple>(
107 if (_supportedLocales.empty())
110 if (!_systemCode.empty() &&
setLocale(_systemCode))
115 _locale = _supportedLocales.begin()->second.get();
125 typename std::unordered_map<std::string, std::unique_ptr<T>>::iterator it = _supportedLocales.find(code);
127 if (it != _supportedLocales.end()) {
128 _locale = it->second.get();
144 std::string _systemCode;
145 T* _locale =
nullptr;
146 std::unordered_map<std::string, std::unique_ptr<T>> _supportedLocales;
164 void setSystemCode() {
165 #if defined(__APPLE__)
167 CFLocaleRef locale = CFLocaleCopyCurrent();
173 CFStringRef identifier = (CFStringRef)CFLocaleGetValue(locale, kCFLocaleIdentifier);
175 char buffer[16] = {0};
176 if (CFStringGetCString(identifier, buffer,
sizeof(buffer), kCFStringEncodingUTF8)) {
177 _systemCode = std::string(buffer, 2);
182 #elif defined(__unix__) || defined(__linux__)
186 std::string name = loc.name();
187 if (!name.empty() && name !=
"C" && name !=
"POSIX")
188 _systemCode = name.substr(0, 2);
205 template <typename T_Child, typename = typename std::enable_if<is_derived_from<T_Child, T>::value>::type>
206 void setSupportedLocale() {
208 std::unique_ptr<T_Child> newInstance(
new T_Child());
209 std::string key = newInstance->languageCode();
210 _supportedLocales[key] = std::move(newInstance);
213 template<
typename Tuple, std::size_t... Is>
216 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:73
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:91