1/* 2 * Copyright 2019-2024, Andrew Lindesay <apl@lindesay.co.nz>. 3 * All rights reserved. Distributed under the terms of the MIT License. 4 */ 5#ifndef LANGUAGE_MODEL_H 6#define LANGUAGE_MODEL_H 7 8#include <vector> 9 10#include <Referenceable.h> 11 12#include "Language.h" 13 14 15typedef BReference<Language> LanguageRef; 16 17 18class LanguageModel { 19public: 20 LanguageModel(); 21 LanguageModel(BString forcedSystemDefaultLanguage); 22 virtual ~LanguageModel(); 23 24 void ClearSupportedLanguages(); 25 const int32 CountSupportedLanguages() const; 26 const LanguageRef SupportedLanguageAt(int32 index) const; 27 void AddSupportedLanguage(const LanguageRef& value); 28 void SetPreferredLanguageToSystemDefault(); 29 30 const LanguageRef PreferredLanguage() const 31 { return fPreferredLanguage; } 32 33private: 34 int32 _IndexOfSupportedLanguage( 35 const char* code, 36 const char* countryCode, 37 const char* scriptCode) const; 38 int32 _IndexOfBestMatchingSupportedLanguage( 39 const char* code, 40 const char* countryCode, 41 const char* scriptCode) const; 42 43 Language _DeriveSystemDefaultLanguage() const; 44 Language _DeriveDefaultLanguage() const; 45 Language* _FindBestSupportedLanguage( 46 const char* code, 47 const char* countryCode, 48 const char* scriptCode) const; 49 void _SetPreferredLanguage(const Language& language); 50 51 static int _NullSafeStrCmp(const char* s1, const char* s2); 52 53 static int _LanguagesCompareFn(const LanguageRef& l1, const LanguageRef& l2); 54 static bool _IsLanguageBefore(const LanguageRef& l1, const LanguageRef& l2); 55 56private: 57 std::vector<LanguageRef> 58 fSupportedLanguages; 59 LanguageRef fPreferredLanguage; 60 BString fForcedSystemDefaultLanguage; 61}; 62 63 64#endif // LANGUAGE_MODEL_H