Files
android_bootable_recovery/gui/twmsg.h
Ethan Yonker 74db157b94 Multiple Language Support
This is similar to https://gerrit.omnirom.org/#/c/14014

A lot of the features built in the older patch set have been split
out into separate patches, most of which have already been merged.
The remaining functionality here should all be directly related to
language selection and loading. We always load English as a base
before loading other languages over the top of the base. The idea
is that if another language is missing a translation, then we will
still display the English.

Maybe still to do: read the /cache/recovery/last_locale file and
load a language based on that. For me, this file contains just:
en_US
We probably won't bother with region specific translations so we
would have to look at either trimming off the _US or using some
other method like perhaps a symlink or a combination of the two.

Thanks to _that for twmsg.cpp class

Change-Id: I9647a22e47883a3ddd2de1da51f64aab7c328f74
2015-12-19 08:31:01 -06:00

98 lines
2.6 KiB
C++

/*
Copyright 2015 _that/TeamWin
This file is part of TWRP/TeamWin Recovery Project.
TWRP is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
TWRP is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with TWRP. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef twmsg_h
#define twmsg_h
#include <cstdlib>
#include <cstring>
#include <string>
#include <sstream>
#include <vector>
#include <errno.h>
/*
Abstract interface for something that can look up strings by name.
*/
class StringLookup
{
public:
virtual std::string operator()(const std::string& name) const = 0;
virtual ~StringLookup() {};
};
namespace msg
{
// These get translated to colors in the GUI console
enum Kind
{
kNormal,
kHighlight,
kWarning,
kError
};
template<typename T> std::string to_string(const T& v)
{
std::ostringstream ss;
ss << v;
return ss.str();
}
}
/*
Generic message formatting class.
Designed to decouple message generation from actual resource string lookup and variable insertion,
so that messages can be re-translated at any later time.
*/
class Message
{
msg::Kind kind; // severity or similar message kind
std::string name; // the resource string name. may be of format "name=default value".
std::vector<std::string> variables; // collected insertion variables to replace {1}, {2}, ...
const StringLookup& resourceLookup; // object to resolve resource string name into a final format string
const StringLookup& varLookup; // object to resolve any non-numeric insertion strings
std::string GetFormatString(const std::string& name) const;
public:
Message(msg::Kind kind, const char* name, const StringLookup& resourceLookup, const StringLookup& varLookup)
: kind(kind), name(name), resourceLookup(resourceLookup), varLookup(varLookup) {}
// Variable insertion.
template<typename T>
Message& operator()(const T& v) { variables.push_back(msg::to_string(v)); return *this; }
// conversion to final string
operator std::string() const;
// Get Message Kind
msg::Kind GetKind() {return kind;};
};
// Utility functions to create messages with standard resource and data manager lookups.
// Short names to make usage convenient.
Message Msg(const char* name);
Message Msg(msg::Kind kind, const char* name);
#endif