/** * Copyright 2006 Felix Berger * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.jhorstmann.i18n.mojo; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.StringTokenizer; // TODO this is a copy from the gettext-ant-tasks. Ideally, both projects // should use a common library class GettextUtils { private GettextUtils() { } public static String getJavaLocale(String locale) { if (locale == null) { throw new IllegalArgumentException(); } List<String> tokens = new ArrayList<String>(3); StringTokenizer t = new StringTokenizer(locale, "_"); while (t.hasMoreTokens()) { tokens.add(t.nextToken()); } if (tokens.size() < 1 || tokens.size() > 3) { throw new IllegalArgumentException("Invalid locale format: " + locale); } if (tokens.size() < 3) { // check for variant String lastToken = (String) tokens.get(tokens.size() - 1); int index = lastToken.indexOf("@"); if (index != -1) { tokens.remove(tokens.size() - 1); tokens.add(lastToken.substring(0, index)); if (tokens.size() == 1) { // no country code was provided, but a variant tokens.add(""); } tokens.add(lastToken.substring(index + 1)); } } // Locale.java replaces these codes, so we have to do it too String language = (String) tokens.get(0); if (language.equalsIgnoreCase("he")) { tokens.set(0, "iw"); } else if (language.equalsIgnoreCase("yi")) { tokens.set(0, "ji"); } else if (language.equalsIgnoreCase("id")) { tokens.set(0, "in"); } StringBuffer sb = new StringBuffer(); for (Iterator<String> it = tokens.iterator(); it.hasNext();) { String token = (String) it.next(); sb.append(token); if (it.hasNext()) { sb.append("_"); } } return sb.toString(); } }