On Wed, Aug 20, 2008 at 3:11 AM,  <nextgens at freenetproject.org> wrote:
> Author: nextgens
> Date: 2008-08-19 19:11:49 +0000 (Tue, 19 Aug 2008)
> New Revision: 22032
>
> Modified:
>   trunk/freenet/src/freenet/clients/http/PageMaker.java
>   trunk/freenet/src/freenet/clients/http/TranslationToadlet.java
>   trunk/freenet/src/freenet/l10n/L10n.java
>   trunk/freenet/src/freenet/node/Node.java
>   trunk/freenet/src/freenet/node/fcp/NodeHelloMessage.java
> Log:
> Use an enum in the L10n framework; needs testing.
>
> Modified: trunk/freenet/src/freenet/clients/http/PageMaker.java
> ===================================================================
> --- trunk/freenet/src/freenet/clients/http/PageMaker.java       2008-08-19 
> 18:50:57 UTC (rev 22031)
> +++ trunk/freenet/src/freenet/clients/http/PageMaker.java       2008-08-19 
> 19:11:49 UTC (rev 22032)
> @@ -94,7 +94,7 @@
>        public HTMLNode getPageNode(String title, boolean 
> renderNavigationLinks, ToadletContext ctx) {
>                boolean fullAccess = ctx == null ? false : 
> ctx.isAllowedFullAccess();
>                HTMLNode pageNode = new HTMLNode.HTMLDoctype("html", 
> "-//W3C//DTD XHTML 1.1//EN");
> -               HTMLNode htmlNode = pageNode.addChild("html", "xml:lang", 
> L10n.getSelectedLanguage());
> +               HTMLNode htmlNode = pageNode.addChild("html", "xml:lang", 
> L10n.getSelectedLanguage().getISOCode());
>                HTMLNode headNode = htmlNode.addChild("head");
>                headNode.addChild("meta", new String[] { "http-equiv", 
> "content" }, new String[] { "Content-Type", "text/html; charset=utf-8" });
>                headNode.addChild("title", title + " - Freenet");
>
> Modified: trunk/freenet/src/freenet/clients/http/TranslationToadlet.java
> ===================================================================
> --- trunk/freenet/src/freenet/clients/http/TranslationToadlet.java      
> 2008-08-19 18:50:57 UTC (rev 22031)
> +++ trunk/freenet/src/freenet/clients/http/TranslationToadlet.java      
> 2008-08-19 19:11:49 UTC (rev 22032)
> @@ -154,7 +154,7 @@
>
>                HTMLNode translationNode = contentNode.addChild("div", 
> "class", "translation");
>                HTMLNode translationHeaderNode = translationNode.addChild("p");
> -               translationHeaderNode.addChild("#", 
> l10n("contributingToLabelWithLang", "lang", L10n.getSelectedLanguage()));
> +               translationHeaderNode.addChild("#", 
> l10n("contributingToLabelWithLang", "lang", 
> L10n.getSelectedLanguage().getFullName()));
>                translationHeaderNode.addChild("a", "href", 
> TOADLET_URL+"?getOverrideTranlationFile").addChild("#", 
> l10n("downloadTranslationsFile"));
>                translationHeaderNode.addChild("#", " ");
>                if(showEverything)
>
> Modified: trunk/freenet/src/freenet/l10n/L10n.java
> ===================================================================
> --- trunk/freenet/src/freenet/l10n/L10n.java    2008-08-19 18:50:57 UTC (rev 
> 22031)
> +++ trunk/freenet/src/freenet/l10n/L10n.java    2008-08-19 19:11:49 UTC (rev 
> 22032)
> @@ -31,25 +31,83 @@
>        public static final String SUFFIX = ".properties";
>        public static final String OVERRIDE_SUFFIX = ".override" + SUFFIX;
>
> -       public static final String FALLBACK_DEFAULT = "en";
> +       public static final LANGUAGE FALLBACK_DEFAULT = LANGUAGE.ENGLISH;
> +
>        /** @see http://www.omniglot.com/language/names.htm */
> -       public static final String[][] AVAILABLE_LANGUAGES = {
> -               new String[] { "en", "English", "eng" },
> -               new String[] { "es", "Espa?ol", "spa" },
> -               new String[] { "da", "Dansk", "dan" },
> -               new String[] { "de", "Deutsch", "deu" },
> -               new String[] { "fi", "Suomi", "fin" },
> -               new String[] { "fr", "Fran?ais", "fra" },
> -               new String[] { "it", "Italiano", "ita" },
> -               new String[] { "no", "Norsk", "nor" },
> -               new String[] { "pl", "Polski", "pol" },
> -               new String[] { "se", "Svenska", "svk" },
> -               new String[] { "zh-cn", "??(??)", "chn" },
> -               new String[] { "zh-tw", "??(??)", "zh-tw" },
> -               new String[] { "unlisted", "unlisted", "unlisted"},
> -       };
> -       private final String selectedLanguage;
> +       public enum LANGUAGE {
> +               ENGLISH("en", "English", "eng"),
> +               SPANISH("es", "Espa?ol", "spa"),
> +               DANISH("da", "Dansk", "dan"),
> +               GERMAN("de", "Deutsch", "deu"),
> +               FINNISH("fi", "Suomi", "fin"),
> +               FRENCH("fr", "Fran?ais", "fra"),
> +               ITALIAN("it", "Italiano", "ita"),
> +               NORWEGIAN("no", "Norsk", "nor"),
> +               POLISH("pl", "Polski", "pol"),
> +               SWEDISH("se", "Svenska", "svk"),
> +               CHINESE("zh-cn", "??(??)", "chn"),
> +               CHINESE_TAIWAN("zh-tw", "??(??)", "zh-tw"),

Why "chn" for zh-cn while keeping zh-tw intract?
What's the "short code" intended for?

"chn" is the ISO-639 code for "Chinook jargon"
"chn" is the ISO 3166-1 code for China (the nation, not the language)

The ISO-639-1 code for Chinese (PRC Mainland or Taiwan) is zho-*
(It's the code for *spoken* language, not *written* language, so there is no
 exact mapping)

The IANA standard is even messier:
 zh-cmn       Mandarin Chinese
 zh-cmn-Hans  Mandarin Chinese (Simplified)
 zh-cmn-Hant  Mandarin Chinese (Traditional)
 zh-Hans      Chinese, in simplified script
 zh-Hans-CN   PRC Mainland Chinese in simplified script  ...[ this is
what our zh-cn use ]
 zh-Hans-TW   Taiwan Chinese in simplified script  ...[which never exist]
[...]
 zh-Hant      Chinese, in traditional script
 zh-Hant-CN   PRC Mainland Chinese in traditional script  ...[which never exist]
 zh-Hant-TW   Taiwan Chinese in traditional script  ...[ this is what
our zh-tw use ]

The "zh-tw" / "zh-cn" are unix tradition, which is not in any standard
I am awared of.


> +               UNLISTED("unlisted", "unlisted", "unlisted");
> +
> +               private final String shortCode;
> +               private final String fullName;
> +               private final String isoCode;
> +
> +               LANGUAGE(String shortCode, String fullName, String isoCode) {
> +                       this.shortCode = shortCode;
> +                       this.fullName = fullName;
> +                       this.isoCode = isoCode;
> +               }
> +
> +               LANGUAGE(LANGUAGE l) {
> +                       this(l.getShortCode(), l.getFullName(), 
> l.getISOCode());
> +               }
> +
> +               public static LANGUAGE mapToLanguage(String whatever) throws 
> MissingResourceException {
> +                       for(LANGUAGE currentLanguage : LANGUAGE.values()) {
> +                               
> if(currentLanguage.getShortCode().equalsIgnoreCase(whatever) ||
> +                                  
> currentLanguage.getShortCode().equalsIgnoreCase(whatever) ||
> +                                  
> currentLanguage.getISOCode().equalsIgnoreCase(whatever) ||
> +                                  
> currentLanguage.toString().equalsIgnoreCase(whatever))
> +                               {
> +                                       return currentLanguage;
> +                               }
> +                       }
> +                       return null;
> +               }
> +
> +               public String getFullName() {
> +                       return fullName;
> +               }
> +
> +               public String getShortCode() {
> +                       return shortCode;
> +               }
> +
> +               public String getISOCode() {
> +                       return isoCode;
> +               }
> +
> +               protected String getL10nFilename() {
> +                       return PREFIX.replace ('.', 
> '/').concat(PREFIX.concat(shortCode.concat(SUFFIX)));
> +               }
> +
> +               protected String getL10nOverrideFilename() {
> +                       return L10n.PREFIX + shortCode + L10n.OVERRIDE_SUFFIX;
> +               }
> +
> +               public static String[] valuesWithFullNames() {
> +                       LANGUAGE[] allValues = values();
> +                       String[] result = new String[allValues.length];
> +                       for(int i=0; i<allValues.length; i++)
> +                               result[i] = allValues[i].getFullName();
> +
> +                       return result;
> +               }
> +       }
>
> +       private final LANGUAGE selectedLanguage;
> +
>        private static SimpleFieldSet currentTranslation = null;
>        private static SimpleFieldSet fallbackTranslation = null;
>        private static L10n currentClass = null;
> @@ -57,11 +115,10 @@
>        private static SimpleFieldSet translationOverride;
>        private static final Object sync = new Object();
>
> -       L10n(String selected) {
> -               selectedLanguage = mapLanguageNameToShortCode(selected);
> -               File tmpFile = new File(L10n.PREFIX + selectedLanguage + 
> L10n.OVERRIDE_SUFFIX);
> -
> +       L10n(LANGUAGE selected) {
> +               selectedLanguage = selected;
>                try {
> +                       File tmpFile = new 
> File(selected.getL10nOverrideFilename());
>                        if(tmpFile.exists() && tmpFile.canRead() && 
> tmpFile.length() > 0) {
>                                Logger.normal(this, "Override file detected : 
> let's try to load it");
>                                translationOverride = 
> SimpleFieldSet.readFrom(tmpFile, false, false);
> @@ -94,15 +151,17 @@
>        * @throws MissingResourceException
>        */
>        public static void setLanguage(String selectedLanguage) throws 
> MissingResourceException {
> -               selectedLanguage = 
> mapLanguageNameToLongName(selectedLanguage);
>                synchronized (sync) {
>                        Logger.normal(CLASS_NAME, "Changing the current 
> language to : " + selectedLanguage);
> -                       currentClass = new L10n(selectedLanguage);
> +                       L10n oldClass = currentClass;
> +                       LANGUAGE lang = 
> LANGUAGE.mapToLanguage(selectedLanguage);
>                        if(currentClass == null) {
> -                               currentClass = new L10n(FALLBACK_DEFAULT);
> +                               currentClass = (oldClass != null ? oldClass : 
> new L10n(FALLBACK_DEFAULT));
>                                Logger.error(CLASS_NAME, "The requested 
> translation is not available!" + selectedLanguage);
>                                throw new MissingResourceException("The 
> requested translation (" + selectedLanguage + ") hasn't been found!", 
> CLASS_NAME, selectedLanguage);
> -                       }
> +                       } else
> +                               currentClass = new L10n(lang);
> +
>                }
>        }
>
> @@ -133,10 +192,11 @@
>
>        private static void _saveTranslationFile() {
>                FileOutputStream fos = null;
> -               File finalFile = new File(L10n.PREFIX + 
> L10n.getSelectedLanguage() + L10n.OVERRIDE_SUFFIX);
> +               File finalFile = new 
> File(getSelectedLanguage().getL10nOverrideFilename());
>
>                try {
>                        // We don't set deleteOnExit on it : if the save 
> operation fails, we want a backup
> +                       // FIXME: REDFLAG: not symlink-race proof!
>                        File tempFile = new File(finalFile.getParentFile(), 
> finalFile.getName()+".bak");
>                        Logger.minor("L10n", "The temporary filename is : " + 
> tempFile);
>
> @@ -270,7 +330,7 @@
>
>        /**
>        * Allows things like :
> -       * L10n.getString("testing.test", new String[]{ "test1", "test2" }, 
> new String[] { "a", "b" })
> +       * L10n.getString("testing.test", new String[]{ "test1", "test2" }, 
> "a", "b" })
>        *
>        * @param key
>        * @param patterns : a list of patterns wich are matchable from the 
> translation
> @@ -311,7 +371,7 @@
>        *
>        * @return String
>        */
> -       public static String getSelectedLanguage() {
> +       public static LANGUAGE getSelectedLanguage() {
>                synchronized (sync) {
>                        if((currentClass == null) || 
> (currentClass.selectedLanguage == null))
>                                return FALLBACK_DEFAULT;
> @@ -326,26 +386,18 @@
>        * @param name
>        * @return the Properties object or null if not found
>        */
> -       public static SimpleFieldSet loadTranslation(String name) {
> -               String shortCountryCode = mapLanguageNameToShortCode(name);
> -               if(shortCountryCode == null) {
> -                       Logger.error("L10n", "Can't map "+name+" to a country 
> code!");
> -                       return null;
> -               } else
> -                       name = shortCountryCode;
> -               name = PREFIX.replace ('.', 
> '/').concat(PREFIX.concat(name.concat(SUFFIX)));
> -
> +       public static SimpleFieldSet loadTranslation(LANGUAGE lang) {
>                SimpleFieldSet result = null;
>                InputStream in = null;
>                try {
>                        ClassLoader loader = 
> ClassLoader.getSystemClassLoader();
>
>                        // Returns null on lookup failures:
> -                       in = loader.getResourceAsStream(name);
> +                       in = 
> loader.getResourceAsStream(lang.getL10nFilename());
>                        if(in != null)
>                                result = SimpleFieldSet.readFrom(in, false, 
> false);
>                } catch (Exception e) {
> -                       Logger.error("L10n", "Error while loading the l10n 
> file from " + name + " :" + e.getMessage(), e);
> +                       Logger.error("L10n", "Error while loading the l10n 
> file from " + lang.getL10nFilename() + " :" + e.getMessage(), e);
>                        result = null;
>                } finally {
>                        Closer.close(in);
> @@ -353,43 +405,7 @@
>
>                return result;
>        }
> -
> -       /**
> -        * Map a full string language name to the corresponding country short 
> code
> -        *
> -        * @param The name to look for
> -        * @return The two letters short code OR null if not found
> -        */
> -       public static String mapLanguageNameToShortCode(String name) {
> -               for(int i=0; i<AVAILABLE_LANGUAGES.length; i++) {
> -                       String currentShortCode = AVAILABLE_LANGUAGES[i][0];
> -                       String currentLongName = AVAILABLE_LANGUAGES[i][1];
> -                       String currentCountryCodeName = 
> AVAILABLE_LANGUAGES[i][2];
> -
> -                       if(currentShortCode.equalsIgnoreCase(name) || 
> currentLongName.equalsIgnoreCase(name) || 
> currentCountryCodeName.equalsIgnoreCase(name))
> -                               return currentShortCode;
> -               }
> -               return null;
> -       }
>
> -       /**
> -        * Map a language identifier to its corresponding long name
> -        *
> -        * @param The name to look for
> -        * @return The full text language name OR null if not found
> -        */
> -       public static String mapLanguageNameToLongName(String name) {
> -               for(int i=0; i<AVAILABLE_LANGUAGES.length; i++) {
> -                       String currentShortCode = AVAILABLE_LANGUAGES[i][0];
> -                       String currentLongName = AVAILABLE_LANGUAGES[i][1];
> -                       String currentCountryCodeName = 
> AVAILABLE_LANGUAGES[i][2];
> -
> -                       if(currentShortCode.equalsIgnoreCase(name) || 
> currentLongName.equalsIgnoreCase(name) || 
> currentCountryCodeName.equalsIgnoreCase(name))
> -                               return currentLongName;
> -               }
> -               return null;
> -       }
> -
>        public static boolean isOverridden(String key) {
>                synchronized(sync) {
>                        if(translationOverride == null) return false;
>
> Modified: trunk/freenet/src/freenet/node/Node.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/Node.java    2008-08-19 18:50:57 UTC (rev 
> 22031)
> +++ trunk/freenet/src/freenet/node/Node.java    2008-08-19 19:11:49 UTC (rev 
> 22032)
> @@ -207,11 +207,11 @@
>        private static class L10nCallback extends StringCallback implements 
> EnumerableOptionCallback {
>
>                public String get() {
> -                       return 
> L10n.mapLanguageNameToLongName(L10n.getSelectedLanguage());
> +                       return L10n.getSelectedLanguage().getFullName();
>                }
>
>                public void set(String val) throws InvalidConfigValueException 
> {
> -                       if(get().equalsIgnoreCase(val)) return;
> +                       if(val == null || get().equalsIgnoreCase(val)) return;
>                        try {
>                                L10n.setLanguage(val);
>                        } catch (MissingResourceException e) {
> @@ -224,10 +224,7 @@
>                }
>
>                public String[] getPossibleValues() {
> -                       String[] result = new 
> String[L10n.AVAILABLE_LANGUAGES.length];
> -                       for(int i=0; i<L10n.AVAILABLE_LANGUAGES.length; i++)
> -                               result[i] = L10n.AVAILABLE_LANGUAGES[i][1];
> -                       return result;
> +                       return L10n.LANGUAGE.valuesWithFullNames();
>                }
>        }
>
> @@ -656,7 +653,7 @@
>                        try {
>                                
> L10n.setLanguage(nodeConfig.getOption("l10n").getDefault());
>                        } catch (MissingResourceException e1) {
> -                               L10n.setLanguage(L10n.FALLBACK_DEFAULT);
> +                               
> L10n.setLanguage(L10n.LANGUAGE.ENGLISH.getShortCode());
>                        }
>                }
>
>
> Modified: trunk/freenet/src/freenet/node/fcp/NodeHelloMessage.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/fcp/NodeHelloMessage.java    2008-08-19 
> 18:50:57 UTC (rev 22031)
> +++ trunk/freenet/src/freenet/node/fcp/NodeHelloMessage.java    2008-08-19 
> 19:11:49 UTC (rev 22032)
> @@ -43,7 +43,7 @@
>                sfs.putSingle("Testnet", Boolean.toString(node == null ? false 
> : node.isTestnetEnabled()));
>                sfs.putSingle("CompressionCodecs", 
> Integer.toString(Compressor.countCompressAlgorithms()));
>                sfs.putSingle("ConnectionIdentifier", id);
> -               sfs.putSingle("NodeLanguage", L10n.getSelectedLanguage());
> +               sfs.putSingle("NodeLanguage", 
> L10n.getSelectedLanguage().toString());
>                return sfs;
>        }
>
>
> _______________________________________________
> cvs mailing list
> cvs at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs

Reply via email to