/*
* Copyright (c) 1998-2017 by Richard A. Wilkes. All rights reserved.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, version 2.0. If a copy of the MPL was not distributed with
* this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This Source Code Form is "Incompatible With Secondary Licenses", as
* defined by the Mozilla Public License, version 2.0.
*/
package com.trollworks.gcs.menu.edit;
import com.trollworks.toolkit.annotation.Localize;
import com.trollworks.toolkit.ui.menu.Command;
import com.trollworks.toolkit.ui.widget.WindowUtils;
import com.trollworks.toolkit.utility.Localization;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.PrintWriter;
import java.util.Locale;
/** Provides a menu item to set a language for the user interface. */
public class SetLanguageCommand extends Command {
@Localize("Automatic")
private static String AUTO;
@Localize("English")
private static String ENGLISH;
@Localize("German")
private static String GERMAN;
@Localize("Russian")
private static String RUSSIAN;
@Localize("Spanish")
private static String SPANISH;
@Localize("You will need to restart GCS for this change to take effect.")
private static String NOTICE;
static {
Localization.initialize();
}
private static final String CMD = "SetLanguage:"; //$NON-NLS-1$
private Locale mLocale;
private static String getTitle(Locale locale) {
if (locale == null) {
return AUTO;
}
switch (locale.getLanguage()) {
case "en": //$NON-NLS-1$
return ENGLISH;
case "de": //$NON-NLS-1$
return GERMAN;
case "ru": //$NON-NLS-1$
return RUSSIAN;
case "es": //$NON-NLS-1$
return SPANISH;
default:
return locale.getLanguage();
}
}
public SetLanguageCommand(Locale locale) {
super(getTitle(locale), CMD + getTitle(locale));
mLocale = locale;
}
private boolean matches(Locale locale) {
return mLocale == null ? locale == null : mLocale.equals(locale);
}
@Override
public void adjust() {
Locale locale = Localization.getLocaleOverride();
boolean matches = matches(locale);
setEnabled(!matches);
setMarked(matches);
}
@Override
public void actionPerformed(ActionEvent event) {
Locale locale = Localization.getLocaleOverride();
if (!matches(locale)) {
File file = Localization.getLocaleOverrideFile();
if (mLocale == null) {
file.delete();
} else {
try (PrintWriter out = new PrintWriter(file)) {
out.println(mLocale.getLanguage());
} catch (Exception ex) {
// Ignore
}
}
WindowUtils.showWarning(null, NOTICE);
}
}
}