Revision: 7292
http://languagetool.svn.sourceforge.net/languagetool/?rev=7292&view=rev
Author: dnaber
Date: 2012-06-07 21:23:23 +0000 (Thu, 07 Jun 2012)
Log Message:
-----------
fix language detection to use the default variant (as we don't offer just
"English"); handle German and its variants as we do for English and its variants
Modified Paths:
--------------
trunk/JLanguageTool/src/java/org/languagetool/Language.java
trunk/JLanguageTool/src/java/org/languagetool/MessagesBundle.properties
trunk/JLanguageTool/src/java/org/languagetool/MessagesBundle_en.properties
trunk/JLanguageTool/src/java/org/languagetool/gui/LanguageComboBox.java
trunk/JLanguageTool/src/java/org/languagetool/gui/LanguageDetectionCheckbox.java
trunk/JLanguageTool/src/java/org/languagetool/language/English.java
trunk/JLanguageTool/src/java/org/languagetool/language/German.java
trunk/JLanguageTool/src/test/org/languagetool/JLanguageToolTest.java
trunk/JLanguageTool/src/test/org/languagetool/LanguageTest.java
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/FalseFriendRuleTest.java
Added Paths:
-----------
trunk/JLanguageTool/src/java/org/languagetool/language/GermanyGerman.java
Modified: trunk/JLanguageTool/src/java/org/languagetool/Language.java
===================================================================
--- trunk/JLanguageTool/src/java/org/languagetool/Language.java 2012-06-07
19:22:55 UTC (rev 7291)
+++ trunk/JLanguageTool/src/java/org/languagetool/Language.java 2012-06-07
21:23:23 UTC (rev 7292)
@@ -56,6 +56,7 @@
public static final Language ESPERANTO = new Esperanto();
public static final Language FRENCH = new French();
public static final Language GERMAN = new German();
+ public static final Language GERMANY_GERMAN = new GermanyGerman();
public static final Language AUSTRIAN_GERMAN = new AustrianGerman();
public static final Language SWISS_GERMAN = new SwissGerman();
public static final Language ITALIAN = new Italian();
@@ -89,8 +90,8 @@
ENGLISH, GERMAN, POLISH, FRENCH, SPANISH, ITALIAN, KHMER, DUTCH,
LITHUANIAN, UKRAINIAN, RUSSIAN,
SLOVAK, SLOVENIAN, /*SWEDISH,*/ ROMANIAN, ICELANDIC, GALICIAN, CATALAN,
DANISH,
MALAYALAM, BELARUSIAN, ESPERANTO, CHINESE, ASTURIAN, TAGALOG, BRETON,
GREEK,
- AMERICAN_ENGLISH, BRITISH_ENGLISH, AUSTRIAN_GERMAN, SWISS_GERMAN,
- CANADIAN_ENGLISH, SOUTH_AFRICAN_ENGLISH, NEW_ZEALAND_ENGLISH,
AUSTRALIAN_ENGLISH,
+ AMERICAN_ENGLISH, BRITISH_ENGLISH, CANADIAN_ENGLISH,
SOUTH_AFRICAN_ENGLISH, NEW_ZEALAND_ENGLISH, AUSTRALIAN_ENGLISH,
+ GERMANY_GERMAN, AUSTRIAN_GERMAN, SWISS_GERMAN,
DEMO
};
@@ -136,7 +137,7 @@
* @return String[] - array of country variants for the language.
*/
public abstract String[] getCountryVariants();
-
+
/**
* Get this language's Java locale.
*/
@@ -175,6 +176,13 @@
}
/**
+ * Languages that have variants need to overwrite this to select their most
common variant.
+ */
+ public Language getDefaultVariant() {
+ return null;
+ }
+
+ /**
* Get this language's part-of-speech disambiguator implementation.
*/
public Disambiguator getDisambiguator() {
@@ -343,6 +351,45 @@
}
/**
+ * Get the best match for a locale, using American English as the final
fallback if nothing
+ * else fits. The returned language will be a variant language (e.g. British
English, not just English)
+ * if available.
+ */
+ public static Language getLanguageForLocale(final Locale locale) {
+ Language language = getLanguageForLanguageNameAndCountry(locale);
+ if (language != null) {
+ return language;
+ } else {
+ language = getLanguageForLanguageNameOnly(locale);
+ if (language != null) {
+ return language;
+ }
+ }
+ return Language.AMERICAN_ENGLISH; // final fallback
+ }
+
+ private static Language getLanguageForLanguageNameAndCountry(Locale locale) {
+ for (Language language : Language.REAL_LANGUAGES) {
+ if (language.getShortName().equals(locale.getLanguage())) {
+ final List<String> countryVariants =
Arrays.asList(language.getCountryVariants());
+ if (countryVariants.contains(locale.getCountry())) {
+ return language;
+ }
+ }
+ }
+ return null;
+ }
+
+ private static Language getLanguageForLanguageNameOnly(Locale locale) {
+ for (Language language : Language.REAL_LANGUAGES) {
+ if (language.getShortName().equals(locale.getLanguage()) &&
!language.hasVariant()) {
+ return language;
+ }
+ }
+ return null;
+ }
+
+ /**
* Get the Language object for the given language name.
*
* @param languageName e.g. <code>English</code> or <code>German</code>
(case is significant)
Modified:
trunk/JLanguageTool/src/java/org/languagetool/MessagesBundle.properties
===================================================================
--- trunk/JLanguageTool/src/java/org/languagetool/MessagesBundle.properties
2012-06-07 19:22:55 UTC (rev 7291)
+++ trunk/JLanguageTool/src/java/org/languagetool/MessagesBundle.properties
2012-06-07 21:23:23 UTC (rev 7292)
@@ -33,6 +33,8 @@
de = German
+de-DE = German (Germany)
+
de-AT = German (Austrian)
de-CH = German (Swiss)
Modified:
trunk/JLanguageTool/src/java/org/languagetool/MessagesBundle_en.properties
===================================================================
--- trunk/JLanguageTool/src/java/org/languagetool/MessagesBundle_en.properties
2012-06-07 19:22:55 UTC (rev 7291)
+++ trunk/JLanguageTool/src/java/org/languagetool/MessagesBundle_en.properties
2012-06-07 21:23:23 UTC (rev 7292)
@@ -33,6 +33,8 @@
de = German
+de-DE = German (Germany)
+
de-AT = German (Austrian)
de-CH = German (Swiss)
Modified:
trunk/JLanguageTool/src/java/org/languagetool/gui/LanguageComboBox.java
===================================================================
--- trunk/JLanguageTool/src/java/org/languagetool/gui/LanguageComboBox.java
2012-06-07 19:22:55 UTC (rev 7291)
+++ trunk/JLanguageTool/src/java/org/languagetool/gui/LanguageComboBox.java
2012-06-07 21:23:23 UTC (rev 7292)
@@ -29,6 +29,7 @@
public class LanguageComboBox extends JComboBox {
private final ResourceBundle messages;
+ private final List<I18nLanguage> i18nLanguages = new
ArrayList<I18nLanguage>();
public LanguageComboBox(ResourceBundle messages) {
this.messages = messages;
@@ -37,12 +38,21 @@
void populateLanguageBox() {
removeAllItems();
- final List<I18nLanguage> i18nLanguages = getAllLanguages();
- preselectDefaultLanguage(i18nLanguages);
+ initAllLanguages();
+ preselectDefaultLanguage();
}
- private List<I18nLanguage> getAllLanguages() {
- final List<I18nLanguage> i18nLanguages = new ArrayList<I18nLanguage>();
+ void selectLanguage(Language language) {
+ final String translatedName = language.getTranslatedName(messages);
+ for (final I18nLanguage i18nLanguage : i18nLanguages) {
+ if (i18nLanguage.toString().equals(translatedName)) {
+ setSelectedItem(i18nLanguage);
+ }
+ }
+ }
+
+ private void initAllLanguages() {
+ i18nLanguages.clear();
for (Language language : Language.LANGUAGES) {
final boolean skip = (language == Language.DEMO) ||
language.hasVariant();
if (!skip) {
@@ -50,32 +60,14 @@
}
}
Collections.sort(i18nLanguages);
- return i18nLanguages;
- }
-
- private void preselectDefaultLanguage(List<I18nLanguage> i18nLanguages) {
- final String defaultGuiLocale = getDefaultGuiLanguage(Locale.getDefault());
for (final I18nLanguage i18nLanguage : i18nLanguages) {
addItem(i18nLanguage);
- if (i18nLanguage.toString().equals(defaultGuiLocale)) {
- setSelectedItem(i18nLanguage);
- }
}
}
- private String getDefaultGuiLanguage(Locale defaultLocale) {
- String defaultGuiLocale = null;
- try {
- defaultGuiLocale = messages.getString(defaultLocale.getLanguage() + "-"
+ defaultLocale.getCountry());
- } catch (final MissingResourceException e) {
- // this specific language/variant combination is not supported
- try {
- defaultGuiLocale = messages.getString(defaultLocale.getLanguage());
- } catch (final MissingResourceException e2) {
- // language not supported, so don't select a default
- }
- }
- return defaultGuiLocale;
+ private void preselectDefaultLanguage() {
+ final Language defaultLanguage =
Language.getLanguageForLocale(Locale.getDefault());
+ selectLanguage(defaultLanguage);
}
}
Modified:
trunk/JLanguageTool/src/java/org/languagetool/gui/LanguageDetectionCheckbox.java
===================================================================
---
trunk/JLanguageTool/src/java/org/languagetool/gui/LanguageDetectionCheckbox.java
2012-06-07 19:22:55 UTC (rev 7291)
+++
trunk/JLanguageTool/src/java/org/languagetool/gui/LanguageDetectionCheckbox.java
2012-06-07 21:23:23 UTC (rev 7292)
@@ -28,7 +28,6 @@
class LanguageDetectionCheckbox extends JCheckBox {
- private final ResourceBundle messages;
private final LanguageComboBox languageBox;
LanguageDetectionCheckbox(final ResourceBundle messages, final
LanguageComboBox languageBox, final Configuration config) {
@@ -41,7 +40,6 @@
}
});
setSelected(config.getAutoDetect());
- this.messages = messages;
this.languageBox = languageBox;
}
@@ -49,14 +47,13 @@
final LanguageIdentifier langIdentifier = new LanguageIdentifier(text);
Language lang =
Language.getLanguageForShortName(langIdentifier.getLanguage());
if (lang == null) {
- lang = Language.ENGLISH;
+ lang = Language.AMERICAN_ENGLISH;
}
- for (int i = 0; i < languageBox.getItemCount(); i++) {
- final I18nLanguage boxLanguage = (I18nLanguage) languageBox.getItemAt(i);
- if (boxLanguage.toString().equals(lang.getTranslatedName(messages))) {
- languageBox.setSelectedIndex(i);
- }
+ if (lang.hasVariant()) {
+ // UI only shows variants like "English (American)", not just "English",
so use that:
+ lang = lang.getDefaultVariant();
}
+ languageBox.selectLanguage(lang);
return lang;
}
Modified: trunk/JLanguageTool/src/java/org/languagetool/language/English.java
===================================================================
--- trunk/JLanguageTool/src/java/org/languagetool/language/English.java
2012-06-07 19:22:55 UTC (rev 7291)
+++ trunk/JLanguageTool/src/java/org/languagetool/language/English.java
2012-06-07 21:23:23 UTC (rev 7292)
@@ -48,13 +48,18 @@
}
@Override
+ public Language getDefaultVariant() {
+ return AMERICAN_ENGLISH;
+ }
+
+ @Override
public final SentenceTokenizer getSentenceTokenizer() {
if (sentenceTokenizer == null) {
sentenceTokenizer = new SRXSentenceTokenizer(getShortName());
}
return sentenceTokenizer;
}
-
+
@Override
public String getName() {
return "English";
Modified: trunk/JLanguageTool/src/java/org/languagetool/language/German.java
===================================================================
--- trunk/JLanguageTool/src/java/org/languagetool/language/German.java
2012-06-07 19:22:55 UTC (rev 7291)
+++ trunk/JLanguageTool/src/java/org/languagetool/language/German.java
2012-06-07 21:23:23 UTC (rev 7292)
@@ -33,13 +33,18 @@
private Tagger tagger;
private SentenceTokenizer sentenceTokenizer;
-
+
@Override
public Locale getLocale() {
return new Locale(getShortName());
}
@Override
+ public Language getDefaultVariant() {
+ return GERMANY_GERMAN;
+ }
+
+ @Override
public String getName() {
return "German";
}
@@ -51,7 +56,7 @@
@Override
public String[] getCountryVariants() {
- return new String[]{"DE", "LU", "LI", "BE"};
+ return new String[]{"LU", "LI", "BE"};
}
@Override
Copied:
trunk/JLanguageTool/src/java/org/languagetool/language/GermanyGerman.java (from
rev 7290,
trunk/JLanguageTool/src/java/org/languagetool/language/SwissGerman.java)
===================================================================
--- trunk/JLanguageTool/src/java/org/languagetool/language/GermanyGerman.java
(rev 0)
+++ trunk/JLanguageTool/src/java/org/languagetool/language/GermanyGerman.java
2012-06-07 21:23:23 UTC (rev 7292)
@@ -0,0 +1,33 @@
+/* LanguageTool, a natural language style checker
+ * Copyright (C) 2012 Daniel Naber (http://www.danielnaber.de)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+ * USA
+ */
+package org.languagetool.language;
+
+public class GermanyGerman extends German {
+
+ @Override
+ public final String[] getCountryVariants() {
+ return new String[]{"DE"};
+ }
+
+ @Override
+ public final String getName() {
+ return "German (Germany)";
+ }
+
+}
Modified: trunk/JLanguageTool/src/test/org/languagetool/JLanguageToolTest.java
===================================================================
--- trunk/JLanguageTool/src/test/org/languagetool/JLanguageToolTest.java
2012-06-07 19:22:55 UTC (rev 7291)
+++ trunk/JLanguageTool/src/test/org/languagetool/JLanguageToolTest.java
2012-06-07 21:23:23 UTC (rev 7292)
@@ -75,10 +75,22 @@
assertEquals(1, tool.check("Ein Test Test, der Fehler geben
sollte.").size());
tool.activateDefaultPatternRules();
tool.setListUnknownWords(true);
+ // no spelling mistakes as we have not created a variant:
+ assertEquals(0, tool.check("I can give you more a detailed
description").size());
+ //test unknown words listing
+ assertEquals("[I, can, detailed, give, more, you]",
tool.getUnknownWords().toString());
+ }
+
+ public void testGermanyGerman() throws IOException {
+ final JLanguageTool tool = new JLanguageTool(Language.GERMANY_GERMAN);
+ assertEquals(0, tool.check("Ein Test, der keine Fehler geben
sollte.").size());
+ assertEquals(1, tool.check("Ein Test Test, der Fehler geben
sollte.").size());
+ tool.activateDefaultPatternRules();
+ tool.setListUnknownWords(true);
// German rule has no effect with English error, but they are spelling
mistakes:
assertEquals(6, tool.check("I can give you more a detailed
description").size());
//test unknown words listing
- assertEquals("[I, can, detailed, give, more, you]",
tool.getUnknownWords().toString());
+ assertEquals("[I, can, detailed, give, more, you]",
tool.getUnknownWords().toString());
}
public void testPositionsWithGerman() throws IOException {
Modified: trunk/JLanguageTool/src/test/org/languagetool/LanguageTest.java
===================================================================
--- trunk/JLanguageTool/src/test/org/languagetool/LanguageTest.java
2012-06-07 19:22:55 UTC (rev 7291)
+++ trunk/JLanguageTool/src/test/org/languagetool/LanguageTest.java
2012-06-07 21:23:23 UTC (rev 7292)
@@ -22,6 +22,8 @@
import org.junit.Test;
+import java.util.Locale;
+
public class LanguageTest {
@Test
@@ -77,4 +79,18 @@
assertFalse(Language.getLanguageForShortName("pl").hasVariant());
}
+ @Test
+ public void testGetLanguageForLocale() {
+ assertEquals(Language.GERMANY_GERMAN, Language.getLanguageForLocale(new
Locale("de", "DE")));
+ assertEquals(Language.AUSTRIAN_GERMAN, Language.getLanguageForLocale(new
Locale("de", "AT")));
+ assertEquals(Language.AMERICAN_ENGLISH, Language.getLanguageForLocale(new
Locale("en", "US")));
+ assertEquals(Language.BRITISH_ENGLISH, Language.getLanguageForLocale(new
Locale("en", "GB")));
+ // fallback to the language's default variant if not specified:
+ assertEquals(Language.AMERICAN_ENGLISH, Language.getLanguageForLocale(new
Locale("en")));
+ assertEquals(Language.GERMANY_GERMAN, Language.getLanguageForLocale(new
Locale("de")));
+ // final fallback is everything else fails:
+ assertEquals(Language.AMERICAN_ENGLISH,
Language.getLanguageForLocale(Locale.JAPANESE));
+ assertEquals(Language.AMERICAN_ENGLISH, Language.getLanguageForLocale(new
Locale("zz")));
+ }
+
}
Modified:
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/FalseFriendRuleTest.java
===================================================================
---
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/FalseFriendRuleTest.java
2012-06-07 19:22:55 UTC (rev 7291)
+++
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/FalseFriendRuleTest.java
2012-06-07 21:23:23 UTC (rev 7292)
@@ -52,7 +52,7 @@
langTool.activateDefaultFalseFriendRules();
assertErrors(1, "Man sollte ihn nicht so beraten.", langTool);
assertErrors(0, "Man sollte ihn nicht so beschimpfen.", langTool);
- assertErrors(2, "Ich gehe in Blubbstadt zur Hochschule.", langTool);
+ assertErrors(1, "Ich gehe in Blubbstadt zur Hochschule.", langTool);
}
public void testHintsForPolishSpeakers() throws IOException,
ParserConfigurationException, SAXException {
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Languagetool-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/languagetool-cvs