Files
devilutionX/Source/utils/language.h
T
Gleb Mazovetskiy 254806e027 Optimize translation RAM usage
1. Store all key data and all values data as 2 char arrays.
2. Change map keys to char pointers.
3. Change map values to offsets into the values array.

Example savings for Russian: 460 KiB -> 374.2 KiB (-85.8 KiB)

* Map: 68.5 KiB (with `string_view` keys it would be 101.5 KiB)
* Keys array: 108.7 KiB
* Values array: 197.0 KiB
2022-07-08 11:52:18 +01:00

43 lines
1.3 KiB
C++

#pragma once
#include <string>
#include "utils/stdcompat/string_view.hpp"
#define _(x) LanguageTranslate(x)
#define ngettext(x, y, z) LanguagePluralTranslate(x, y, z)
#define pgettext(context, x) LanguageParticularTranslate(context, x)
#define N_(x) (x)
#define P_(context, x) (x)
bool HasTranslation(const std::string &locale);
void LanguageInitialize();
/**
* @brief Returns the translation for the given key.
*
* @return guaranteed to be null-terminated.
*/
devilution::string_view LanguageTranslate(const char *key);
inline devilution::string_view LanguageTranslate(const std::string &key)
{
return LanguageTranslate(key.c_str());
}
/**
* @brief Returns a singular or plural translation for the given keys and count.
*
* @return guaranteed to be null-terminated if `plural` is.
*/
devilution::string_view LanguagePluralTranslate(const char *singular, devilution::string_view plural, int count);
/**
* @brief Returns the translation for the given key and context identifier.
*
* @return guaranteed to be null-terminated.
*/
devilution::string_view LanguageParticularTranslate(devilution::string_view context, devilution::string_view message);
// Chinese and Japanese, and Korean small font is 16px instead of a 12px one for readability.
bool IsSmallFontTall();