class OptionMenuItemNAMESPACE_PlainTranslator : OptionMenuItem
{
override int draw(OptionMenuDescriptor descriptor, int y, int indent, bool selected)
{
translate(descriptor);
return -1;
}
override bool selectable()
{
return false;
}
void init()
{
Super.init("", 'None');
}
private void translate(OptionMenuDescriptor descriptor)
{
if (!mIsInitialized)
{
mIsInitialized = true;
mOldLanguage = language;
mOriginalTitle = descriptor.mTitle;
mTitleId = makeId(descriptor.mTitle);
foreach (item : descriptor.mItems)
{
if (item is "OptionMenuItemSubmenu")
{
let submenuDescriptor =
OptionMenuDescriptor(MenuDescriptor.getDescriptor(item.getAction()));
if (submenuDescriptor != NULL)
{
submenuDescriptor.mItems.
insert(0, new("OptionMenuItemNAMESPACE_PlainTranslator"));
}
}
addLabel(item.mLabel);
}
replaceLabels(descriptor);
return;
}
if (language == mOldLanguage) return;
mOldLanguage = language;
replaceLabels(descriptor);
}
private void replaceLabels(OptionMenuDescriptor descriptor)
{
descriptor.mTitle = getLocalizedLabel(mTitleId, mOriginalTitle);
int itemsNumber = descriptor.mItems.size();
if (mOriginalLabels.size() != itemsNumber) return;
for (int i = 0; i < itemsNumber; ++i)
descriptor.mItems[i].mLabel = getLocalizedLabel(mLabelIds[i], mOriginalLabels[i]);
}
private void addLabel(string label)
{
mOriginalLabels.push(label);
mLabelIds.push(makeId(label));
}
private string makeId(string label)
{
static const string toReplaces[] = {" ", ",", "!", "?", "-"};
foreach (toReplace : toReplaces) label.replace(toReplace, "_");
return "NAMESPACE_" .. label;
}
private string getLocalizedLabel(string labelId, string originalLabel)
{
string localizedLabel = StringTable.localize(labelId, false);
bool localizationFound = localizedLabel != labelId;
return localizationFound ? localizedLabel : originalLabel;
}
private bool mIsInitialized;
private string mOldLanguage;
private Array<string> mOriginalLabels;
private Array<string> mLabelIds;
private string mOriginalTitle;
private string mTitleId;
}