1// Aseprite
2// Copyright (C) 2016-2018 David Capello
3//
4// This program is distributed under the terms of
5// the End-User License Agreement for Aseprite.
6
7#ifndef APP_I18N_STRINGS_INCLUDED
8#define APP_I18N_STRINGS_INCLUDED
9#pragma once
10
11#include <set>
12#include <string>
13#include <unordered_map>
14
15#include "obs/signal.h"
16
17#include "strings.ini.h"
18
19namespace app {
20
21 class Preferences;
22 class Extensions;
23
24 // Singleton class to load and access "strings/en.ini" file.
25 class Strings : public app::gen::Strings<app::Strings> {
26 public:
27 static void createInstance(Preferences& pref,
28 Extensions& exts);
29 static Strings* instance();
30
31 const std::string& translate(const char* id) const;
32
33 std::set<std::string> availableLanguages() const;
34 std::string currentLanguage() const;
35 void setCurrentLanguage(const std::string& langId);
36
37 obs::signal<void()> LanguageChange;
38
39 private:
40 Strings(Preferences& pref,
41 Extensions& exts);
42
43 void loadLanguage(const std::string& langId);
44 void loadStringsFromDataDir(const std::string& langId);
45 void loadStringsFromExtension(const std::string& langId);
46 void loadStringsFromFile(const std::string& fn);
47
48 Preferences& m_pref;
49 Extensions& m_exts;
50 mutable std::unordered_map<std::string, std::string> m_strings;
51 };
52
53} // namespace app
54
55#endif
56