From 110e44fbc389422aadffead0a340ab3c86514628 Mon Sep 17 00:00:00 2001 From: Dominic Battre Date: Tue, 21 Apr 2026 17:34:15 +0000 Subject: [PATCH] (AUTOMATIC) opensource update PiperOrigin-RevId: 903306857 --- LICENSE | 53 + .../i18n/addressinput/AddressWidget.java | 2 +- .../addressinput/AndroidAsyncRequestApi.java | 1 + .../i18n/addressinput/common/AddressData.java | 75 +- .../addressinput/common/AddressField.java | 13 +- .../common/FormatInterpreter.java | 76 +- .../common/RegionDataConstants.java | 291 --- .../addressinput/common/AddressFieldTest.java | 27 +- .../common/FormatInterpreterTest.java | 28 + .../i18n/addressinput/testing/countryinfo.txt | 5 +- cpp/src/region_data_constants.cc | 1563 ----------------- cpp/test/fake_storage_test.cc | 6 +- testdata/countryinfo.txt | 5 +- 13 files changed, 186 insertions(+), 1959 deletions(-) delete mode 100644 common/src/main/java/com/google/i18n/addressinput/common/RegionDataConstants.java delete mode 100644 cpp/src/region_data_constants.cc diff --git a/LICENSE b/LICENSE index d6456956..88280d52 100644 --- a/LICENSE +++ b/LICENSE @@ -200,3 +200,56 @@ 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. + +-------------------------------------------------------------------------------- + +Copyright (c) 2013 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------------------- + +Copyright (c) 2010-2011, Tim Day + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-------------------------------------------------------------------------------- + +This code implements the MD5 message-digest algorithm. +The algorithm is due to Ron Rivest. This code was +written by Colin Plumb in 1993, no copyright is claimed. +This code is in the public domain; do with it what you wish. diff --git a/android/src/main/java/com/android/i18n/addressinput/AddressWidget.java b/android/src/main/java/com/android/i18n/addressinput/AddressWidget.java index 1b9feadf..099f573f 100644 --- a/android/src/main/java/com/android/i18n/addressinput/AddressWidget.java +++ b/android/src/main/java/com/android/i18n/addressinput/AddressWidget.java @@ -257,7 +257,7 @@ public String getRegionDataKeyForValue(String value) { private WidthType getFieldWidthType(AddressUiComponent field) { // TODO(user): For drop-downs (spinners), derive the width-type from the list of values. - return field.getId().getWidthTypeForRegion(currentRegion); + return FormatInterpreter.getWidthTypeForRegion(field.getId(), currentRegion); } private void createView( diff --git a/android/src/main/java/com/android/i18n/addressinput/AndroidAsyncRequestApi.java b/android/src/main/java/com/android/i18n/addressinput/AndroidAsyncRequestApi.java index 2ece2356..56c87d02 100644 --- a/android/src/main/java/com/android/i18n/addressinput/AndroidAsyncRequestApi.java +++ b/android/src/main/java/com/android/i18n/addressinput/AndroidAsyncRequestApi.java @@ -48,6 +48,7 @@ private static class AsyncHttp extends Thread { private final int timeoutMillis; protected AsyncHttp(URL requestUrl, AsyncCallback callback, int timeoutMillis) { + super("AddressInputAsyncHttp"); this.requestUrl = requestUrl; this.callback = callback; this.timeoutMillis = timeoutMillis; diff --git a/common/src/main/java/com/google/i18n/addressinput/common/AddressData.java b/common/src/main/java/com/google/i18n/addressinput/common/AddressData.java index ea9fc3ce..79b3f566 100644 --- a/common/src/main/java/com/google/i18n/addressinput/common/AddressData.java +++ b/common/src/main/java/com/google/i18n/addressinput/common/AddressData.java @@ -594,24 +594,26 @@ public Builder(AddressData address) { } /** - * Sets the 2-letter CLDR region code of the address; see - * {@link AddressData#getPostalCountry()}. Unlike other values passed to the builder, the - * region code can never be null. + * Sets the 2-letter CLDR region code of the address; see {@link + * AddressData#getPostalCountry()}. Unlike other values passed to the builder, the region code + * can never be null. * * @param regionCode the CLDR region code of the address. */ // TODO: Rename to setRegionCode. + @CanIgnoreReturnValue public Builder setCountry(String regionCode) { return set(AddressField.COUNTRY, checkNotNull(regionCode)); } /** - * Sets or clears the administrative area of the address; see - * {@link AddressData#getAdministrativeArea()}. + * Sets or clears the administrative area of the address; see {@link + * AddressData#getAdministrativeArea()}. * * @param adminAreaName the administrative area name, or null to clear an existing value. */ // TODO: Rename to setAdministrativeArea. + @CanIgnoreReturnValue public Builder setAdminArea(String adminAreaName) { return set(AddressField.ADMIN_AREA, adminAreaName); } @@ -621,16 +623,18 @@ public Builder setAdminArea(String adminAreaName) { * * @param locality the locality name, or null to clear an existing value. */ + @CanIgnoreReturnValue public Builder setLocality(String locality) { return set(AddressField.LOCALITY, locality); } /** - * Sets or clears the dependent locality of the address; see - * {@link AddressData#getDependentLocality()}. + * Sets or clears the dependent locality of the address; see {@link + * AddressData#getDependentLocality()}. * * @param dependentLocality the dependent locality name, or null to clear an existing value. */ + @CanIgnoreReturnValue public Builder setDependentLocality(String dependentLocality) { return set(AddressField.DEPENDENT_LOCALITY, dependentLocality); } @@ -640,6 +644,7 @@ public Builder setDependentLocality(String dependentLocality) { * * @param postalCode the postal code, or null to clear an existing value. */ + @CanIgnoreReturnValue public Builder setPostalCode(String postalCode) { return set(AddressField.POSTAL_CODE, postalCode); } @@ -649,6 +654,7 @@ public Builder setPostalCode(String postalCode) { * * @param sortingCode the sorting code, or null to clear an existing value. */ + @CanIgnoreReturnValue public Builder setSortingCode(String sortingCode) { return set(AddressField.SORTING_CODE, sortingCode); } @@ -661,28 +667,31 @@ public Builder setSortingCode(String sortingCode) { * * @param languageCode the BCP-47 language code, or null to clear an existing value. */ + @CanIgnoreReturnValue public Builder setLanguageCode(String languageCode) { this.language = languageCode; return this; } /** - * Sets multiple unstructured street level lines in the address. Calling this method will - * always discard any existing address lines before adding new ones. - *

- * Note that the number of lines set by this method is preserved in the builder's state but a + * Sets multiple unstructured street level lines in the address. Calling this method will always + * discard any existing address lines before adding new ones. + * + *

Note that the number of lines set by this method is preserved in the builder's state but a * single line set here may result in multiple lines in the resulting {@code AddressData} * instance if it contains embedded newline characters. - *

- * For example: + * + *

For example: + * *

{@code
-     *   data = AddressData.builder()
-     *       .setAddressLines(Arrays.asList("First line\nSecond line"))
-     *       .setAddressLine2("Last line");
-     *       .build();
-     *   // data.getAddressLines() == [ "First line", "Second line", "Last line" ]
+     * data = AddressData.builder()
+     *     .setAddressLines(Arrays.asList("First line\nSecond line"))
+     *     .setAddressLine2("Last line");
+     *     .build();
+     * // data.getAddressLines() == [ "First line", "Second line", "Last line" ]
      * }
*/ + @CanIgnoreReturnValue public Builder setAddressLines(Iterable lines) { addressLines.clear(); for (String line : lines) { @@ -691,10 +700,9 @@ public Builder setAddressLines(Iterable lines) { return this; } - /** - * Adds another address line. Embedded newlines will be normalized when "build()" is called. - */ + /** Adds another address line. Embedded newlines will be normalized when "build()" is called. */ // TODO: Consider removing this method if nobody is using it to simplify the API. + @CanIgnoreReturnValue public Builder addAddressLine(String value) { addressLines.add(value); return this; @@ -702,18 +710,20 @@ public Builder addAddressLine(String value) { /** * Sets multiple street lines from a single street string, clearing any existing address lines - * first. The input string may contain new lines which will result in multiple separate lines - * in the resulting {@code AddressData} instance. After splitting, each line is trimmed and - * empty lines are ignored. - *

- * Example: {@code " \n \n1600 Amphitheatre Ave\n\nRoom 122"} will set the lines: + * first. The input string may contain new lines which will result in multiple separate lines in + * the resulting {@code AddressData} instance. After splitting, each line is trimmed and empty + * lines are ignored. + * + *

Example: {@code " \n \n1600 Amphitheatre Ave\n\nRoom 122"} will set the lines: + * *

    - *
  1. "1600 Amphitheatre Ave" - *
  2. "Room 122" + *
  3. "1600 Amphitheatre Ave" + *
  4. "Room 122" *
* * @param value a string containing one or more address lines, separated by {@code "\n"}. */ + @CanIgnoreReturnValue public Builder setAddress(String value) { addressLines.clear(); addressLines.add(value); @@ -725,6 +735,7 @@ public Builder setAddress(String value) { * Copies all the data of the given address into the builder. Any existing data in the builder * is discarded. */ + @CanIgnoreReturnValue public Builder set(AddressData data) { fields.clear(); for (AddressField addressField : SINGLE_VALUE_FIELDS) { @@ -742,6 +753,7 @@ public Builder set(AddressData data) { * @deprecated Use {@link #setAddressLines} instead. */ @Deprecated + @CanIgnoreReturnValue public Builder setAddressLine1(String value) { return setAddressLine(1, value); } @@ -752,6 +764,7 @@ public Builder setAddressLine1(String value) { * @deprecated Use {@link #setAddressLines} instead. */ @Deprecated + @CanIgnoreReturnValue public Builder setAddressLine2(String value) { return setAddressLine(2, value); } @@ -761,6 +774,7 @@ public Builder setAddressLine2(String value) { * * @param organization the organization, or null to clear an existing value. */ + @CanIgnoreReturnValue public Builder setOrganization(String organization) { return set(AddressField.ORGANIZATION, organization); } @@ -770,6 +784,7 @@ public Builder setOrganization(String organization) { * * @param recipient the recipient, or null to clear an existing value. */ + @CanIgnoreReturnValue public Builder setRecipient(String recipient) { return set(AddressField.RECIPIENT, recipient); } @@ -792,6 +807,7 @@ public Builder setLandmarkAddressDescriptor(String landmarkAddressDescriptor) { * * @param landmarkAffix the landmark affix, or null to clear an existing value. */ + @CanIgnoreReturnValue public Builder setLandmarkAffix(String landmarkAffix) { return set(AddressField.LANDMARK_AFFIX, landmarkAffix); } @@ -801,6 +817,7 @@ public Builder setLandmarkAffix(String landmarkAffix) { * * @param landmarkName the landmark name, or null to clear an existing value. */ + @CanIgnoreReturnValue public Builder setLandmarkName(String landmarkName) { return set(AddressField.LANDMARK_NAME, landmarkName); } @@ -813,6 +830,7 @@ public Builder setLandmarkName(String landmarkName) { */ @Deprecated @SuppressWarnings("deprecation") + @CanIgnoreReturnValue // TODO: Reimplement using public API as a utility function in AddressWidget (the only caller). public Builder set(AddressField field, String value) { if (SINGLE_VALUE_FIELDS.contains(field)) { @@ -839,6 +857,7 @@ public Builder set(AddressField field, String value) { // This may preserve whitespace at the ends of lines, but this gets normalized when we build // the data instance. + @CanIgnoreReturnValue private Builder setAddressLine(int lineNum, String value) { if (Util.trimToNull(value) == null) { if (lineNum < addressLines.size()) { diff --git a/common/src/main/java/com/google/i18n/addressinput/common/AddressField.java b/common/src/main/java/com/google/i18n/addressinput/common/AddressField.java index fa48e01f..280a8b42 100644 --- a/common/src/main/java/com/google/i18n/addressinput/common/AddressField.java +++ b/common/src/main/java/com/google/i18n/addressinput/common/AddressField.java @@ -150,18 +150,7 @@ char getChar() { * field, in the UI. */ // TODO: We'd probably be better off just having a widthType field in the enum. - private WidthType getDefaultWidthType() { + WidthType getDefaultWidthType() { return this.equals(POSTAL_CODE) || this.equals(SORTING_CODE) ? WidthType.SHORT : WidthType.LONG; } - - /** - * Returns default width of this address field. Takes per-country heuristics into account for - * text input fields. This may be overridden for a specific country when we have data for the - * possible inputs in that field and use a drop-down, rather than a text field, in the UI. - */ - public WidthType getWidthTypeForRegion(String regionCode) { - Util.checkNotNull(regionCode); - WidthType width = FormatInterpreter.getWidthOverride(this, regionCode); - return width != null ? width : getDefaultWidthType(); - } } diff --git a/common/src/main/java/com/google/i18n/addressinput/common/FormatInterpreter.java b/common/src/main/java/com/google/i18n/addressinput/common/FormatInterpreter.java index c4d84f4c..b709ad66 100644 --- a/common/src/main/java/com/google/i18n/addressinput/common/FormatInterpreter.java +++ b/common/src/main/java/com/google/i18n/addressinput/common/FormatInterpreter.java @@ -29,24 +29,20 @@ import org.json.JSONTokener; import org.jspecify.annotations.Nullable; -/** - * Address format interpreter. A utility to find address format related info. - */ +/** Address format interpreter. A utility to find address format related info. */ public final class FormatInterpreter { private static final String NEW_LINE = "%n"; private final FormOptions.Snapshot formOptions; - /** - * Creates a new instance of {@link FormatInterpreter}. - */ + /** Creates a new instance of {@link FormatInterpreter}. */ public FormatInterpreter(FormOptions.Snapshot options) { Util.checkNotNull( RegionDataConstants.getCountryFormatMap(), "null country name map not allowed"); Util.checkNotNull(options); this.formOptions = options; - Util.checkNotNull(getJsonValue("ZZ", AddressDataKey.FMT), - "Could not obtain a default address field order."); + Util.checkNotNull( + getJsonValue("ZZ", AddressDataKey.FMT), "Could not obtain a default address field order."); } /** @@ -56,7 +52,7 @@ public FormatInterpreter(FormOptions.Snapshot options) { * @param scriptType if {@link ScriptType#LOCAL}, use local format; else use Latin format. */ // TODO: Consider not re-doing this work every time the widget is re-rendered. - @SuppressWarnings("deprecation") // For legacy address fields. + @SuppressWarnings("deprecation") // For legacy address fields. public List getAddressFieldOrder(ScriptType scriptType, String regionCode) { Util.checkNotNull(scriptType); Util.checkNotNull(regionCode); @@ -109,9 +105,7 @@ private static AddressField getFieldForFormatSubstring(String formatSubstring) { return AddressField.of(formatSubstring.charAt(1)); } - /** - * Returns true if the address has any data for this address field. - */ + /** Returns true if the address has any data for this address field. */ private static boolean addressHasValueForField(AddressData address, AddressField field) { if (field == AddressField.STREET_ADDRESS) { return address.getAddressLines().size() > 0; @@ -150,8 +144,8 @@ private void applyFieldOrderOverrides(String regionCode, List fiel /** * Returns the fields that are required to be filled in for this country. This is based upon the - * "required" field in RegionDataConstants for {@code regionCode}, and handles falling back to - * the default data if necessary. + * "required" field in RegionDataConstants for {@code regionCode}, and handles falling back to the + * default data if necessary. */ static Set getRequiredFields(String regionCode) { Util.checkNotNull(regionCode); @@ -199,7 +193,7 @@ static WidthType getWidthOverride(AddressField field, String regionCode) { // The field width overrides string starts with a %, so we skip the first one. // Example string: "%C:L%S:S" which is a repeated string of // '<%> field_character <:> width_character'. - for (int pos = 0; pos != -1;) { + for (int pos = 0; pos != -1; ) { int keyStartIndex = pos + 1; int valueStartIndex = overridesString.indexOf(':', keyStartIndex + 1) + 1; if (valueStartIndex == 0 || valueStartIndex == overridesString.length()) { @@ -208,8 +202,8 @@ static WidthType getWidthOverride(AddressField field, String regionCode) { } // Prepare for next iteration. pos = overridesString.indexOf('%', valueStartIndex + 1); - if (valueStartIndex != keyStartIndex + 2 || - overridesString.charAt(keyStartIndex) != field.getChar()) { + if (valueStartIndex != keyStartIndex + 2 + || overridesString.charAt(keyStartIndex) != field.getChar()) { // Key is not a high level field (unhandled by this code) or does not match. // Also catches malformed string where key is of zero length (skip, not error). continue; @@ -228,13 +222,9 @@ static WidthType getWidthOverride(AddressField field, String regionCode) { /** * Gets formatted address. For example, * - *

John Doe
- * Dnar Corp
- * 5th St
- * Santa Monica CA 90123

- * - * This method does not validate addresses. Also, it will "normalize" the result strings by - * removing redundant spaces and empty lines. + *

John Doe
Dnar Corp
5th St
Santa Monica CA 90123 This method does not validate + * addresses. Also, it will "normalize" the result strings by removing redundant spaces and empty + * lines. */ public List getEnvelopeAddress(AddressData address) { Util.checkNotNull(address, "null input address not allowed"); @@ -260,13 +250,15 @@ public List getEnvelopeAddress(AddressData address) { prunedFormat.add(formatSubstring); } } else if ( - // Only keep literals that satisfy these 2 conditions: - // (1) Not preceding an empty field. - (i == formatSubstrings.size() - 1 || formatSubstrings.get(i + 1).equals(NEW_LINE) - || addressHasValueForField(address, getFieldForFormatSubstring( - formatSubstrings.get(i + 1)))) + // Only keep literals that satisfy these 2 conditions: + // (1) Not preceding an empty field. + (i == formatSubstrings.size() - 1 + || formatSubstrings.get(i + 1).equals(NEW_LINE) + || addressHasValueForField( + address, getFieldForFormatSubstring(formatSubstrings.get(i + 1)))) // (2) Not following a removed field. - && (i == 0 || !formatSubstringRepresentsField(formatSubstrings.get(i - 1)) + && (i == 0 + || !formatSubstringRepresentsField(formatSubstrings.get(i - 1)) || (!prunedFormat.isEmpty() && formatSubstringRepresentsField(prunedFormat.get(prunedFormat.size() - 1))))) { prunedFormat.add(formatSubstring); @@ -334,11 +326,22 @@ && formatSubstringRepresentsField(prunedFormat.get(prunedFormat.size() - 1))))) return lines; } + /** + * Returns default width of this address field. Takes per-country heuristics into account for text + * input fields. This may be overridden for a specific country when we have data for the possible + * inputs in that field and use a drop-down, rather than a text field, in the UI. + */ + public static WidthType getWidthTypeForRegion(AddressField field, String regionCode) { + Util.checkNotNull(regionCode); + WidthType width = getWidthOverride(field, regionCode); + return width != null ? width : field.getDefaultWidthType(); + } + /** * Tokenizes the format string and returns the token string list. "%" is treated as an escape - * character. For example, "%n%a%nxyz" will be split into "%n", "%a", "%n", "xyz". - * Escaped tokens correspond to either new line or address fields. The output of this method - * may contain duplicates. + * character. For example, "%n%a%nxyz" will be split into "%n", "%a", "%n", "xyz". Escaped tokens + * correspond to either new line or address fields. The output of this method may contain + * duplicates. */ // TODO: Create a common method which does field parsing in one place (there are about 4 other // places in this library where format strings are parsed). @@ -368,9 +371,10 @@ private List getFormatSubstrings(String formatString) { } private static String getFormatString(ScriptType scriptType, String regionCode) { - String format = (scriptType == ScriptType.LOCAL) - ? getJsonValue(regionCode, AddressDataKey.FMT) - : getJsonValue(regionCode, AddressDataKey.LFMT); + String format = + (scriptType == ScriptType.LOCAL) + ? getJsonValue(regionCode, AddressDataKey.FMT) + : getJsonValue(regionCode, AddressDataKey.LFMT); if (format == null) { format = getJsonValue("ZZ", AddressDataKey.FMT); } diff --git a/common/src/main/java/com/google/i18n/addressinput/common/RegionDataConstants.java b/common/src/main/java/com/google/i18n/addressinput/common/RegionDataConstants.java deleted file mode 100644 index 8d689153..00000000 --- a/common/src/main/java/com/google/i18n/addressinput/common/RegionDataConstants.java +++ /dev/null @@ -1,291 +0,0 @@ -// Copyright (C) 2010 Google Inc. -// -// 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 com.google.i18n.addressinput.common; - -import java.util.Collections; -import java.util.Map; -import java.util.TreeMap; - -/** - * Initial data in JSON format for regions. This has some formatting information for some countries, - * and a list of all the regions that the widget can support. - * - *

AUTOMATICALLY GENERATED FILE - DO NOT EDIT
- */ -public final class RegionDataConstants { - private static final Map addressDataMap = createMap(); - - public static Map getCountryFormatMap() { - return addressDataMap; - } - - private static Map createMap() { - TreeMap map = new TreeMap(); - map.put("AC", "{\"name\":\"ASCENSION ISLAND\",\"fmt\":\"%N%n%O%n%A%n%C%n%Z\"}"); - map.put("AD", "{\"name\":\"ANDORRA\",\"lang\":\"ca\",\"languages\":\"ca\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("AE", "{\"name\":\"UNITED ARAB EMIRATES\",\"lang\":\"ar\",\"languages\":\"ar\",\"lfmt\":\"%N%n%O%n%A%n%S\",\"fmt\":\"%N%n%O%n%A%n%S\",\"require\":\"AS\",\"state_name_type\":\"emirate\"}"); - map.put("AF", "{\"name\":\"AFGHANISTAN\",\"fmt\":\"%N%n%O%n%A%n%C%n%Z\"}"); - map.put("AG", "{\"name\":\"ANTIGUA AND BARBUDA\",\"require\":\"A\"}"); - map.put("AI", "{\"name\":\"ANGUILLA\",\"fmt\":\"%N%n%O%n%A%n%C%n%Z\"}"); - map.put("AL", "{\"name\":\"ALBANIA\",\"fmt\":\"%N%n%O%n%A%n%Z%n%C\"}"); - map.put("AM", "{\"name\":\"ARMENIA\",\"lang\":\"hy\",\"languages\":\"hy\",\"lfmt\":\"%N%n%O%n%A%n%Z%n%C%n%S\",\"fmt\":\"%N%n%O%n%A%n%Z%n%C%n%S\"}"); - map.put("AO", "{\"name\":\"ANGOLA\"}"); - map.put("AQ", "{\"name\":\"ANTARCTICA\"}"); - map.put("AR", "{\"name\":\"ARGENTINA\",\"lang\":\"es\",\"languages\":\"es\",\"fmt\":\"%N%n%O%n%A%n%Z %C%n%S\",\"upper\":\"ACZ\"}"); - map.put("AS", "{\"name\":\"AMERICAN SAMOA\",\"fmt\":\"%N%n%O%n%A%n%C %S %Z\",\"require\":\"ACSZ\",\"upper\":\"ACNOS\",\"state_name_type\":\"state\",\"zip_name_type\":\"zip\"}"); - map.put("AT", "{\"name\":\"AUSTRIA\",\"fmt\":\"%O%n%N%n%A%n%Z %C\",\"require\":\"ACZ\"}"); - map.put("AU", "{\"name\":\"AUSTRALIA\",\"lang\":\"en\",\"languages\":\"en\",\"fmt\":\"%O%n%N%n%A%n%C %S %Z\",\"require\":\"ACSZ\",\"upper\":\"CS\",\"locality_name_type\":\"suburb\",\"state_name_type\":\"state\"}"); - map.put("AW", "{\"name\":\"ARUBA\"}"); - map.put("AX", "{\"name\":\"FINLAND\",\"fmt\":\"%O%n%N%n%A%nAX-%Z %C%nÅLAND\",\"require\":\"ACZ\",\"postprefix\":\"AX-\"}"); - map.put("AZ", "{\"name\":\"AZERBAIJAN\",\"fmt\":\"%N%n%O%n%A%nAZ %Z %C\",\"postprefix\":\"AZ \"}"); - map.put("BA", "{\"name\":\"BOSNIA AND HERZEGOVINA\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("BB", "{\"name\":\"BARBADOS\",\"lang\":\"en\",\"languages\":\"en\",\"fmt\":\"%N%n%O%n%A%n%C, %S %Z\",\"state_name_type\":\"parish\"}"); - map.put("BD", "{\"name\":\"BANGLADESH\",\"fmt\":\"%N%n%O%n%A%n%C - %Z\"}"); - map.put("BE", "{\"name\":\"BELGIUM\",\"fmt\":\"%O%n%N%n%A%n%Z %C\",\"require\":\"ACZ\"}"); - map.put("BF", "{\"name\":\"BURKINA FASO\",\"fmt\":\"%N%n%O%n%A%n%C %X\"}"); - map.put("BG", "{\"name\":\"BULGARIA (REP.)\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("BH", "{\"name\":\"BAHRAIN\",\"fmt\":\"%N%n%O%n%A%n%C %Z\"}"); - map.put("BI", "{\"name\":\"BURUNDI\"}"); - map.put("BJ", "{\"name\":\"BENIN\",\"upper\":\"AC\"}"); - map.put("BL", "{\"name\":\"SAINT BARTHELEMY\",\"fmt\":\"%O%n%N%n%A%n%Z %C %X\",\"require\":\"ACZ\",\"upper\":\"ACX\"}"); - map.put("BM", "{\"name\":\"BERMUDA\",\"fmt\":\"%N%n%O%n%A%n%C %Z\"}"); - map.put("BN", "{\"name\":\"BRUNEI DARUSSALAM\",\"fmt\":\"%N%n%O%n%A%n%C %Z\"}"); - map.put("BO", "{\"name\":\"BOLIVIA\",\"upper\":\"AC\"}"); - map.put("BQ", "{\"name\":\"BONAIRE, SINT EUSTATIUS, AND SABA\"}"); - map.put("BR", "{\"name\":\"BRAZIL\",\"lang\":\"pt\",\"languages\":\"pt\",\"fmt\":\"%O%n%N%n%A%n%D%n%C-%S%n%Z\",\"require\":\"ASCZ\",\"upper\":\"CS\",\"sublocality_name_type\":\"neighborhood\",\"state_name_type\":\"state\",\"width_overrides\":\"%C:L%S:S\",\"label_overrides\":[{\"field\":\"S2\",\"label\":\"Setor/ADE/Folha\"},{\"field\":\"S3\",\"label\":\"Quadra\"},{\"field\":\"S4\",\"label\":\"Trecho/AE/Modulo\"},{\"field\":\"S5\",\"label\":\"Cj/Bl/MI/Projeção/Etapa\"},{\"field\":\"LP\",\"label\":\"Lote\"},{\"field\":\"BI\",\"label\":\"Casa/Comercio\"},{\"field\":\"CG\",\"label\":\"Complexo/Chácara\"}]}"); - map.put("BS", "{\"name\":\"BAHAMAS\",\"lang\":\"en\",\"languages\":\"en\",\"fmt\":\"%N%n%O%n%A%n%C, %S\",\"state_name_type\":\"island\"}"); - map.put("BT", "{\"name\":\"BHUTAN\",\"fmt\":\"%N%n%O%n%A%n%C %Z\"}"); - map.put("BV", "{\"name\":\"BOUVET ISLAND\"}"); - map.put("BW", "{\"name\":\"BOTSWANA\"}"); - map.put("BY", "{\"name\":\"BELARUS\",\"lang\":\"be\",\"languages\":\"be~ru\",\"fmt\":\"%O%n%N%n%A%n%Z, %C%n%S\"}"); - map.put("BZ", "{\"name\":\"BELIZE\"}"); - map.put("CA", "{\"name\":\"CANADA\",\"lang\":\"en\",\"languages\":\"en~fr\",\"fmt\":\"%N%n%O%n%A%n%C %S %Z\",\"require\":\"ACSZ\",\"upper\":\"ACNOSZ\"}"); - map.put("CC", "{\"name\":\"COCOS (KEELING) ISLANDS\",\"fmt\":\"%O%n%N%n%A%n%C %S %Z\",\"upper\":\"CS\"}"); - map.put("CD", "{\"name\":\"CONGO (DEM. REP.)\"}"); - map.put("CF", "{\"name\":\"CENTRAL AFRICAN REPUBLIC\"}"); - map.put("CG", "{\"name\":\"CONGO (REP.)\"}"); - map.put("CH", "{\"name\":\"SWITZERLAND\",\"fmt\":\"%O%n%N%n%A%nCH-%Z %C\",\"require\":\"ACZ\",\"upper\":\"\",\"postprefix\":\"CH-\"}"); - map.put("CI", "{\"name\":\"COTE D'IVOIRE\",\"fmt\":\"%N%n%O%n%X %A %C %X\"}"); - map.put("CK", "{\"name\":\"COOK ISLANDS\"}"); - map.put("CL", "{\"name\":\"CHILE\",\"lang\":\"es\",\"languages\":\"es\",\"fmt\":\"%N%n%O%n%A%n%Z %C%n%S\"}"); - map.put("CM", "{\"name\":\"CAMEROON\"}"); - map.put("CN", "{\"name\":\"CHINA\",\"lang\":\"zh\",\"languages\":\"zh\",\"lfmt\":\"%N%n%O%n%A%n%D%n%C%n%S, %Z\",\"fmt\":\"%Z%n%S%C%D%n%A%n%O%n%N\",\"require\":\"ACSZ\",\"upper\":\"S\",\"sublocality_name_type\":\"district\",\"width_overrides\":\"%S:S%C:S%D:S\",\"label_overrides\":[{\"field\":\"C\",\"label\":\"市/自治州/地区/盟\",\"lang\":\"zh\"},{\"field\":\"S\",\"label\":\"省/自治区/直辖市\",\"lang\":\"zh\"},{\"field\":\"D\",\"label\":\"区/县/旗\",\"lang\":\"zh\"}]}"); - map.put("CO", "{\"name\":\"COLOMBIA\",\"lang\":\"es\",\"languages\":\"es\",\"fmt\":\"%N%n%O%n%A%n%D%n%C, %S, %Z\",\"require\":\"AS\",\"state_name_type\":\"department\",\"label_overrides\":[{\"field\":\"LL\",\"label\":\"Vereda\"},{\"field\":\"A3\",\"label\":\"Corregimiento\"},{\"field\":\"A2\",\"label\":\"Municipio\"}]}"); - map.put("CR", "{\"name\":\"COSTA RICA\",\"lang\":\"es\",\"languages\":\"es\",\"fmt\":\"%N%n%O%n%A%n%S, %C%n%Z\",\"require\":\"ACS\"}"); - map.put("CU", "{\"name\":\"CUBA\",\"lang\":\"es\",\"languages\":\"es\",\"fmt\":\"%N%n%O%n%A%n%C %S%n%Z\"}"); - map.put("CV", "{\"name\":\"CAPE VERDE\",\"lang\":\"pt\",\"languages\":\"pt\",\"fmt\":\"%N%n%O%n%A%n%Z %C%n%S\",\"state_name_type\":\"island\"}"); - map.put("CW", "{\"name\":\"CURACAO\"}"); - map.put("CX", "{\"name\":\"CHRISTMAS ISLAND\",\"fmt\":\"%O%n%N%n%A%n%C %S %Z\",\"upper\":\"CS\"}"); - map.put("CY", "{\"name\":\"CYPRUS\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("CZ", "{\"name\":\"CZECH REP.\",\"fmt\":\"%N%n%O%n%A%n%Z %C\",\"require\":\"ACZ\",\"label_overrides\":[{\"field\":\"NH\",\"label\":\"Obecní část\",\"lang\":\"cs\"},{\"field\":\"NH\",\"label\":\"Obecný časť\",\"lang\":\"sk\"},{\"field\":\"BI\",\"label\":\"Descriptive No.\"},{\"field\":\"BI\",\"label\":\"Popisné číslo\",\"lang\":\"cs\"},{\"field\":\"BI\",\"label\":\"Súpisné číslo\",\"lang\":\"sk\"},{\"field\":\"SN\",\"label\":\"Orientation No.\"},{\"field\":\"SN\",\"label\":\"Orientační číslo\",\"lang\":\"cs\"},{\"field\":\"SN\",\"label\":\"Orientačné číslo\",\"lang\":\"sk\"},{\"field\":\"S1\",\"label\":\"City District\"},{\"field\":\"S1\",\"label\":\"Městská část\",\"lang\":\"cs\"},{\"field\":\"S1\",\"label\":\"Mestská časť\",\"lang\":\"sk\"}]}"); - map.put("DE", "{\"name\":\"GERMANY\",\"fmt\":\"%N%n%O%n%A%n%Z %C\",\"require\":\"ACZ\"}"); - map.put("DJ", "{\"name\":\"DJIBOUTI\"}"); - map.put("DK", "{\"name\":\"DENMARK\",\"fmt\":\"%N%n%O%n%A%n%Z %C\",\"require\":\"ACZ\"}"); - map.put("DM", "{\"name\":\"DOMINICA\"}"); - map.put("DO", "{\"name\":\"DOMINICAN REP.\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("DZ", "{\"name\":\"ALGERIA\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("EC", "{\"name\":\"ECUADOR\",\"fmt\":\"%N%n%O%n%A%n%Z%n%C\",\"upper\":\"CZ\"}"); - map.put("EE", "{\"name\":\"ESTONIA\",\"lang\":\"et\",\"languages\":\"et\",\"fmt\":\"%N%n%O%n%A%n%Z %C %S\",\"require\":\"ACZ\",\"label_overrides\":[{\"field\":\"C\",\"label\":\"Linn/vald\",\"lang\":\"et\"},{\"field\":\"C\",\"label\":\"City/Parish\",\"lang\":\"en\"},{\"field\":\"S\",\"label\":\"Maakond\",\"lang\":\"et\"},{\"field\":\"S\",\"label\":\"Region\",\"lang\":\"en\"}]}"); - map.put("EG", "{\"name\":\"EGYPT\",\"lang\":\"ar\",\"languages\":\"ar\",\"lfmt\":\"%N%n%O%n%A%n%C%n%S%n%Z\",\"fmt\":\"%N%n%O%n%A%n%C%n%S%n%Z\"}"); - map.put("EH", "{\"name\":\"WESTERN SAHARA\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("ER", "{\"name\":\"ERITREA\"}"); - map.put("ES", "{\"name\":\"SPAIN\",\"lang\":\"es\",\"languages\":\"es~ca~gl~eu\",\"fmt\":\"%N%n%O%n%A%n%Z %C %S\",\"require\":\"ACSZ\",\"upper\":\"CS\",\"width_overrides\":\"%S:S\"}"); - map.put("ET", "{\"name\":\"ETHIOPIA\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("FI", "{\"name\":\"FINLAND\",\"fmt\":\"%O%n%N%n%A%nFI-%Z %C\",\"require\":\"ACZ\",\"postprefix\":\"FI-\"}"); - map.put("FJ", "{\"name\":\"FIJI\"}"); - map.put("FK", "{\"name\":\"FALKLAND ISLANDS (MALVINAS)\",\"fmt\":\"%N%n%O%n%A%n%C%n%Z\",\"require\":\"ACZ\",\"upper\":\"CZ\"}"); - map.put("FM", "{\"name\":\"MICRONESIA (Federated State of)\",\"lang\":\"en\",\"languages\":\"en\",\"fmt\":\"%N%n%O%n%A%n%C %S %Z\",\"require\":\"ACSZ\",\"upper\":\"ACNOS\",\"state_name_type\":\"state\",\"zip_name_type\":\"zip\"}"); - map.put("FO", "{\"name\":\"FAROE ISLANDS\",\"fmt\":\"%N%n%O%n%A%nFO%Z %C\",\"postprefix\":\"FO\"}"); - map.put("FR", "{\"name\":\"FRANCE\",\"fmt\":\"%O%n%N%n%A%n%Z %C\",\"require\":\"ACZ\",\"upper\":\"CX\"}"); - map.put("GA", "{\"name\":\"GABON\"}"); - map.put("GB", "{\"name\":\"UNITED KINGDOM\",\"fmt\":\"%N%n%O%n%A%n%C%n%Z\",\"require\":\"ACZ\",\"upper\":\"CZ\",\"locality_name_type\":\"post_town\",\"label_overrides\":[{\"field\":\"LL\",\"message\":\"MSG_DEPENDENT_LOCALITY_LABEL\"},{\"field\":\"Z\",\"label\":\"Postcode\",\"lang\":\"en\"}]}"); - map.put("GD", "{\"name\":\"GRENADA (WEST INDIES)\"}"); - map.put("GE", "{\"name\":\"GEORGIA\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("GF", "{\"name\":\"FRENCH GUIANA\",\"fmt\":\"%O%n%N%n%A%n%Z %C %X\",\"require\":\"ACZ\",\"upper\":\"ACX\"}"); - map.put("GG", "{\"name\":\"CHANNEL ISLANDS\",\"fmt\":\"%N%n%O%n%A%n%C%nGUERNSEY%n%Z\",\"require\":\"ACZ\",\"upper\":\"CZ\"}"); - map.put("GH", "{\"name\":\"GHANA\"}"); - map.put("GI", "{\"name\":\"GIBRALTAR\",\"fmt\":\"%N%n%O%n%A%nGIBRALTAR%n%Z\",\"require\":\"A\"}"); - map.put("GL", "{\"name\":\"GREENLAND\",\"fmt\":\"%N%n%O%n%A%n%Z %C\",\"require\":\"ACZ\"}"); - map.put("GM", "{\"name\":\"GAMBIA\"}"); - map.put("GN", "{\"name\":\"GUINEA\",\"fmt\":\"%N%n%O%n%Z %A %C\"}"); - map.put("GP", "{\"name\":\"GUADELOUPE\",\"fmt\":\"%O%n%N%n%A%n%Z %C %X\",\"require\":\"ACZ\",\"upper\":\"ACX\"}"); - map.put("GQ", "{\"name\":\"EQUATORIAL GUINEA\"}"); - map.put("GR", "{\"name\":\"GREECE\",\"fmt\":\"%N%n%O%n%A%n%Z %C\",\"require\":\"ACZ\"}"); - map.put("GS", "{\"name\":\"SOUTH GEORGIA\",\"fmt\":\"%N%n%O%n%A%n%n%C%n%Z\",\"require\":\"ACZ\",\"upper\":\"CZ\"}"); - map.put("GT", "{\"name\":\"GUATEMALA\",\"fmt\":\"%N%n%O%n%A%n%Z- %C\"}"); - map.put("GU", "{\"name\":\"GUAM\",\"fmt\":\"%N%n%O%n%A%n%C %Z\",\"require\":\"ACZ\",\"upper\":\"ACNO\",\"zip_name_type\":\"zip\"}"); - map.put("GW", "{\"name\":\"GUINEA-BISSAU\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("GY", "{\"name\":\"GUYANA\"}"); - map.put("HK", "{\"name\":\"HONG KONG\",\"lang\":\"zh-Hant\",\"languages\":\"zh-Hant~en\",\"lfmt\":\"%N%n%O%n%A%n%C%n%S\",\"fmt\":\"%S%n%C%n%A%n%O%n%N\",\"require\":\"AS\",\"upper\":\"S\",\"locality_name_type\":\"district\",\"state_name_type\":\"area\",\"width_overrides\":\"%S:S%C:L\",\"label_overrides\":[{\"field\":\"C\",\"label\":\"地区\",\"lang\":\"zh\"},{\"field\":\"C\",\"label\":\"地區\",\"lang\":\"zh-HK\"},{\"field\":\"C\",\"label\":\"地區\",\"lang\":\"zh-TW\"},{\"field\":\"CS\",\"label\":\"Flat / Room\",\"lang\":\"en\"},{\"field\":\"CS\",\"label\":\"單位編號\",\"lang\":\"zh-HK\"},{\"field\":\"BG\",\"label\":\"大廈名稱\",\"lang\":\"zh-HK\"}]}"); - map.put("HM", "{\"name\":\"HEARD AND MCDONALD ISLANDS\",\"fmt\":\"%O%n%N%n%A%n%C %S %Z\",\"upper\":\"CS\"}"); - map.put("HN", "{\"name\":\"HONDURAS\",\"lang\":\"es\",\"languages\":\"es\",\"fmt\":\"%N%n%O%n%A%n%C, %S%n%Z\",\"require\":\"ACS\",\"state_name_type\":\"department\"}"); - map.put("HR", "{\"name\":\"CROATIA\",\"fmt\":\"%N%n%O%n%A%nHR-%Z %C\",\"postprefix\":\"HR-\"}"); - map.put("HT", "{\"name\":\"HAITI\",\"fmt\":\"%N%n%O%n%A%nHT%Z %C\",\"postprefix\":\"HT\"}"); - map.put("HU", "{\"name\":\"HUNGARY (Rep.)\",\"fmt\":\"%N%n%O%n%C%n%A%n%Z\",\"require\":\"ACZ\",\"upper\":\"ACNO\"}"); - map.put("ID", "{\"name\":\"INDONESIA\",\"lang\":\"id\",\"languages\":\"id\",\"fmt\":\"%N%n%O%n%A%n%C%n%S %Z\",\"require\":\"AS\",\"label_overrides\":[{\"field\":\"A7\",\"label\":\"RT\"},{\"field\":\"A6\",\"label\":\"RW\"},{\"field\":\"A5\",\"label\":\"Dusun/Banjar\"},{\"field\":\"BI\",\"label\":\"Blok\"},{\"field\":\"A4\",\"message\":\"MSG_VILLAGE\"},{\"field\":\"A3\",\"label\":\"Kecamatan\"},{\"field\":\"S1\",\"label\":\"Pasar\"}]}"); - map.put("IE", "{\"name\":\"IRELAND\",\"lang\":\"en\",\"languages\":\"en\",\"fmt\":\"%N%n%O%n%A%n%D%n%C%n%S%n%Z\",\"sublocality_name_type\":\"townland\",\"state_name_type\":\"county\",\"zip_name_type\":\"eircode\",\"label_overrides\":[{\"field\":\"S\",\"label\":\"郡\",\"lang\":\"zh\"}]}"); - map.put("IL", "{\"name\":\"ISRAEL\",\"fmt\":\"%N%n%O%n%A%n%C %Z\"}"); - map.put("IM", "{\"name\":\"ISLE OF MAN\",\"fmt\":\"%N%n%O%n%A%n%C%n%Z\",\"require\":\"ACZ\",\"upper\":\"CZ\"}"); - map.put("IN", "{\"name\":\"INDIA\",\"lang\":\"en\",\"languages\":\"en~hi\",\"fmt\":\"%N%n%O%n%A%n%T%n%F%n%L%n%C %Z%n%S\",\"require\":\"ACSZ\",\"state_name_type\":\"state\",\"zip_name_type\":\"pin\",\"label_overrides\":[{\"field\":\"S1\",\"label\":\"Sublocality 1\"},{\"field\":\"S2\",\"label\":\"Sublocality 2\"},{\"field\":\"S3\",\"label\":\"Sublocality 3\"},{\"field\":\"S4\",\"label\":\"Sublocality 4\"}]}"); - map.put("IO", "{\"name\":\"BRITISH INDIAN OCEAN TERRITORY\",\"fmt\":\"%N%n%O%n%A%n%C%n%Z\",\"require\":\"ACZ\",\"upper\":\"CZ\"}"); - map.put("IQ", "{\"name\":\"IRAQ\",\"lang\":\"ar\",\"languages\":\"ar\",\"fmt\":\"%O%n%N%n%A%n%C, %S%n%Z\",\"require\":\"ACS\",\"upper\":\"CS\"}"); - map.put("IR", "{\"name\":\"IRAN\",\"lang\":\"fa\",\"languages\":\"fa\",\"fmt\":\"%O%n%N%n%S%n%C, %D%n%A%n%Z\",\"sublocality_name_type\":\"neighborhood\"}"); - map.put("IS", "{\"name\":\"ICELAND\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("IT", "{\"name\":\"ITALY\",\"lang\":\"it\",\"languages\":\"it\",\"fmt\":\"%N%n%O%n%A%n%Z %C %S\",\"require\":\"ACSZ\",\"upper\":\"CS\",\"width_overrides\":\"%S:S\"}"); - map.put("JE", "{\"name\":\"CHANNEL ISLANDS\",\"fmt\":\"%N%n%O%n%A%n%C%nJERSEY%n%Z\",\"require\":\"ACZ\",\"upper\":\"CZ\"}"); - map.put("JM", "{\"name\":\"JAMAICA\",\"lang\":\"en\",\"languages\":\"en\",\"fmt\":\"%N%n%O%n%A%n%C%n%S %X\",\"require\":\"ACS\",\"state_name_type\":\"parish\"}"); - map.put("JO", "{\"name\":\"JORDAN\",\"fmt\":\"%N%n%O%n%A%n%C %Z\"}"); - map.put("JP", "{\"name\":\"JAPAN\",\"lang\":\"ja\",\"languages\":\"ja\",\"lfmt\":\"%N%n%O%n%A, %S%n%Z\",\"fmt\":\"〒%Z%n%S%n%A%n%O%n%N\",\"require\":\"ASZ\",\"upper\":\"S\",\"state_name_type\":\"prefecture\",\"width_overrides\":\"%S:S\"}"); - map.put("KE", "{\"name\":\"KENYA\",\"fmt\":\"%N%n%O%n%A%n%C%n%Z\"}"); - map.put("KG", "{\"name\":\"KYRGYZSTAN\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("KH", "{\"name\":\"CAMBODIA\",\"fmt\":\"%N%n%O%n%A%n%C %Z\"}"); - map.put("KI", "{\"name\":\"KIRIBATI\",\"fmt\":\"%N%n%O%n%A%n%S%n%C\",\"upper\":\"ACNOS\",\"state_name_type\":\"island\"}"); - map.put("KM", "{\"name\":\"COMOROS\",\"upper\":\"AC\"}"); - map.put("KN", "{\"name\":\"SAINT KITTS AND NEVIS\",\"lang\":\"en\",\"languages\":\"en\",\"fmt\":\"%N%n%O%n%A%n%C, %S\",\"require\":\"ACS\",\"state_name_type\":\"island\"}"); - map.put("KP", "{\"name\":\"NORTH KOREA\",\"lang\":\"ko\",\"languages\":\"ko\",\"lfmt\":\"%N%n%O%n%A%n%C%n%S, %Z\",\"fmt\":\"%Z%n%S%n%C%n%A%n%O%n%N\"}"); - map.put("KR", "{\"name\":\"SOUTH KOREA\",\"lang\":\"ko\",\"languages\":\"ko\",\"lfmt\":\"%N%n%O%n%A%n%D%n%C%n%S%n%Z\",\"fmt\":\"%S %C%D%n%A%n%O%n%N%n%Z\",\"require\":\"ACSZ\",\"upper\":\"Z\",\"sublocality_name_type\":\"district\",\"state_name_type\":\"do_si\",\"label_overrides\":[{\"field\":\"BI\",\"message\":\"MSG_STREET_NUMBER\"},{\"field\":\"S2\",\"message\":\"MSG_NEIGHBORHOOD\"},{\"field\":\"S4\",\"message\":\"MSG_STREET_NAME\"}]}"); - map.put("KW", "{\"name\":\"KUWAIT\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("KY", "{\"name\":\"CAYMAN ISLANDS\",\"lang\":\"en\",\"languages\":\"en\",\"fmt\":\"%N%n%O%n%A%n%S %Z\",\"require\":\"AS\",\"state_name_type\":\"island\"}"); - map.put("KZ", "{\"name\":\"KAZAKHSTAN\",\"lang\":\"kk\",\"languages\":\"kk~ru\",\"fmt\":\"%Z%n%S%n%C%n%A%n%O%n%N\"}"); - map.put("LA", "{\"name\":\"LAO (PEOPLE'S DEM. REP.)\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("LB", "{\"name\":\"LEBANON\",\"fmt\":\"%N%n%O%n%A%n%C %Z\"}"); - map.put("LC", "{\"name\":\"SAINT LUCIA\"}"); - map.put("LI", "{\"name\":\"LIECHTENSTEIN\",\"fmt\":\"%O%n%N%n%A%nFL-%Z %C\",\"require\":\"ACZ\",\"postprefix\":\"FL-\"}"); - map.put("LK", "{\"name\":\"SRI LANKA\",\"fmt\":\"%N%n%O%n%A%n%C%n%Z\"}"); - map.put("LR", "{\"name\":\"LIBERIA\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("LS", "{\"name\":\"LESOTHO\",\"fmt\":\"%N%n%O%n%A%n%C %Z\"}"); - map.put("LT", "{\"name\":\"LITHUANIA\",\"fmt\":\"%O%n%N%n%A%nLT-%Z %C %S\",\"require\":\"ACZ\",\"postprefix\":\"LT-\"}"); - map.put("LU", "{\"name\":\"LUXEMBOURG\",\"fmt\":\"%O%n%N%n%A%nL-%Z %C\",\"require\":\"ACZ\",\"postprefix\":\"L-\"}"); - map.put("LV", "{\"name\":\"LATVIA\",\"fmt\":\"%N%n%O%n%A%n%S%n%C, %Z\",\"require\":\"ACZ\",\"label_overrides\":[{\"field\":\"C\",\"label\":\"Novads\",\"lang\":\"lv\"},{\"field\":\"C\",\"label\":\"Municipality\",\"lang\":\"en\"},{\"field\":\"S\",\"label\":\"Pagasts/pilsēta\",\"lang\":\"lv\"},{\"field\":\"S\",\"label\":\"Parish/town\",\"lang\":\"en\"}]}"); - map.put("LY", "{\"name\":\"LIBYA\"}"); - map.put("MA", "{\"name\":\"MOROCCO\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("MC", "{\"name\":\"MONACO\",\"fmt\":\"%N%n%O%n%A%nMC-%Z %C %X\",\"postprefix\":\"MC-\"}"); - map.put("MD", "{\"name\":\"Rep. MOLDOVA\",\"fmt\":\"%N%n%O%n%A%nMD-%Z %C\",\"postprefix\":\"MD-\"}"); - map.put("ME", "{\"name\":\"MONTENEGRO\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("MF", "{\"name\":\"SAINT MARTIN\",\"fmt\":\"%O%n%N%n%A%n%Z %C %X\",\"require\":\"ACZ\",\"upper\":\"ACX\"}"); - map.put("MG", "{\"name\":\"MADAGASCAR\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("MH", "{\"name\":\"MARSHALL ISLANDS\",\"fmt\":\"%N%n%O%n%A%n%C %S %Z\",\"require\":\"ACSZ\",\"upper\":\"ACNOS\",\"state_name_type\":\"state\",\"zip_name_type\":\"zip\"}"); - map.put("MK", "{\"name\":\"MACEDONIA\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("ML", "{\"name\":\"MALI\"}"); - map.put("MM", "{\"name\":\"MYANMAR\",\"fmt\":\"%N%n%O%n%A%n%C, %Z\"}"); - map.put("MN", "{\"name\":\"MONGOLIA\",\"lang\":\"mn\",\"languages\":\"mn\",\"fmt\":\"%N%n%O%n%A%n%C%n%S %Z\"}"); - map.put("MO", "{\"name\":\"MACAO\",\"lang\":\"zh-Hant\",\"languages\":\"zh-Hant\",\"lfmt\":\"%N%n%O%n%A\",\"fmt\":\"%A%n%O%n%N\",\"require\":\"A\"}"); - map.put("MP", "{\"name\":\"NORTHERN MARIANA ISLANDS\",\"fmt\":\"%N%n%O%n%A%n%C %S %Z\",\"require\":\"ACSZ\",\"upper\":\"ACNOS\",\"state_name_type\":\"state\",\"zip_name_type\":\"zip\"}"); - map.put("MQ", "{\"name\":\"MARTINIQUE\",\"fmt\":\"%O%n%N%n%A%n%Z %C %X\",\"require\":\"ACZ\",\"upper\":\"ACX\"}"); - map.put("MR", "{\"name\":\"MAURITANIA\",\"upper\":\"AC\"}"); - map.put("MS", "{\"name\":\"MONTSERRAT\"}"); - map.put("MT", "{\"name\":\"MALTA\",\"fmt\":\"%N%n%O%n%A%n%C %Z\",\"upper\":\"CZ\"}"); - map.put("MU", "{\"name\":\"MAURITIUS\",\"fmt\":\"%N%n%O%n%A%n%Z%n%C\",\"upper\":\"CZ\"}"); - map.put("MV", "{\"name\":\"MALDIVES\",\"fmt\":\"%N%n%O%n%A%n%C %Z\"}"); - map.put("MW", "{\"name\":\"MALAWI\",\"fmt\":\"%N%n%O%n%A%n%C %X\"}"); - map.put("MX", "{\"name\":\"MEXICO\",\"lang\":\"es\",\"languages\":\"es\",\"fmt\":\"%N%n%O%n%A%n%D%n%Z %C, %S\",\"require\":\"ACSZ\",\"upper\":\"CSZ\",\"sublocality_name_type\":\"neighborhood\",\"state_name_type\":\"state\",\"width_overrides\":\"%S:S\",\"label_overrides\":[{\"field\":\"S1\",\"label\":\"Delegación\"},{\"field\":\"S2\",\"label\":\"Supermanzana\"},{\"field\":\"S3\",\"label\":\"Manzana\"},{\"field\":\"LP\",\"label\":\"Lote\"}]}"); - map.put("MY", "{\"name\":\"MALAYSIA\",\"lang\":\"ms\",\"languages\":\"ms\",\"fmt\":\"%N%n%O%n%A%n%D%n%Z %C%n%S\",\"require\":\"ACZ\",\"upper\":\"CS\",\"sublocality_name_type\":\"village_township\",\"state_name_type\":\"state\"}"); - map.put("MZ", "{\"name\":\"MOZAMBIQUE\",\"lang\":\"pt\",\"languages\":\"pt\",\"fmt\":\"%N%n%O%n%A%n%Z %C%S\"}"); - map.put("NA", "{\"name\":\"NAMIBIA\",\"fmt\":\"%N%n%O%n%A%n%C%n%Z\"}"); - map.put("NC", "{\"name\":\"NEW CALEDONIA\",\"fmt\":\"%O%n%N%n%A%n%Z %C %X\",\"require\":\"ACZ\",\"upper\":\"ACX\"}"); - map.put("NE", "{\"name\":\"NIGER\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("NF", "{\"name\":\"NORFOLK ISLAND\",\"fmt\":\"%O%n%N%n%A%n%C %S %Z\",\"upper\":\"CS\"}"); - map.put("NG", "{\"name\":\"NIGERIA\",\"lang\":\"en\",\"languages\":\"en\",\"fmt\":\"%N%n%O%n%A%n%D%n%C %Z%n%S\",\"upper\":\"CS\",\"state_name_type\":\"state\",\"label_overrides\":[{\"field\":\"D\",\"label\":\"Local government area\",\"lang\":\"en\"}]}"); - map.put("NI", "{\"name\":\"NICARAGUA\",\"lang\":\"es\",\"languages\":\"es\",\"fmt\":\"%N%n%O%n%A%n%Z%n%C, %S\",\"upper\":\"CS\",\"state_name_type\":\"department\"}"); - map.put("NL", "{\"name\":\"NETHERLANDS\",\"fmt\":\"%O%n%N%n%A%n%Z %C\",\"require\":\"ACZ\"}"); - map.put("NO", "{\"name\":\"NORWAY\",\"fmt\":\"%N%n%O%n%A%n%Z %C\",\"require\":\"ACZ\",\"locality_name_type\":\"post_town\"}"); - map.put("NP", "{\"name\":\"NEPAL\",\"fmt\":\"%N%n%O%n%A%n%C %Z\"}"); - map.put("NR", "{\"name\":\"NAURU CENTRAL PACIFIC\",\"lang\":\"en\",\"languages\":\"en\",\"fmt\":\"%N%n%O%n%A%n%S\",\"require\":\"AS\",\"state_name_type\":\"district\"}"); - map.put("NU", "{\"name\":\"NIUE\"}"); - map.put("NZ", "{\"name\":\"NEW ZEALAND\",\"fmt\":\"%N%n%O%n%A%n%D%n%C %Z\",\"require\":\"ACZ\"}"); - map.put("OM", "{\"name\":\"OMAN\",\"fmt\":\"%N%n%O%n%A%n%Z%n%C\"}"); - map.put("PA", "{\"name\":\"PANAMA (REP.)\",\"lang\":\"es\",\"languages\":\"es\",\"fmt\":\"%N%n%O%n%A%n%C%n%S\",\"upper\":\"CS\"}"); - map.put("PE", "{\"name\":\"PERU\",\"lang\":\"es\",\"languages\":\"es\",\"fmt\":\"%N%n%O%n%A%n%C %Z%n%S\",\"locality_name_type\":\"district\"}"); - map.put("PF", "{\"name\":\"FRENCH POLYNESIA\",\"fmt\":\"%N%n%O%n%A%n%Z %C %S\",\"require\":\"ACSZ\",\"upper\":\"CS\",\"state_name_type\":\"island\"}"); - map.put("PG", "{\"name\":\"PAPUA NEW GUINEA\",\"lang\":\"tpi\",\"languages\":\"tpi~en~ho\",\"fmt\":\"%N%n%O%n%A%n%C %Z %S\",\"require\":\"ACS\"}"); - map.put("PH", "{\"name\":\"PHILIPPINES\",\"lang\":\"en\",\"languages\":\"en\",\"fmt\":\"%N%n%O%n%A%n%D, %C%n%Z %S\"}"); - map.put("PK", "{\"name\":\"PAKISTAN\",\"fmt\":\"%N%n%O%n%A%n%D%n%C-%Z\",\"label_overrides\":[{\"field\":\"D\",\"label\":\"Sector\",\"lang\":\"en\"}]}"); - map.put("PL", "{\"name\":\"POLAND\",\"fmt\":\"%N%n%O%n%A%n%Z %C\",\"require\":\"ACZ\"}"); - map.put("PM", "{\"name\":\"ST. PIERRE AND MIQUELON\",\"fmt\":\"%O%n%N%n%A%n%Z %C %X\",\"require\":\"ACZ\",\"upper\":\"ACX\"}"); - map.put("PN", "{\"name\":\"PITCAIRN\",\"fmt\":\"%N%n%O%n%A%n%C%n%Z\",\"require\":\"ACZ\",\"upper\":\"CZ\"}"); - map.put("PR", "{\"name\":\"PUERTO RICO\",\"fmt\":\"%N%n%O%n%A%n%C PR %Z\",\"require\":\"ACZ\",\"upper\":\"ACNO\",\"zip_name_type\":\"zip\",\"postprefix\":\"PR \"}"); - map.put("PS", "{\"name\":\"PALESTINIAN TERRITORY\"}"); - map.put("PT", "{\"name\":\"PORTUGAL\",\"fmt\":\"%N%n%O%n%A%n%Z %C\",\"require\":\"ACZ\"}"); - map.put("PW", "{\"name\":\"PALAU\",\"lang\":\"pau\",\"languages\":\"pau~en\",\"fmt\":\"%N%n%O%n%A%n%C %S %Z\",\"require\":\"ACSZ\",\"upper\":\"ACNOS\",\"state_name_type\":\"state\",\"zip_name_type\":\"zip\"}"); - map.put("PY", "{\"name\":\"PARAGUAY\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("QA", "{\"name\":\"QATAR\",\"upper\":\"AC\"}"); - map.put("RE", "{\"name\":\"REUNION\",\"fmt\":\"%O%n%N%n%A%n%Z %C %X\",\"require\":\"ACZ\",\"upper\":\"ACX\"}"); - map.put("RO", "{\"name\":\"ROMANIA\",\"lang\":\"ro\",\"languages\":\"ro\",\"fmt\":\"%N%n%O%n%A%n%Z %S %C\",\"require\":\"ACZ\",\"upper\":\"AC\",\"label_overrides\":[{\"field\":\"C\",\"label\":\"Județe/sectoare\",\"lang\":\"ro\"},{\"field\":\"C\",\"label\":\"County/sector\",\"lang\":\"en\"},{\"field\":\"S\",\"label\":\"Municipiu/oraș/comună\",\"lang\":\"ro\"},{\"field\":\"S\",\"label\":\"Municipality/city/town/commune\",\"lang\":\"en\"}]}"); - map.put("RS", "{\"name\":\"REPUBLIC OF SERBIA\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("RU", "{\"name\":\"RUSSIAN FEDERATION\",\"lang\":\"ru\",\"languages\":\"ru\",\"lfmt\":\"%N%n%O%n%A%n%C%n%S%n%Z\",\"fmt\":\"%N%n%O%n%A%n%C%n%S%n%Z\",\"require\":\"ACSZ\",\"upper\":\"AC\",\"state_name_type\":\"oblast\",\"label_overrides\":[{\"field\":\"CS\",\"message\":\"MSG_OFFICE_UNIT_NUMBER\"}]}"); - map.put("RW", "{\"name\":\"RWANDA\",\"upper\":\"AC\"}"); - map.put("SA", "{\"name\":\"SAUDI ARABIA\",\"fmt\":\"%N%n%O%n%A%n%C %Z\"}"); - map.put("SB", "{\"name\":\"SOLOMON ISLANDS\"}"); - map.put("SC", "{\"name\":\"SEYCHELLES\",\"fmt\":\"%N%n%O%n%A%n%C%n%S\",\"upper\":\"S\",\"state_name_type\":\"island\"}"); - map.put("SD", "{\"name\":\"SUDAN\",\"fmt\":\"%N%n%O%n%A%n%C%n%Z\",\"locality_name_type\":\"district\"}"); - map.put("SE", "{\"name\":\"SWEDEN\",\"fmt\":\"%O%n%N%n%A%nSE-%Z %C\",\"require\":\"ACZ\",\"locality_name_type\":\"post_town\",\"postprefix\":\"SE-\"}"); - map.put("SG", "{\"name\":\"REP. OF SINGAPORE\",\"fmt\":\"%N%n%O%n%A%nSINGAPORE %Z\",\"require\":\"AZ\"}"); - map.put("SH", "{\"name\":\"SAINT HELENA\",\"fmt\":\"%N%n%O%n%A%n%C%n%Z\",\"require\":\"ACZ\",\"upper\":\"CZ\"}"); - map.put("SI", "{\"name\":\"SLOVENIA\",\"fmt\":\"%N%n%O%n%A%nSI-%Z %C\",\"postprefix\":\"SI-\"}"); - map.put("SJ", "{\"name\":\"SVALBARD AND JAN MAYEN ISLANDS\",\"fmt\":\"%N%n%O%n%A%n%Z %C\",\"require\":\"ACZ\",\"locality_name_type\":\"post_town\"}"); - map.put("SK", "{\"name\":\"SLOVAKIA\",\"fmt\":\"%N%n%O%n%A%n%Z %C\",\"require\":\"ACZ\",\"label_overrides\":[{\"field\":\"NH\",\"label\":\"Obecní část\",\"lang\":\"cs\"},{\"field\":\"NH\",\"label\":\"Obecný časť\",\"lang\":\"sk\"},{\"field\":\"BI\",\"label\":\"Descriptive No.\"},{\"field\":\"BI\",\"label\":\"Popisné číslo\",\"lang\":\"cs\"},{\"field\":\"BI\",\"label\":\"Súpisné číslo\",\"lang\":\"sk\"},{\"field\":\"SN\",\"label\":\"Orientation No.\"},{\"field\":\"SN\",\"label\":\"Orientační číslo\",\"lang\":\"cs\"},{\"field\":\"SN\",\"label\":\"Orientačné číslo\",\"lang\":\"sk\"},{\"field\":\"S1\",\"label\":\"City District\"},{\"field\":\"S1\",\"label\":\"Městská část\",\"lang\":\"cs\"},{\"field\":\"S1\",\"label\":\"Mestská časť\",\"lang\":\"sk\"}]}"); - map.put("SL", "{\"name\":\"SIERRA LEONE\"}"); - map.put("SM", "{\"name\":\"SAN MARINO\",\"fmt\":\"%N%n%O%n%A%n%Z %C\",\"require\":\"AZ\"}"); - map.put("SN", "{\"name\":\"SENEGAL\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("SO", "{\"name\":\"SOMALIA\",\"lang\":\"so\",\"languages\":\"so\",\"fmt\":\"%N%n%O%n%A%n%C, %S %Z\",\"require\":\"ACS\",\"upper\":\"ACS\"}"); - map.put("SR", "{\"name\":\"SURINAME\",\"lang\":\"nl\",\"languages\":\"nl\",\"fmt\":\"%N%n%O%n%A%n%C%n%S\",\"upper\":\"AS\"}"); - map.put("SS", "{\"name\":\"SOUTH SUDAN\"}"); - map.put("ST", "{\"name\":\"SAO TOME AND PRINCIPE\"}"); - map.put("SV", "{\"name\":\"EL SALVADOR\",\"lang\":\"es\",\"languages\":\"es\",\"fmt\":\"%N%n%O%n%A%n%Z-%C%n%S\",\"require\":\"ACS\",\"upper\":\"CSZ\"}"); - map.put("SX", "{\"name\":\"SINT MAARTEN\"}"); - map.put("SY", "{\"name\":\"SYRIA\",\"locality_name_type\":\"district\"}"); - map.put("SZ", "{\"name\":\"SWAZILAND\",\"fmt\":\"%N%n%O%n%A%n%C%n%Z\",\"upper\":\"ACZ\"}"); - map.put("TA", "{\"name\":\"TRISTAN DA CUNHA\",\"fmt\":\"%N%n%O%n%A%n%C%n%Z\"}"); - map.put("TC", "{\"name\":\"TURKS AND CAICOS ISLANDS\",\"fmt\":\"%N%n%O%n%A%n%C%n%Z\",\"require\":\"ACZ\",\"upper\":\"CZ\"}"); - map.put("TD", "{\"name\":\"CHAD\"}"); - map.put("TF", "{\"name\":\"FRENCH SOUTHERN TERRITORIES\"}"); - map.put("TG", "{\"name\":\"TOGO\"}"); - map.put("TH", "{\"name\":\"THAILAND\",\"lang\":\"th\",\"languages\":\"th\",\"lfmt\":\"%N%n%O%n%A%n%D, %C%n%S %Z\",\"fmt\":\"%N%n%O%n%A%n%D %C%n%S %Z\",\"upper\":\"S\",\"label_overrides\":[{\"field\":\"C\",\"label\":\"Amphoe / Khet\"},{\"field\":\"C\",\"label\":\"อำเภอ/เขต\",\"lang\":\"th\"},{\"field\":\"C\",\"label\":\"アムプー/ケート\",\"lang\":\"ja\"},{\"field\":\"C\",\"label\":\"암프/켓\",\"lang\":\"ko\"},{\"field\":\"C\",\"label\":\"郡/区\",\"lang\":\"zh\"},{\"field\":\"C\",\"label\":\"郡/區\",\"lang\":\"zh-TW\"},{\"field\":\"C\",\"label\":\"郡/區\",\"lang\":\"zh-HK\"},{\"field\":\"D\",\"label\":\"Tambon / Khwaeng\"},{\"field\":\"D\",\"label\":\"ตำบล/แขวง\",\"lang\":\"th\"},{\"field\":\"D\",\"label\":\"タムボン/クウェーン\",\"lang\":\"ja\"},{\"field\":\"D\",\"label\":\"땀본/쾡\",\"lang\":\"ko\"},{\"field\":\"D\",\"label\":\"区/小区\",\"lang\":\"zh\"},{\"field\":\"D\",\"label\":\"區/小區\",\"lang\":\"zh-TW\"},{\"field\":\"D\",\"label\":\"區/小區\",\"lang\":\"zh-HK\"}]}"); - map.put("TJ", "{\"name\":\"TAJIKISTAN\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("TK", "{\"name\":\"TOKELAU\"}"); - map.put("TL", "{\"name\":\"TIMOR-LESTE\"}"); - map.put("TM", "{\"name\":\"TURKMENISTAN\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("TN", "{\"name\":\"TUNISIA\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("TO", "{\"name\":\"TONGA\"}"); - map.put("TR", "{\"name\":\"TURKEY\",\"lang\":\"tr\",\"languages\":\"tr\",\"fmt\":\"%N%n%O%n%A%n%Z %C/%S\",\"require\":\"ACZ\",\"locality_name_type\":\"district\",\"label_overrides\":[{\"field\":\"C\",\"label\":\"İlçe\",\"lang\":\"tr\"},{\"field\":\"S\",\"label\":\"İl\",\"lang\":\"tr\"},{\"field\":\"A4\",\"message\":\"MSG_NEIGHBORHOOD\"}]}"); - map.put("TT", "{\"name\":\"TRINIDAD AND TOBAGO\",\"fmt\":\"%N%n%O%n%A%n%C%n%Z\"}"); - map.put("TV", "{\"name\":\"TUVALU\",\"lang\":\"tyv\",\"languages\":\"tyv\",\"fmt\":\"%N%n%O%n%A%n%C%n%S\",\"upper\":\"ACS\",\"state_name_type\":\"island\"}"); - map.put("TW", "{\"name\":\"TAIWAN\",\"lang\":\"zh-Hant\",\"languages\":\"zh-Hant\",\"lfmt\":\"%N%n%O%n%A%n%C, %S %Z\",\"fmt\":\"%Z%n%S%C%n%A%n%O%n%N\",\"require\":\"ACSZ\",\"locality_name_type\":\"district\",\"state_name_type\":\"county\"}"); - map.put("TZ", "{\"name\":\"TANZANIA (UNITED REP.)\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("UA", "{\"name\":\"UKRAINE\",\"lang\":\"uk\",\"languages\":\"uk\",\"lfmt\":\"%N%n%O%n%A%n%C%n%S%n%Z\",\"fmt\":\"%N%n%O%n%A%n%C%n%S%n%Z\",\"require\":\"ACZ\",\"state_name_type\":\"oblast\",\"label_overrides\":[{\"field\":\"CS\",\"message\":\"MSG_OFFICE_UNIT_NUMBER\"}]}"); - map.put("UG", "{\"name\":\"UGANDA\"}"); - map.put("UM", "{\"name\":\"UNITED STATES MINOR OUTLYING ISLANDS\",\"fmt\":\"%N%n%O%n%A%n%C %S %Z\",\"require\":\"ACS\",\"upper\":\"ACNOS\",\"state_name_type\":\"state\",\"zip_name_type\":\"zip\"}"); - map.put("US", "{\"name\":\"UNITED STATES\",\"lang\":\"en\",\"languages\":\"en\",\"fmt\":\"%N%n%O%n%A%n%C, %S %Z\",\"require\":\"ACSZ\",\"upper\":\"CS\",\"state_name_type\":\"state\",\"zip_name_type\":\"zip\",\"width_overrides\":\"%S:S\"}"); - map.put("UY", "{\"name\":\"URUGUAY\",\"lang\":\"es\",\"languages\":\"es\",\"fmt\":\"%N%n%O%n%A%n%Z %C %S\",\"upper\":\"CS\"}"); - map.put("UZ", "{\"name\":\"UZBEKISTAN\",\"lang\":\"uz\",\"languages\":\"uz~ru\",\"fmt\":\"%N%n%O%n%A%n%Z %C%n%S\",\"upper\":\"CS\"}"); - map.put("VA", "{\"name\":\"VATICAN\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("VC", "{\"name\":\"SAINT VINCENT AND THE GRENADINES (ANTILLES)\",\"fmt\":\"%N%n%O%n%A%n%C %Z\"}"); - map.put("VE", "{\"name\":\"VENEZUELA\",\"lang\":\"es\",\"languages\":\"es\",\"fmt\":\"%N%n%O%n%A%n%C %Z, %S\",\"require\":\"ACS\",\"upper\":\"CS\",\"state_name_type\":\"state\"}"); - map.put("VG", "{\"name\":\"VIRGIN ISLANDS (BRITISH)\",\"fmt\":\"%N%n%O%n%A%n%C%n%Z\",\"require\":\"A\"}"); - map.put("VI", "{\"name\":\"VIRGIN ISLANDS (U.S.)\",\"fmt\":\"%N%n%O%n%A%n%C %S %Z\",\"require\":\"ACSZ\",\"upper\":\"ACNOS\",\"state_name_type\":\"state\",\"zip_name_type\":\"zip\"}"); - map.put("VN", "{\"name\":\"VIET NAM\",\"lang\":\"vi\",\"languages\":\"vi\",\"lfmt\":\"%N%n%O%n%A%n%C%n%S %Z\",\"fmt\":\"%N%n%O%n%A%n%C%n%S %Z\",\"require\":\"AS\",\"label_overrides\":[{\"field\":\"S1\",\"label\":\"Ward/Township/Commune\"},{\"field\":\"S1\",\"label\":\"Phường/Thị trấn/Xã\",\"lang\":\"vi\"}]}"); - map.put("VU", "{\"name\":\"VANUATU\"}"); - map.put("WF", "{\"name\":\"WALLIS AND FUTUNA ISLANDS\",\"fmt\":\"%O%n%N%n%A%n%Z %C %X\",\"require\":\"ACZ\",\"upper\":\"ACX\"}"); - map.put("WS", "{\"name\":\"SAMOA\"}"); - map.put("XK", "{\"name\":\"KOSOVO\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("YE", "{\"name\":\"YEMEN\"}"); - map.put("YT", "{\"name\":\"MAYOTTE\",\"fmt\":\"%O%n%N%n%A%n%Z %C %X\",\"require\":\"ACZ\",\"upper\":\"ACX\"}"); - map.put("ZA", "{\"name\":\"SOUTH AFRICA\",\"fmt\":\"%N%n%O%n%A%n%D%n%C%n%Z\",\"require\":\"ACZ\"}"); - map.put("ZM", "{\"name\":\"ZAMBIA\",\"fmt\":\"%N%n%O%n%A%n%Z %C\"}"); - map.put("ZW", "{\"name\":\"ZIMBABWE\"}"); - map.put("ZZ", "{\"fmt\":\"%N%n%O%n%A%n%C\",\"require\":\"AC\",\"upper\":\"C\",\"sublocality_name_type\":\"suburb\",\"locality_name_type\":\"city\",\"state_name_type\":\"province\",\"zip_name_type\":\"postal\"}"); - return Collections.unmodifiableMap(map); - } -} diff --git a/common/src/test/java/com/google/i18n/addressinput/common/AddressFieldTest.java b/common/src/test/java/com/google/i18n/addressinput/common/AddressFieldTest.java index a7802442..dd99346f 100644 --- a/common/src/test/java/com/google/i18n/addressinput/common/AddressFieldTest.java +++ b/common/src/test/java/com/google/i18n/addressinput/common/AddressFieldTest.java @@ -18,38 +18,19 @@ import static org.junit.Assert.assertEquals; -import com.google.i18n.addressinput.common.AddressField.WidthType; - import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @RunWith(JUnit4.class) public class AddressFieldTest { - @Test public void testOf() throws Exception { + @Test + public void testOf() throws Exception { assertEquals(AddressField.COUNTRY, AddressField.of('R')); } - @Test public void testGetChar() throws Exception { + @Test + public void testGetChar() throws Exception { assertEquals('R', AddressField.COUNTRY.getChar()); } - - @Test public void testGetWidthTypeForPostalCode() throws Exception { - // Postal (& sorting) code always have SHORT width. - assertEquals(WidthType.SHORT, AddressField.POSTAL_CODE.getWidthTypeForRegion("US")); - assertEquals(WidthType.SHORT, AddressField.SORTING_CODE.getWidthTypeForRegion("DE")); - } - - @Test public void testGetWidthTypeForCountry() throws Exception { - // No overrides for country, so we use the default, LONG. - assertEquals(WidthType.LONG, AddressField.COUNTRY.getWidthTypeForRegion("US")); - assertEquals(WidthType.LONG, AddressField.COUNTRY.getWidthTypeForRegion("CH")); - } - - @Test public void testGetWidthTypeWithOverride() throws Exception { - // With an override. - assertEquals(WidthType.SHORT, AddressField.LOCALITY.getWidthTypeForRegion("CN")); - // Without an override. - assertEquals(WidthType.LONG, AddressField.LOCALITY.getWidthTypeForRegion("US")); - } } diff --git a/common/src/test/java/com/google/i18n/addressinput/common/FormatInterpreterTest.java b/common/src/test/java/com/google/i18n/addressinput/common/FormatInterpreterTest.java index bdbf4e9b..96265ec2 100644 --- a/common/src/test/java/com/google/i18n/addressinput/common/FormatInterpreterTest.java +++ b/common/src/test/java/com/google/i18n/addressinput/common/FormatInterpreterTest.java @@ -321,4 +321,32 @@ private Map createWidthOverrideRegionData(String overridesString .isNull(); } } + + @Test + public void testGetWidthTypeForPostalCode() throws Exception { + // Postal (& sorting) code always have SHORT width. + assertThat(FormatInterpreter.getWidthTypeForRegion(AddressField.POSTAL_CODE, "US")) + .isEqualTo(WidthType.SHORT); + assertThat(FormatInterpreter.getWidthTypeForRegion(AddressField.SORTING_CODE, "DE")) + .isEqualTo(WidthType.SHORT); + } + + @Test + public void testGetWidthTypeForCountry() throws Exception { + // No overrides for country, so we use the default, LONG. + assertThat(FormatInterpreter.getWidthTypeForRegion(AddressField.COUNTRY, "US")) + .isEqualTo(WidthType.LONG); + assertThat(FormatInterpreter.getWidthTypeForRegion(AddressField.COUNTRY, "CH")) + .isEqualTo(WidthType.LONG); + } + + @Test + public void testGetWidthTypeWithOverride() throws Exception { + // With an override. + assertThat(FormatInterpreter.getWidthTypeForRegion(AddressField.LOCALITY, "CN")) + .isEqualTo(WidthType.SHORT); + // Without an override. + assertThat(FormatInterpreter.getWidthTypeForRegion(AddressField.LOCALITY, "US")) + .isEqualTo(WidthType.LONG); + } } diff --git a/common/src/test/java/com/google/i18n/addressinput/testing/countryinfo.txt b/common/src/test/java/com/google/i18n/addressinput/testing/countryinfo.txt index e8bb4a44..fb91fc18 100644 --- a/common/src/test/java/com/google/i18n/addressinput/testing/countryinfo.txt +++ b/common/src/test/java/com/google/i18n/addressinput/testing/countryinfo.txt @@ -10171,7 +10171,7 @@ data/IO={"id":"data/IO","key":"IO","name":"BRITISH INDIAN OCEAN TERRITORY","fmt" data/IQ={"id":"data/IQ","key":"IQ","name":"IRAQ","fmt":"%O%n%N%n%A%n%C, %S%n%Z","require":"ACS","upper":"CS","zip":"\\d{5}"} data/IR={"id":"data/IR","key":"IR","name":"IRAN","fmt":"%O%n%N%n%S%n%C, %D%n%A%n%Z","zip":"\\d{5}-?\\d{5}","zipex":"11936-12345","sublocality_name_type":"neighborhood"} data/IS={"id":"data/IS","key":"IS","name":"ICELAND","fmt":"%N%n%O%n%A%n%Z %C","zip":"\\d{3}","zipex":"320,121,220,110","posturl":"http://www.postur.is/cgi-bin/hsrun.exe/Distributed/vefur/vefur.htx;start=HS_landakort_postnumer"} -data/IT={"id":"data/IT","key":"IT","name":"ITALY","lang":"it","languages":"it","fmt":"%N%n%O%n%A%n%Z %C %S","require":"ACSZ","upper":"CS","zip":"\\d{5}","zipex":"00144,47037,39049","posturl":"http://www.poste.it/online/cercacap/","sub_keys":"AG~AL~AN~AR~AP~AT~AV~BA~BT~BL~BN~BG~BI~BO~BZ~BS~BR~CA~CL~CB~CI~CE~CT~CZ~CH~CO~CS~CR~KR~CN~EN~FM~FE~FI~FG~FC~FR~GE~GO~GR~IM~IS~AQ~SP~LT~LE~LC~LI~LO~LU~MC~MN~MS~MT~VS~ME~MI~MO~MB~NA~NO~NU~OG~OT~OR~PD~PA~PR~PV~PG~PU~PE~PC~PI~PT~PN~PZ~PO~RG~RA~RC~RE~RI~RN~RM~RO~SA~SS~SV~SI~SR~SO~TA~TE~TR~TO~TP~TN~TV~TS~UD~AO~VA~VE~VB~VC~VR~VV~VI~VT","sub_names":"Agrigento~Alessandria~Ancona~Arezzo~Ascoli Piceno~Asti~Avellino~Bari~Barletta-Andria-Trani~Belluno~Benevento~Bergamo~Biella~Bologna~Bolzano~Brescia~Brindisi~Cagliari~Caltanissetta~Campobasso~Carbonia-Iglesias~Caserta~Catania~Catanzaro~Chieti~Como~Cosenza~Cremona~Crotone~Cuneo~Enna~Fermo~Ferrara~Firenze~Foggia~Forlì-Cesena~Frosinone~Genova~Gorizia~Grosseto~Imperia~Isernia~L'Aquila~La Spezia~Latina~Lecce~Lecco~Livorno~Lodi~Lucca~Macerata~Mantova~Massa-Carrara~Matera~Medio Campidano~Messina~Milano~Modena~Monza e della Brianza~Napoli~Novara~Nuoro~Ogliastra~Olbia-Tempio~Oristano~Padova~Palermo~Parma~Pavia~Perugia~Pesaro e Urbino~Pescara~Piacenza~Pisa~Pistoia~Pordenone~Potenza~Prato~Ragusa~Ravenna~Reggio Calabria~Reggio nell'Emilia~Rieti~Rimini~Roma~Rovigo~Salerno~Sassari~Savona~Siena~Siracusa~Sondrio~Taranto~Teramo~Terni~Torino~Trapani~Trento~Treviso~Trieste~Udine~Valle d'Aosta~Varese~Venezia~Verbano-Cusio-Ossola~Vercelli~Verona~Vibo Valentia~Vicenza~Viterbo","sub_zips":"92~15~60~52~63~14~83~70~76[01]~32~82~24~13[89]~40~39~25~72~0912[1-9]|0913[0-4]|0901[0289]|0902[03468]|0903[0234]|0904|0803[035]|08043~93~860[1-4]|86100~0901[013-7]~81~95~88[01]~66~22~87~26[01]~88[89]~12|18025~94~638|63900~44~50~71~47[015]~03~16~34[01]7~58~18~860[7-9]|86170~67~19~04~73~23[89]~57~26[89]~55~62~46~54~75~0902[012579]|0903[015-9]|09040~98~20~41~208|20900~80~28[01]~080[1-3]|08100~08037|0804[024-9]~08020|0702|0703[08]~090[7-9]|09170|0801[039]|0803[04]~35~90~43~27~06~61~65~29~56~51~330[7-9]|33170~85~59~97~48~89[01]~42~02~47[89]~00~45~84~070[14]|0703[0-79]|07100~17|12071~53~96~23[01]~74~64~05~10~91~38~31~3401|341[0-689]|34062~330[1-5]|33100~11~21~30~28[89]~13[01]~37~89[89]~36~01"} +data/IT={"id":"data/IT","key":"IT","name":"ITALY","lang":"it","languages":"it","fmt":"%N%n%O%n%A%n%Z %C %S","require":"ACSZ","upper":"CS","zip":"\\d{5}","zipex":"00144,47037,39049","posturl":"http://www.poste.it/online/cercacap/","sub_keys":"AG~AL~AN~AR~AP~AT~AV~BA~BT~BL~BN~BG~BI~BO~BZ~BS~BR~CA~CL~CB~CI~CE~CT~CZ~CH~CO~CS~CR~KR~CN~EN~FM~FE~FI~FG~FC~FR~GA~GE~GO~GR~IM~IS~AQ~SP~LT~LE~LC~LI~LO~LU~MC~MN~MS~MT~VS~ME~MI~MO~MB~NA~NO~NU~OG~OT~OR~PD~PA~PR~PV~PG~PU~PE~PC~PI~PT~PN~PZ~PO~RG~RA~RC~RE~RI~RN~RM~RO~SA~SD~SS~SU~SV~SI~SR~SO~TA~TE~TR~TO~TP~TN~TV~TS~UD~AO~VA~VE~VB~VC~VR~VV~VI~VT","sub_names":"Agrigento~Alessandria~Ancona~Arezzo~Ascoli Piceno~Asti~Avellino~Bari~Barletta-Andria-Trani~Belluno~Benevento~Bergamo~Biella~Bologna~Bolzano~Brescia~Brindisi~Cagliari~Caltanissetta~Campobasso~Carbonia-Iglesias~Caserta~Catania~Catanzaro~Chieti~Como~Cosenza~Cremona~Crotone~Cuneo~Enna~Fermo~Ferrara~Firenze~Foggia~Forlì-Cesena~Frosinone~Gallura Nord-Est Sardegna~Genova~Gorizia~Grosseto~Imperia~Isernia~L'Aquila~La Spezia~Latina~Lecce~Lecco~Livorno~Lodi~Lucca~Macerata~Mantova~Massa-Carrara~Matera~Medio Campidano~Messina~Milano~Modena~Monza e della Brianza~Napoli~Novara~Nuoro~Ogliastra~Olbia-Tempio~Oristano~Padova~Palermo~Parma~Pavia~Perugia~Pesaro e Urbino~Pescara~Piacenza~Pisa~Pistoia~Pordenone~Potenza~Prato~Ragusa~Ravenna~Reggio Calabria~Reggio nell'Emilia~Rieti~Rimini~Roma~Rovigo~Salerno~Sulcis Iglesiente~Sassari~Sud Sardegna~Savona~Siena~Siracusa~Sondrio~Taranto~Teramo~Terni~Torino~Trapani~Trento~Treviso~Trieste~Udine~Valle d'Aosta~Varese~Venezia~Verbano-Cusio-Ossola~Vercelli~Verona~Vibo Valentia~Vicenza~Viterbo","sub_zips":"92~15~60~52~63~14~83~70~76[01]~32~82~24~13[89]~40~39~25~72~0912[1-9]|0913[0-4]|0901[0289]|0902[03468]|0903[0234]|0904|0803[035]|08043~93~860[1-4]|86100~0901[013-7]~81~95~88[01]~66~22~87~26[01]~88[89]~12|18025~94~638|63900~44~50~71~47[015]~03~070[235]|0802~16~34[01]7~58~18~860[7-9]|86170~67~19~04~73~23[89]~57~26[89]~55~62~46~54~75~0902[012579]|0903[015-9]|09040~98~20~41~208|20900~80~28[01]~080[1-3]|08100~08037|0804[024-9]~08020|0702|0703[08]~090[7-9]|09170|0801[039]|0803[04]~35~90~43~27~06~61~65~29~56~51~330[7-9]|33170~85~59~97~48~89[01]~42~02~47[89]~00~45~84~0901~070[14]|0703[0-79]|07100~090[1-5][0-9]|0906[0-6]|080[1-4]~17|12071~53~96~23[01]~74~64~05~10~91~38~31~3401|341[0-689]|34062~330[1-5]|33100~11~21~30~28[89]~13[01]~37~89[89]~36~01"} data/IT/AG={"id":"data/IT/AG","key":"AG","name":"Agrigento","lang":"it","zip":"92"} data/IT/AL={"id":"data/IT/AL","key":"AL","name":"Alessandria","lang":"it","zip":"15"} data/IT/AN={"id":"data/IT/AN","key":"AN","name":"Ancona","lang":"it","zip":"60"} @@ -10210,6 +10210,7 @@ data/IT/FG={"id":"data/IT/FG","key":"FG","name":"Foggia","lang":"it","zip":"71"} data/IT/FI={"id":"data/IT/FI","key":"FI","name":"Firenze","lang":"it","zip":"50"} data/IT/FM={"id":"data/IT/FM","key":"FM","name":"Fermo","lang":"it","zip":"638|63900"} data/IT/FR={"id":"data/IT/FR","key":"FR","name":"Frosinone","lang":"it","zip":"03"} +data/IT/GA={"id":"data/IT/GA","key":"GA","name":"Gallura Nord-Est Sardegna","lang":"it","zip":"070[235]|0802"} data/IT/GE={"id":"data/IT/GE","key":"GE","name":"Genova","lang":"it","zip":"16"} data/IT/GO={"id":"data/IT/GO","key":"GO","name":"Gorizia","lang":"it","zip":"34[01]7"} data/IT/GR={"id":"data/IT/GR","key":"GR","name":"Grosseto","lang":"it","zip":"58"} @@ -10258,11 +10259,13 @@ data/IT/RM={"id":"data/IT/RM","key":"RM","name":"Roma","lang":"it","zip":"00"} data/IT/RN={"id":"data/IT/RN","key":"RN","name":"Rimini","lang":"it","zip":"47[89]"} data/IT/RO={"id":"data/IT/RO","key":"RO","name":"Rovigo","lang":"it","zip":"45"} data/IT/SA={"id":"data/IT/SA","key":"SA","name":"Salerno","lang":"it","zip":"84"} +data/IT/SD={"id":"data/IT/SD","key":"SD","name":"Sulcis Iglesiente","lang":"it","zip":"0901"} data/IT/SI={"id":"data/IT/SI","key":"SI","name":"Siena","lang":"it","zip":"53"} data/IT/SO={"id":"data/IT/SO","key":"SO","name":"Sondrio","lang":"it","zip":"23[01]"} data/IT/SP={"id":"data/IT/SP","key":"SP","name":"La Spezia","lang":"it","zip":"19"} data/IT/SR={"id":"data/IT/SR","key":"SR","name":"Siracusa","lang":"it","zip":"96"} data/IT/SS={"id":"data/IT/SS","key":"SS","name":"Sassari","lang":"it","zip":"070[14]|0703[0-79]|07100"} +data/IT/SU={"id":"data/IT/SU","key":"SU","name":"Sud Sardegna","lang":"it","zip":"090[1-5][0-9]|0906[0-6]|080[1-4]"} data/IT/SV={"id":"data/IT/SV","key":"SV","name":"Savona","lang":"it","zip":"17|12071"} data/IT/TA={"id":"data/IT/TA","key":"TA","name":"Taranto","lang":"it","zip":"74"} data/IT/TE={"id":"data/IT/TE","key":"TE","name":"Teramo","lang":"it","zip":"64"} diff --git a/cpp/src/region_data_constants.cc b/cpp/src/region_data_constants.cc deleted file mode 100644 index f884794b..00000000 --- a/cpp/src/region_data_constants.cc +++ /dev/null @@ -1,1563 +0,0 @@ -// Copyright (C) 2013 Google Inc. -// -// 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. - -// AUTOMATICALLY GENERATED FILE - DO NOT EDIT - -#include "region_data_constants.h" - -#include - -#include -#include -#include -#include -#include -#include - -#include "address_field_util.h" -#include "format_element.h" -#include "lookup_key.h" -#include "util/size.h" - -namespace i18n { -namespace addressinput { -namespace { - -struct RegionData { - const char* const region_code; - const char* const data; -}; - -const RegionData kRegionData[] = { - {"AC", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%Z",)" - R"("zipex":"ASCN 1ZZ",)" - R"("languages":"en")" - "}"}, - {"AD", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"AD100,AD501,AD700",)" - R"("posturl":"http://www.correos.es/comun/CodigosPostales/1010_s-CodPostal.asp?Provincia=",)" - R"("languages":"ca")" - "}"}, - {"AE", "{" - R"("fmt":"%N%n%O%n%A%n%S",)" - R"("lfmt":"%N%n%O%n%A%n%S",)" - R"("require":"AS",)" - R"("state_name_type":"emirate",)" - R"("languages":"ar")" - "}"}, - {"AF", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%Z",)" - R"("zipex":"1001,2601,3801",)" - R"("languages":"fa~ps~uz-Arab~tk")" - "}"}, - {"AG", "{" - R"("require":"A",)" - R"("languages":"en")" - "}"}, - {"AI", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%Z",)" - R"("zipex":"2640",)" - R"("languages":"en")" - "}"}, - {"AL", "{" - R"("fmt":"%N%n%O%n%A%n%Z%n%C",)" - R"("zipex":"1001,1017,3501",)" - R"("languages":"sq")" - "}"}, - {"AM", "{" - R"("fmt":"%N%n%O%n%A%n%Z%n%C%n%S",)" - R"("lfmt":"%N%n%O%n%A%n%Z%n%C%n%S",)" - R"("zipex":"375010,0002,0010",)" - R"("languages":"hy")" - "}"}, - {"AO", "{" - R"("languages":"pt")" - "}"}, - {"AQ", "{" - "}"}, - {"AR", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C%n%S",)" - R"("zipex":"C1070AAM,C1000WAM,B1000TBU,X5187XAB",)" - R"("posturl":"http://www.correoargentino.com.ar/formularios/cpa",)" - R"("languages":"es")" - "}"}, - {"AS", "{" - R"("fmt":"%N%n%O%n%A%n%C %S %Z",)" - R"("require":"ACSZ",)" - R"("zip_name_type":"zip",)" - R"("state_name_type":"state",)" - R"("zipex":"96799",)" - R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)" - R"("languages":"sm~en")" - "}"}, - {"AT", "{" - R"("fmt":"%O%n%N%n%A%n%Z %C",)" - R"("require":"ACZ",)" - R"("zipex":"1010,3741",)" - R"("posturl":"http://www.post.at/post_subsite_postleitzahlfinder.php",)" - R"("languages":"de~hr~sl~hu")" - "}"}, - {"AU", "{" - R"("fmt":"%O%n%N%n%A%n%C %S %Z",)" - R"("require":"ACSZ",)" - R"("state_name_type":"state",)" - R"("locality_name_type":"suburb",)" - R"("zipex":"2060,3171,6430,4000,4006,3001",)" - R"("posturl":"http://www1.auspost.com.au/postcodes/",)" - R"("languages":"en")" - "}"}, - {"AW", "{" - R"("languages":"nl~pap")" - "}"}, - {"AX", "{" - R"("fmt":"%O%n%N%n%A%nAX-%Z %C%nÅLAND",)" - R"("require":"ACZ",)" - R"("zipex":"22150,22550,22240,22710,22270,22730,22430",)" - R"("posturl":"https://www.alandpost.ax/privat/skicka-brev/postnummer-pa-aland/postnummersokning",)" - R"("languages":"sv")" - "}"}, - {"AZ", "{" - R"("fmt":"%N%n%O%n%A%nAZ %Z %C",)" - R"("zipex":"1000",)" - R"("languages":"az~az-Cyrl")" - "}"}, - {"BA", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"71000",)" - R"("languages":"bs~bs-Cyrl~hr~sr~sr-Latn")" - "}"}, - {"BB", "{" - R"("fmt":"%N%n%O%n%A%n%C, %S %Z",)" - R"("state_name_type":"parish",)" - R"("zipex":"BB23026,BB22025",)" - R"("languages":"en")" - "}"}, - {"BD", "{" - R"("fmt":"%N%n%O%n%A%n%C - %Z",)" - R"("zipex":"1340,1000",)" - R"("posturl":"https://bdpost.portal.gov.bd/site/page/f41a42bd-2540-4afa-8568-af56443c3df8/-",)" - R"("languages":"bn")" - "}"}, - {"BE", "{" - R"("fmt":"%O%n%N%n%A%n%Z %C",)" - R"("require":"ACZ",)" - R"("zipex":"4000,1000",)" - R"("posturl":"https://www.bpost.be/nl/postcodevalidatie-tool",)" - R"("languages":"nl~fr~de")" - "}"}, - {"BF", "{" - R"("fmt":"%N%n%O%n%A%n%C %X",)" - R"("languages":"fr")" - "}"}, - {"BG", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"1000,1700",)" - R"("posturl":"http://www.bgpost.bg/?cid=5",)" - R"("languages":"bg")" - "}"}, - {"BH", "{" - R"("fmt":"%N%n%O%n%A%n%C %Z",)" - R"("zipex":"317",)" - R"("languages":"ar")" - "}"}, - {"BI", "{" - R"("languages":"rn~fr~en")" - "}"}, - {"BJ", "{" - R"("languages":"fr")" - "}"}, - {"BL", "{" - R"("fmt":"%O%n%N%n%A%n%Z %C %X",)" - R"("require":"ACZ",)" - R"("zipex":"97100",)" - R"("posturl":"https://www.laposte.fr/outils/trouver-un-code-postal",)" - R"("languages":"fr")" - "}"}, - {"BM", "{" - R"("fmt":"%N%n%O%n%A%n%C %Z",)" - R"("zipex":"FL 07,HM GX,HM 12",)" - R"("posturl":"http://www.landvaluation.bm/",)" - R"("languages":"en")" - "}"}, - {"BN", "{" - R"("fmt":"%N%n%O%n%A%n%C %Z",)" - R"("zipex":"BT2328,KA1131,BA1511",)" - R"("posturl":"http://webapps.mtic.gov.bn/SitePages/Post/postcode.aspx",)" - R"("languages":"ms~ms-Arab")" - "}"}, - {"BO", "{" - R"("languages":"es~qu~ay")" - "}"}, - {"BQ", "{" - R"("languages":"nl")" - "}"}, - {"BR", "{" - R"("fmt":"%O%n%N%n%A%n%D%n%C-%S%n%Z",)" - R"("require":"ASCZ",)" - R"("state_name_type":"state",)" - R"("sublocality_name_type":"neighborhood",)" - R"("zipex":"40301-110,70002-900",)" - R"("posturl":"http://www.buscacep.correios.com.br/",)" - R"("languages":"pt")" - "}"}, - {"BS", "{" - R"("fmt":"%N%n%O%n%A%n%C, %S",)" - R"("state_name_type":"island",)" - R"("languages":"en")" - "}"}, - {"BT", "{" - R"("fmt":"%N%n%O%n%A%n%C %Z",)" - R"("zipex":"11001,31101,35003",)" - R"("posturl":"https://bhutanpost.bt/postcode/",)" - R"("languages":"dz")" - "}"}, - {"BV", "{" - R"("languages":"no")" - "}"}, - {"BW", "{" - R"("languages":"en~tn")" - "}"}, - {"BY", "{" - R"("fmt":"%O%n%N%n%A%n%Z, %C%n%S",)" - R"("zipex":"223016,225860,220050",)" - R"("posturl":"http://ex.belpost.by/addressbook/",)" - R"("languages":"be~ru")" - "}"}, - {"BZ", "{" - R"("languages":"en")" - "}"}, - {"CA", "{" - R"("fmt":"%N%n%O%n%A%n%C %S %Z",)" - R"("require":"ACSZ",)" - R"("zipex":"H3Z 2Y7,V8X 3X4,T0L 1K0,T0H 1A0,K1A 0B1",)" - R"("posturl":"https://www.canadapost-postescanada.ca/cpo/mc/personal/postalcode/fpc.jsf",)" - R"("languages":"en~fr")" - "}"}, - {"CC", "{" - R"("fmt":"%O%n%N%n%A%n%C %S %Z",)" - R"("zipex":"6799",)" - R"("languages":"en")" - "}"}, - {"CD", "{" - R"("languages":"fr~sw~lua~ln~kg")" - "}"}, - {"CF", "{" - R"("languages":"sg~fr")" - "}"}, - {"CG", "{" - R"("languages":"fr")" - "}"}, - {"CH", "{" - R"("fmt":"%O%n%N%n%A%nCH-%Z %C",)" - R"("require":"ACZ",)" - R"("zipex":"2544,1211,1556,3030",)" - R"("posturl":"http://www.post.ch/db/owa/pv_plz_pack/pr_main",)" - R"("languages":"de~gsw~fr~it~rm")" - "}"}, - {"CI", "{" - R"("fmt":"%N%n%O%n%X %A %C %X",)" - R"("languages":"fr")" - "}"}, - {"CK", "{" - R"("languages":"en")" - "}"}, - {"CL", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C%n%S",)" - R"("zipex":"8340457,8720019,1230000,8329100",)" - R"("languages":"es")" - "}"}, - {"CM", "{" - R"("languages":"fr~en")" - "}"}, - {"CN", "{" - R"("fmt":"%Z%n%S%C%D%n%A%n%O%n%N",)" - R"("lfmt":"%N%n%O%n%A%n%D%n%C%n%S, %Z",)" - R"("require":"ACSZ",)" - R"("sublocality_name_type":"district",)" - R"("zipex":"266033,317204,100096,100808",)" - R"("posturl":"http://cpdc.chinapost.com.cn/web/",)" - R"("languages":"zh")" - "}"}, - {"CO", "{" - R"("fmt":"%N%n%O%n%A%n%D%n%C, %S, %Z",)" - R"("require":"AS",)" - R"("state_name_type":"department",)" - R"("zipex":"111221,130001,760011",)" - R"("posturl":"http://www.codigopostal.gov.co/",)" - R"("languages":"es")" - "}"}, - {"CR", "{" - R"("fmt":"%N%n%O%n%A%n%S, %C%n%Z",)" - R"("require":"ACS",)" - R"("zipex":"1000,2010,1001",)" - R"("posturl":"https://correos.go.cr/codigo-postal/",)" - R"("languages":"es")" - "}"}, - {"CU", "{" - R"("fmt":"%N%n%O%n%A%n%C %S%n%Z",)" - R"("zipex":"10700",)" - R"("languages":"es")" - "}"}, - {"CV", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C%n%S",)" - R"("state_name_type":"island",)" - R"("zipex":"7600",)" - R"("languages":"pt")" - "}"}, - {"CW", "{" - R"("languages":"pap~nl")" - "}"}, - {"CX", "{" - R"("fmt":"%O%n%N%n%A%n%C %S %Z",)" - R"("zipex":"6798",)" - R"("languages":"en")" - "}"}, - {"CY", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"2008,3304,1900",)" - R"("languages":"el~tr")" - "}"}, - {"CZ", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("require":"ACZ",)" - R"("zipex":"100 00,251 66,530 87,110 00,225 99",)" - R"("posturl":"http://psc.ceskaposta.cz/CleanForm.action",)" - R"("languages":"cs")" - "}"}, - {"DE", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("require":"ACZ",)" - R"("zipex":"26133,53225",)" - R"("posturl":"http://www.postdirekt.de/plzserver/",)" - R"("languages":"de~frr")" - "}"}, - {"DJ", "{" - R"("languages":"fr~ar")" - "}"}, - {"DK", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("require":"ACZ",)" - R"("zipex":"8660,1566",)" - R"("posturl":"http://www.postdanmark.dk/da/Privat/Kundeservice/postnummerkort/Sider/Find-postnummer.aspx",)" - R"("languages":"da~de~kl")" - "}"}, - {"DM", "{" - R"("languages":"en")" - "}"}, - {"DO", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"11903,10101",)" - R"("posturl":"http://inposdom.gob.do/",)" - R"("languages":"es")" - "}"}, - {"DZ", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"40304,16027",)" - R"("languages":"ar~fr")" - "}"}, - {"EC", "{" - R"("fmt":"%N%n%O%n%A%n%Z%n%C",)" - R"("zipex":"090105,092301",)" - R"("posturl":"http://www.codigopostal.gob.ec/",)" - R"("languages":"es~qu")" - "}"}, - {"EE", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C %S",)" - R"("require":"ACZ",)" - R"("zipex":"69501,11212",)" - R"("posturl":"https://www.omniva.ee/era/sihtnumbrite_otsing",)" - R"("languages":"et")" - "}"}, - {"EG", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%S%n%Z",)" - R"("lfmt":"%N%n%O%n%A%n%C%n%S%n%Z",)" - R"("zipex":"4460232,5734356",)" - R"("languages":"ar")" - "}"}, - {"EH", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"70000,72000",)" - R"("languages":"ar")" - "}"}, - {"ER", "{" - R"("languages":"ti~en~ar")" - "}"}, - {"ES", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C %S",)" - R"("require":"ACSZ",)" - R"("zipex":"28039,28300,28070",)" - R"("posturl":"http://www.correos.es/contenido/13-MenuRec2/04-MenuRec24/1010_s-CodPostal.asp",)" - R"("languages":"es~ca~gl~eu")" - "}"}, - {"ET", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"1000",)" - R"("languages":"am")" - "}"}, - {"FI", "{" - R"("fmt":"%O%n%N%n%A%nFI-%Z %C",)" - R"("require":"ACZ",)" - R"("zipex":"00550,00011",)" - R"("posturl":"https://support.posti.fi/fi/tyokalut/postinumerohaku.html",)" - R"("languages":"fi~sv~sms")" - "}"}, - {"FJ", "{" - R"("languages":"en~hif~fj")" - "}"}, - {"FK", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%Z",)" - R"("require":"ACZ",)" - R"("zipex":"FIQQ 1ZZ",)" - R"("languages":"en")" - "}"}, - {"FM", "{" - R"("fmt":"%N%n%O%n%A%n%C %S %Z",)" - R"("require":"ACSZ",)" - R"("zip_name_type":"zip",)" - R"("state_name_type":"state",)" - R"("zipex":"96941,96944",)" - R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)" - R"("languages":"en")" - "}"}, - {"FO", "{" - R"("fmt":"%N%n%O%n%A%nFO%Z %C",)" - R"("zipex":"100",)" - R"("posturl":"https://posta.fo/en/private/send-receive/postcodes",)" - R"("languages":"fo")" - "}"}, - {"FR", "{" - R"("fmt":"%O%n%N%n%A%n%Z %C",)" - R"("require":"ACZ",)" - R"("zipex":"33380,34092,33506",)" - R"("posturl":"https://www.laposte.fr/outils/trouver-un-code-postal",)" - R"("languages":"fr")" - "}"}, - {"GA", "{" - R"("languages":"fr")" - "}"}, - {"GB", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%Z",)" - R"("require":"ACZ",)" - R"("locality_name_type":"post_town",)" - R"("zipex":"EC1Y 8SY,GIR 0AA,M2 5BQ,M34 4AB,CR0 2YR,DN16 9AA,W1A 4ZZ,EC1A 1HQ,OX14 4PG,BS18 8HF,NR25 7HG,RH6 0NP,BH23 6AA,B6 5BA,SO23 9AP,PO1 3AX,BFPO 61",)" - R"("posturl":"http://www.royalmail.com/postcode-finder",)" - R"("languages":"en~cy~ga~gd")" - "}"}, - {"GD", "{" - R"("languages":"en")" - "}"}, - {"GE", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"0101",)" - R"("posturl":"http://www.georgianpost.ge/index.php?page=10",)" - R"("languages":"ka~ab~os")" - "}"}, - {"GF", "{" - R"("fmt":"%O%n%N%n%A%n%Z %C %X",)" - R"("require":"ACZ",)" - R"("zipex":"97300",)" - R"("posturl":"https://www.laposte.fr/outils/trouver-un-code-postal",)" - R"("languages":"fr")" - "}"}, - {"GG", "{" - R"("fmt":"%N%n%O%n%A%n%C%nGUERNSEY%n%Z",)" - R"("require":"ACZ",)" - R"("zipex":"GY1 1AA,GY2 2BT",)" - R"("posturl":"http://www.guernseypost.com/postcode_finder/",)" - R"("languages":"en")" - "}"}, - {"GH", "{" - R"("languages":"ak~en~ee~gaa")" - "}"}, - {"GI", "{" - R"("fmt":"%N%n%O%n%A%nGIBRALTAR%n%Z",)" - R"("require":"A",)" - R"("zipex":"GX11 1AA",)" - R"("languages":"en")" - "}"}, - {"GL", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("require":"ACZ",)" - R"("zipex":"3900,3950,3911",)" - R"("languages":"kl")" - "}"}, - {"GM", "{" - R"("languages":"en")" - "}"}, - {"GN", "{" - R"("fmt":"%N%n%O%n%Z %A %C",)" - R"("zipex":"001,200,100",)" - R"("languages":"fr")" - "}"}, - {"GP", "{" - R"("fmt":"%O%n%N%n%A%n%Z %C %X",)" - R"("require":"ACZ",)" - R"("zipex":"97100",)" - R"("posturl":"https://www.laposte.fr/outils/trouver-un-code-postal",)" - R"("languages":"fr")" - "}"}, - {"GQ", "{" - R"("languages":"es~fr~pt")" - "}"}, - {"GR", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("require":"ACZ",)" - R"("zipex":"151 24,151 10,101 88",)" - R"("posturl":"https://postalcodes.elta.gr",)" - R"("languages":"el")" - "}"}, - {"GS", "{" - R"("fmt":"%N%n%O%n%A%n%n%C%n%Z",)" - R"("require":"ACZ",)" - R"("zipex":"SIQQ 1ZZ",)" - R"("languages":"en")" - "}"}, - {"GT", "{" - R"("fmt":"%N%n%O%n%A%n%Z- %C",)" - R"("zipex":"09001,01501",)" - R"("languages":"es~quc")" - "}"}, - {"GU", "{" - R"("fmt":"%N%n%O%n%A%n%C %Z",)" - R"("require":"ACZ",)" - R"("zip_name_type":"zip",)" - R"("zipex":"96910,96931",)" - R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)" - R"("languages":"en~ch")" - "}"}, - {"GW", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"1000,1011",)" - R"("languages":"pt")" - "}"}, - {"GY", "{" - R"("languages":"en")" - "}"}, - {"HK", "{" - R"("fmt":"%S%n%C%n%A%n%O%n%N",)" - R"("lfmt":"%N%n%O%n%A%n%C%n%S",)" - R"("require":"AS",)" - R"("state_name_type":"area",)" - R"("locality_name_type":"district",)" - R"("languages":"zh-Hant~en")" - "}"}, - {"HM", "{" - R"("fmt":"%O%n%N%n%A%n%C %S %Z",)" - R"("zipex":"7050")" - "}"}, - {"HN", "{" - R"("fmt":"%N%n%O%n%A%n%C, %S%n%Z",)" - R"("require":"ACS",)" - R"("state_name_type":"department",)" - R"("zipex":"31301",)" - R"("languages":"es")" - "}"}, - {"HR", "{" - R"("fmt":"%N%n%O%n%A%nHR-%Z %C",)" - R"("zipex":"10000,21001,10002",)" - R"("posturl":"http://www.posta.hr/default.aspx?pretpum",)" - R"("languages":"hr~it~vec")" - "}"}, - {"HT", "{" - R"("fmt":"%N%n%O%n%A%nHT%Z %C",)" - R"("zipex":"6120,5310,6110,8510",)" - R"("languages":"ht~fr")" - "}"}, - {"HU", "{" - R"("fmt":"%N%n%O%n%C%n%A%n%Z",)" - R"("require":"ACZ",)" - R"("zipex":"1037,2380,1540",)" - R"("posturl":"http://posta.hu/ugyfelszolgalat/iranyitoszam_kereso",)" - R"("languages":"hu")" - "}"}, - {"ID", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%S %Z",)" - R"("require":"AS",)" - R"("zipex":"40115",)" - R"("languages":"id")" - "}"}, - {"IE", "{" - R"("fmt":"%N%n%O%n%A%n%D%n%C%n%S%n%Z",)" - R"("zip_name_type":"eircode",)" - R"("state_name_type":"county",)" - R"("sublocality_name_type":"townland",)" - R"("zipex":"A65 F4E2",)" - R"("posturl":"https://finder.eircode.ie",)" - R"("languages":"en")" - "}"}, - {"IL", "{" - R"("fmt":"%N%n%O%n%A%n%C %Z",)" - R"("zipex":"9614303",)" - R"("posturl":"http://www.israelpost.co.il/zipcode.nsf/demozip?openform",)" - R"("languages":"iw~ar")" - "}"}, - {"IM", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%Z",)" - R"("require":"ACZ",)" - R"("zipex":"IM2 1AA,IM99 1PS",)" - R"("posturl":"https://www.iompost.com/tools-forms/postcode-finder/",)" - R"("languages":"en~gv")" - "}"}, - {"IN", "{" - R"("fmt":"%N%n%O%n%A%n%T%n%F%n%L%n%C %Z%n%S",)" - R"("require":"ACSZ",)" - R"("zip_name_type":"pin",)" - R"("state_name_type":"state",)" - R"("zipex":"110034,110001",)" - R"("posturl":"https://www.indiapost.gov.in/vas/pages/FindPinCode.aspx",)" - R"("languages":"en~hi")" - "}"}, - {"IO", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%Z",)" - R"("require":"ACZ",)" - R"("zipex":"BBND 1ZZ",)" - R"("languages":"en")" - "}"}, - {"IQ", "{" - R"("fmt":"%O%n%N%n%A%n%C, %S%n%Z",)" - R"("require":"ACS",)" - R"("zipex":"31001",)" - R"("languages":"ar")" - "}"}, - {"IR", "{" - R"("fmt":"%O%n%N%n%S%n%C, %D%n%A%n%Z",)" - R"("sublocality_name_type":"neighborhood",)" - R"("zipex":"11936-12345",)" - R"("languages":"fa")" - "}"}, - {"IS", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"320,121,220,110",)" - R"("posturl":"https://posturinn.is/",)" - R"("languages":"is")" - "}"}, - {"IT", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C %S",)" - R"("require":"ACSZ",)" - R"("zipex":"00144,47037,39049",)" - R"("posturl":"https://www.poste.it/cerca/index.html#/risultati-cerca-cap/",)" - R"("languages":"it")" - "}"}, - {"JE", "{" - R"("fmt":"%N%n%O%n%A%n%C%nJERSEY%n%Z",)" - R"("require":"ACZ",)" - R"("zipex":"JE1 1AA,JE2 2BT",)" - R"("posturl":"http://www.jerseypost.com/tools/postcode-address-finder/",)" - R"("languages":"en")" - "}"}, - {"JM", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%S %X",)" - R"("require":"ACS",)" - R"("state_name_type":"parish",)" - R"("languages":"en")" - "}"}, - {"JO", "{" - R"("fmt":"%N%n%O%n%A%n%C %Z",)" - R"("zipex":"11937,11190",)" - R"("languages":"ar")" - "}"}, - {"JP", "{" - R"("fmt":"〒%Z%n%S%n%A%n%O%n%N",)" - R"("lfmt":"%N%n%O%n%A, %S%n%Z",)" - R"("require":"ASZ",)" - R"("state_name_type":"prefecture",)" - R"("zipex":"154-0023,350-1106,951-8073,112-0001,208-0032,231-0012",)" - R"("posturl":"http://www.post.japanpost.jp/zipcode/",)" - R"("languages":"ja")" - "}"}, - {"KE", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%Z",)" - R"("zipex":"20100,00100",)" - R"("languages":"sw~en")" - "}"}, - {"KG", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"720001",)" - R"("languages":"ky~ru")" - "}"}, - {"KH", "{" - R"("fmt":"%N%n%O%n%A%n%C %Z",)" - R"("zipex":"120101,120108",)" - R"("posturl":"https://www.cambodiapost.post/page/postal-codes",)" - R"("languages":"km")" - "}"}, - {"KI", "{" - R"("fmt":"%N%n%O%n%A%n%S%n%C",)" - R"("state_name_type":"island",)" - R"("languages":"en~gil")" - "}"}, - {"KM", "{" - R"("languages":"ar~zdj~wni~fr")" - "}"}, - {"KN", "{" - R"("fmt":"%N%n%O%n%A%n%C, %S",)" - R"("require":"ACS",)" - R"("state_name_type":"island",)" - R"("languages":"en")" - "}"}, - {"KP", "{" - R"("fmt":"%Z%n%S%n%C%n%A%n%O%n%N",)" - R"("lfmt":"%N%n%O%n%A%n%C%n%S, %Z",)" - R"("languages":"ko")" - "}"}, - {"KR", "{" - R"("fmt":"%S %C%D%n%A%n%O%n%N%n%Z",)" - R"("lfmt":"%N%n%O%n%A%n%D%n%C%n%S%n%Z",)" - R"("require":"ACSZ",)" - R"("state_name_type":"do_si",)" - R"("sublocality_name_type":"district",)" - R"("zipex":"03051",)" - R"("posturl":"http://www.epost.go.kr/search/zipcode/search5.jsp",)" - R"("languages":"ko")" - "}"}, - {"KW", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"54541,54551,54404,13009",)" - R"("languages":"ar")" - "}"}, - {"KY", "{" - R"("fmt":"%N%n%O%n%A%n%S %Z",)" - R"("require":"AS",)" - R"("state_name_type":"island",)" - R"("zipex":"KY1-1100,KY1-1702,KY2-2101",)" - R"("posturl":"http://www.caymanpost.gov.ky/",)" - R"("languages":"en")" - "}"}, - {"KZ", "{" - R"("fmt":"%Z%n%S%n%C%n%A%n%O%n%N",)" - R"("zipex":"040900,050012",)" - R"("languages":"kk~ru")" - "}"}, - {"LA", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"01160,01000",)" - R"("languages":"lo")" - "}"}, - {"LB", "{" - R"("fmt":"%N%n%O%n%A%n%C %Z",)" - R"("zipex":"2038 3054,1107 2810,1000",)" - R"("languages":"ar")" - "}"}, - {"LC", "{" - R"("languages":"en")" - "}"}, - {"LI", "{" - R"("fmt":"%O%n%N%n%A%nFL-%Z %C",)" - R"("require":"ACZ",)" - R"("zipex":"9496,9491,9490,9485",)" - R"("posturl":"http://www.post.ch/db/owa/pv_plz_pack/pr_main",)" - R"("languages":"de~gsw")" - "}"}, - {"LK", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%Z",)" - R"("zipex":"20000,00100",)" - R"("posturl":"http://www.slpost.gov.lk/",)" - R"("languages":"si~ta")" - "}"}, - {"LR", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"1000",)" - R"("languages":"en")" - "}"}, - {"LS", "{" - R"("fmt":"%N%n%O%n%A%n%C %Z",)" - R"("zipex":"100",)" - R"("languages":"st~en")" - "}"}, - {"LT", "{" - R"("fmt":"%O%n%N%n%A%nLT-%Z %C %S",)" - R"("require":"ACZ",)" - R"("zipex":"04340,03500",)" - R"("posturl":"http://www.post.lt/lt/?id=316",)" - R"("languages":"lt")" - "}"}, - {"LU", "{" - R"("fmt":"%O%n%N%n%A%nL-%Z %C",)" - R"("require":"ACZ",)" - R"("zipex":"4750,2998",)" - R"("posturl":"https://www.post.lu/en/particuliers/colis-courrier/rechercher-un-code-postal",)" - R"("languages":"fr~lb~de")" - "}"}, - {"LV", "{" - R"("fmt":"%N%n%O%n%A%n%S%n%C, %Z",)" - R"("require":"ACZ",)" - R"("zipex":"LV-1073,LV-1000",)" - R"("posturl":"https://pasts.lv/lv/kategorija/pasta_nodalas/",)" - R"("languages":"lv")" - "}"}, - {"LY", "{" - R"("languages":"ar")" - "}"}, - {"MA", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"53000,10000,20050,16052",)" - R"("languages":"ar~fr~tzm")" - "}"}, - {"MC", "{" - R"("fmt":"%N%n%O%n%A%nMC-%Z %C %X",)" - R"("zipex":"98000,98020,98011,98001",)" - R"("languages":"fr")" - "}"}, - {"MD", "{" - R"("fmt":"%N%n%O%n%A%nMD-%Z %C",)" - R"("zipex":"2012,2019",)" - R"("languages":"ro")" - "}"}, - {"ME", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"81257,81258,81217,84314,85366",)" - R"("languages":"sr-Latn")" - "}"}, - {"MF", "{" - R"("fmt":"%O%n%N%n%A%n%Z %C %X",)" - R"("require":"ACZ",)" - R"("zipex":"97100",)" - R"("posturl":"https://www.laposte.fr/particulier/outils/trouver-un-code-postal",)" - R"("languages":"fr")" - "}"}, - {"MG", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"501,101",)" - R"("languages":"mg~fr~en")" - "}"}, - {"MH", "{" - R"("fmt":"%N%n%O%n%A%n%C %S %Z",)" - R"("require":"ACSZ",)" - R"("zip_name_type":"zip",)" - R"("state_name_type":"state",)" - R"("zipex":"96960,96970",)" - R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)" - R"("languages":"en~mh")" - "}"}, - {"MK", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"1314,1321,1443,1062",)" - R"("languages":"mk~sq")" - "}"}, - {"ML", "{" - R"("languages":"fr")" - "}"}, - {"MM", "{" - R"("fmt":"%N%n%O%n%A%n%C, %Z",)" - R"("zipex":"11181",)" - R"("languages":"my")" - "}"}, - {"MN", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%S %Z",)" - R"("zipex":"65030,65270",)" - R"("posturl":"http://www.zipcode.mn/",)" - R"("languages":"mn")" - "}"}, - {"MO", "{" - R"("fmt":"%A%n%O%n%N",)" - R"("lfmt":"%N%n%O%n%A",)" - R"("require":"A",)" - R"("languages":"zh-Hant~yue~pt")" - "}"}, - {"MP", "{" - R"("fmt":"%N%n%O%n%A%n%C %S %Z",)" - R"("require":"ACSZ",)" - R"("zip_name_type":"zip",)" - R"("state_name_type":"state",)" - R"("zipex":"96950,96951,96952",)" - R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)" - R"("languages":"en")" - "}"}, - {"MQ", "{" - R"("fmt":"%O%n%N%n%A%n%Z %C %X",)" - R"("require":"ACZ",)" - R"("zipex":"97220",)" - R"("posturl":"https://www.laposte.fr/outils/trouver-un-code-postal",)" - R"("languages":"fr")" - "}"}, - {"MR", "{" - R"("languages":"ar")" - "}"}, - {"MS", "{" - R"("languages":"en")" - "}"}, - {"MT", "{" - R"("fmt":"%N%n%O%n%A%n%C %Z",)" - R"("zipex":"NXR 01,ZTN 05,GPO 01,BZN 1130,SPB 6031,VCT 1753",)" - R"("posturl":"https://www.maltapost.com/PostCode/",)" - R"("languages":"mt~en")" - "}"}, - {"MU", "{" - R"("fmt":"%N%n%O%n%A%n%Z%n%C",)" - R"("zipex":"42602",)" - R"("languages":"fr~en")" - "}"}, - {"MV", "{" - R"("fmt":"%N%n%O%n%A%n%C %Z",)" - R"("zipex":"20026",)" - R"("posturl":"http://www.maldivespost.com/?lid=10",)" - R"("languages":"dv")" - "}"}, - {"MW", "{" - R"("fmt":"%N%n%O%n%A%n%C %X",)" - R"("languages":"en~ny")" - "}"}, - {"MX", "{" - R"("fmt":"%N%n%O%n%A%n%D%n%Z %C, %S",)" - R"("require":"ACSZ",)" - R"("state_name_type":"state",)" - R"("sublocality_name_type":"neighborhood",)" - R"("zipex":"02860,77520,06082",)" - R"("posturl":"https://www.correosdemexico.gob.mx/SSLServicios/ConsultaCP/Descarga.aspx",)" - R"("languages":"es")" - "}"}, - {"MY", "{" - R"("fmt":"%N%n%O%n%A%n%D%n%Z %C%n%S",)" - R"("require":"ACZ",)" - R"("state_name_type":"state",)" - R"("sublocality_name_type":"village_township",)" - R"("zipex":"43000,50754,88990,50670",)" - R"("posturl":"http://www.pos.com.my",)" - R"("languages":"ms")" - "}"}, - {"MZ", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C%S",)" - R"("zipex":"1102,1119,3212",)" - R"("languages":"pt")" - "}"}, - {"NA", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%Z",)" - R"("zipex":"10001,10017",)" - R"("languages":"en")" - "}"}, - {"NC", "{" - R"("fmt":"%O%n%N%n%A%n%Z %C %X",)" - R"("require":"ACZ",)" - R"("zipex":"98814,98800,98810",)" - R"("posturl":"https://www.opt.nc/particuliers/courrier-et-colis/les-codes-postaux-de-nouvelle-caledonie",)" - R"("languages":"fr")" - "}"}, - {"NE", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"8001",)" - R"("languages":"fr")" - "}"}, - {"NF", "{" - R"("fmt":"%O%n%N%n%A%n%C %S %Z",)" - R"("zipex":"2899",)" - R"("languages":"en")" - "}"}, - {"NG", "{" - R"("fmt":"%N%n%O%n%A%n%D%n%C %Z%n%S",)" - R"("state_name_type":"state",)" - R"("zipex":"930283,300001,931104",)" - R"("posturl":"http://www.nigeriapostcodes.com/",)" - R"("languages":"en")" - "}"}, - {"NI", "{" - R"("fmt":"%N%n%O%n%A%n%Z%n%C, %S",)" - R"("state_name_type":"department",)" - R"("zipex":"52000",)" - R"("posturl":"http://www.correos.gob.ni/codigo-postal/",)" - R"("languages":"es")" - "}"}, - {"NL", "{" - R"("fmt":"%O%n%N%n%A%n%Z %C",)" - R"("require":"ACZ",)" - R"("zipex":"1234 AB,2490 AA",)" - R"("posturl":"https://www.postnl.nl/en/find-a-postcode/",)" - R"("languages":"nl~fy")" - "}"}, - {"NO", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("require":"ACZ",)" - R"("locality_name_type":"post_town",)" - R"("zipex":"0025,0107,6631",)" - R"("posturl":"http://adressesok.posten.no/nb/postal_codes/search",)" - R"("languages":"no~nn~se")" - "}"}, - {"NP", "{" - R"("fmt":"%N%n%O%n%A%n%C %Z",)" - R"("zipex":"44601",)" - R"("posturl":"http://www.gpo.gov.np/Home/Postalcode",)" - R"("languages":"ne")" - "}"}, - {"NR", "{" - R"("fmt":"%N%n%O%n%A%n%S",)" - R"("require":"AS",)" - R"("state_name_type":"district",)" - R"("languages":"en")" - "}"}, - {"NU", "{" - R"("languages":"en~niu")" - "}"}, - {"NZ", "{" - R"("fmt":"%N%n%O%n%A%n%D%n%C %Z",)" - R"("require":"ACZ",)" - R"("zipex":"6001,6015,6332,8252,1030",)" - R"("posturl":"https://www.nzpost.co.nz/tools/address-postcode-finder",)" - R"("languages":"en~mi")" - "}"}, - {"OM", "{" - R"("fmt":"%N%n%O%n%A%n%Z%n%C",)" - R"("zipex":"133,112,111",)" - R"("languages":"ar")" - "}"}, - {"PA", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%S",)" - R"("languages":"es")" - "}"}, - {"PE", "{" - R"("fmt":"%N%n%O%n%A%n%C %Z%n%S",)" - R"("locality_name_type":"district",)" - R"("zipex":"LIMA 23,LIMA 42,CALLAO 2,02001",)" - R"("posturl":"http://www.codigopostal.gob.pe/pages/invitado/consulta.jsf",)" - R"("languages":"es")" - "}"}, - {"PF", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C %S",)" - R"("require":"ACSZ",)" - R"("state_name_type":"island",)" - R"("zipex":"98709",)" - R"("languages":"fr~ty")" - "}"}, - {"PG", "{" - R"("fmt":"%N%n%O%n%A%n%C %Z %S",)" - R"("require":"ACS",)" - R"("zipex":"111",)" - R"("languages":"tpi~en~ho")" - "}"}, - {"PH", "{" - R"("fmt":"%N%n%O%n%A%n%D, %C%n%Z %S",)" - R"("zipex":"1008,1050,1135,1207,2000,1000",)" - R"("posturl":"http://www.philpost.gov.ph/",)" - R"("languages":"en")" - "}"}, - {"PK", "{" - R"("fmt":"%N%n%O%n%A%n%D%n%C-%Z",)" - R"("zipex":"44000",)" - R"("posturl":"http://www.pakpost.gov.pk/postcode.php",)" - R"("languages":"ur~en")" - "}"}, - {"PL", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("require":"ACZ",)" - R"("zipex":"00-950,05-470,48-300,32-015,00-940",)" - R"("posturl":"http://kody.poczta-polska.pl/",)" - R"("languages":"pl~de~csb~lt")" - "}"}, - {"PM", "{" - R"("fmt":"%O%n%N%n%A%n%Z %C %X",)" - R"("require":"ACZ",)" - R"("zipex":"97500",)" - R"("languages":"fr")" - "}"}, - {"PN", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%Z",)" - R"("require":"ACZ",)" - R"("zipex":"PCRN 1ZZ",)" - R"("languages":"en")" - "}"}, - {"PR", "{" - R"("fmt":"%N%n%O%n%A%n%C PR %Z",)" - R"("require":"ACZ",)" - R"("zip_name_type":"zip",)" - R"("zipex":"00930",)" - R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)" - R"("languages":"es~en")" - "}"}, - {"PS", "{" - R"("languages":"ar")" - "}"}, - {"PT", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("require":"ACZ",)" - R"("zipex":"2725-079,1250-096,1201-950,2860-571,1208-148",)" - R"("posturl":"http://www.ctt.pt/feapl_2/app/open/tools.jspx?tool=1",)" - R"("languages":"pt")" - "}"}, - {"PW", "{" - R"("fmt":"%N%n%O%n%A%n%C %S %Z",)" - R"("require":"ACSZ",)" - R"("zip_name_type":"zip",)" - R"("state_name_type":"state",)" - R"("zipex":"96940",)" - R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)" - R"("languages":"pau~en")" - "}"}, - {"PY", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"1536,1538,1209",)" - R"("languages":"gn~es")" - "}"}, - {"QA", "{" - R"("languages":"ar")" - "}"}, - {"RE", "{" - R"("fmt":"%O%n%N%n%A%n%Z %C %X",)" - R"("require":"ACZ",)" - R"("zipex":"97400",)" - R"("posturl":"https://www.laposte.fr/outils/trouver-un-code-postal",)" - R"("languages":"fr")" - "}"}, - {"RO", "{" - R"("fmt":"%N%n%O%n%A%n%Z %S %C",)" - R"("require":"ACZ",)" - R"("zipex":"060274,061357,200716",)" - R"("posturl":"http://www.posta-romana.ro/zip_codes",)" - R"("languages":"ro")" - "}"}, - {"RS", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"106314",)" - R"("posturl":"http://www.posta.rs/struktura/lat/aplikacije/pronadji/nadji-postu.asp",)" - R"("languages":"sr~sr-Latn~hu~ro~hr~sk~uk")" - "}"}, - {"RU", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%S%n%Z",)" - R"("lfmt":"%N%n%O%n%A%n%C%n%S%n%Z",)" - R"("require":"ACSZ",)" - R"("state_name_type":"oblast",)" - R"("zipex":"247112,103375,188300",)" - R"("posturl":"https://www.pochta.ru/post-index",)" - R"("languages":"ru")" - "}"}, - {"RW", "{" - R"("languages":"rw~en~fr")" - "}"}, - {"SA", "{" - R"("fmt":"%N%n%O%n%A%n%C %Z",)" - R"("zipex":"11564,11187,11142",)" - R"("languages":"ar")" - "}"}, - {"SB", "{" - R"("languages":"en")" - "}"}, - {"SC", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%S",)" - R"("state_name_type":"island",)" - R"("languages":"fr~en")" - "}"}, - {"SD", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%Z",)" - R"("locality_name_type":"district",)" - R"("zipex":"11042,11113",)" - R"("languages":"ar~en")" - "}"}, - {"SE", "{" - R"("fmt":"%O%n%N%n%A%nSE-%Z %C",)" - R"("require":"ACZ",)" - R"("locality_name_type":"post_town",)" - R"("zipex":"11455,12345,10500",)" - R"("posturl":"https://www.postnord.se/online-verktyg/verktyg/sok/sok-postnummer-och-adress",)" - R"("languages":"sv~fi")" - "}"}, - {"SG", "{" - R"("fmt":"%N%n%O%n%A%nSINGAPORE %Z",)" - R"("require":"AZ",)" - R"("zipex":"546080,308125,408600",)" - R"("posturl":"https://www.singpost.com/find-postal-code",)" - R"("languages":"en~zh~ms~ta")" - "}"}, - {"SH", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%Z",)" - R"("require":"ACZ",)" - R"("zipex":"STHL 1ZZ",)" - R"("languages":"en")" - "}"}, - {"SI", "{" - R"("fmt":"%N%n%O%n%A%nSI-%Z %C",)" - R"("zipex":"4000,1001,2500",)" - R"("languages":"sl~vec")" - "}"}, - {"SJ", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("require":"ACZ",)" - R"("locality_name_type":"post_town",)" - R"("zipex":"9170",)" - R"("posturl":"http://epab.posten.no/",)" - R"("languages":"no")" - "}"}, - {"SK", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("require":"ACZ",)" - R"("zipex":"010 01,023 14,972 48,921 01,975 99",)" - R"("posturl":"http://psc.posta.sk",)" - R"("languages":"sk")" - "}"}, - {"SL", "{" - R"("languages":"en")" - "}"}, - {"SM", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("require":"AZ",)" - R"("zipex":"47890,47891,47895,47899",)" - R"("posturl":"https://www.poste.it/cerca/index.html#/risultati-cerca-cap/",)" - R"("languages":"it")" - "}"}, - {"SN", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"12500,46024,16556,10000",)" - R"("languages":"wo~fr~ff~srr~dyo~sav~mfv~bjt~snf~knf~bsc~mey~tnr")" - "}"}, - {"SO", "{" - R"("fmt":"%N%n%O%n%A%n%C, %S %Z",)" - R"("require":"ACS",)" - R"("zipex":"JH 09010,AD 11010",)" - R"("languages":"so")" - "}"}, - {"SR", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%S",)" - R"("languages":"nl")" - "}"}, - {"SS", "{" - R"("languages":"en")" - "}"}, - {"ST", "{" - R"("languages":"pt")" - "}"}, - {"SV", "{" - R"("fmt":"%N%n%O%n%A%n%Z-%C%n%S",)" - R"("require":"ACS",)" - R"("zipex":"1101",)" - R"("languages":"es")" - "}"}, - {"SX", "{" - R"("languages":"en~nl")" - "}"}, - {"SY", "{" - R"("locality_name_type":"district",)" - R"("languages":"ar")" - "}"}, - {"SZ", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%Z",)" - R"("zipex":"H100",)" - R"("posturl":"https://www.eswatinipost.co.sz/postcode.php",)" - R"("languages":"en~ss")" - "}"}, - {"TA", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%Z",)" - R"("zipex":"TDCU 1ZZ",)" - R"("languages":"en")" - "}"}, - {"TC", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%Z",)" - R"("require":"ACZ",)" - R"("zipex":"TKCA 1ZZ",)" - R"("languages":"en")" - "}"}, - {"TD", "{" - R"("languages":"ar~fr")" - "}"}, - {"TF", "{" - R"("languages":"fr")" - "}"}, - {"TG", "{" - R"("languages":"fr")" - "}"}, - {"TH", "{" - R"("fmt":"%N%n%O%n%A%n%D %C%n%S %Z",)" - R"("lfmt":"%N%n%O%n%A%n%D, %C%n%S %Z",)" - R"("zipex":"10150,10210",)" - R"("languages":"th")" - "}"}, - {"TJ", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"735450,734025",)" - R"("languages":"tg")" - "}"}, - {"TK", "{" - R"("languages":"tkl~en")" - "}"}, - {"TL", "{" - R"("languages":"pt~tet")" - "}"}, - {"TM", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"744000",)" - R"("languages":"tk")" - "}"}, - {"TN", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"1002,8129,3100,1030",)" - R"("posturl":"http://www.poste.tn/codes.php",)" - R"("languages":"ar~fr")" - "}"}, - {"TO", "{" - R"("languages":"to~en")" - "}"}, - {"TR", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C/%S",)" - R"("require":"ACZ",)" - R"("locality_name_type":"district",)" - R"("zipex":"01960,06101",)" - R"("posturl":"http://postakodu.ptt.gov.tr/",)" - R"("languages":"tr")" - "}"}, - {"TT", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%Z",)" - R"("zipex":"500234",)" - R"("languages":"en")" - "}"}, - {"TV", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%S",)" - R"("state_name_type":"island",)" - R"("languages":"tyv")" - "}"}, - {"TW", "{" - R"("fmt":"%Z%n%S%C%n%A%n%O%n%N",)" - R"("lfmt":"%N%n%O%n%A%n%C, %S %Z",)" - R"("require":"ACSZ",)" - R"("state_name_type":"county",)" - R"("locality_name_type":"district",)" - R"("zipex":"104,106,10603,40867",)" - R"("posturl":"http://www.post.gov.tw/post/internet/f_searchzone/index.jsp?ID=190102",)" - R"("languages":"zh-Hant")" - "}"}, - {"TZ", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"6090,34413",)" - R"("languages":"sw~en")" - "}"}, - {"UA", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%S%n%Z",)" - R"("lfmt":"%N%n%O%n%A%n%C%n%S%n%Z",)" - R"("require":"ACZ",)" - R"("state_name_type":"oblast",)" - R"("zipex":"15432,01055,01001",)" - R"("posturl":"http://services.ukrposhta.com/postindex_new/",)" - R"("languages":"uk")" - "}"}, - {"UG", "{" - R"("languages":"sw~en")" - "}"}, - {"UM", "{" - R"("fmt":"%N%n%O%n%A%n%C %S %Z",)" - R"("require":"ACS",)" - R"("zip_name_type":"zip",)" - R"("state_name_type":"state",)" - R"("zipex":"96898",)" - R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)" - R"("languages":"en")" - "}"}, - {"US", "{" - R"("fmt":"%N%n%O%n%A%n%C, %S %Z",)" - R"("require":"ACSZ",)" - R"("zip_name_type":"zip",)" - R"("state_name_type":"state",)" - R"("zipex":"95014,22162-1010",)" - R"("posturl":"https://tools.usps.com/go/ZipLookupAction!input.action",)" - R"("languages":"en")" - "}"}, - {"UY", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C %S",)" - R"("zipex":"11600",)" - R"("posturl":"http://www.correo.com.uy/index.asp?codPag=codPost&switchMapa=codPost",)" - R"("languages":"es")" - "}"}, - {"UZ", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C%n%S",)" - R"("zipex":"702100,700000",)" - R"("posturl":"https://uz.post/ru/mening-pochta-indeksim",)" - R"("languages":"uz~ru")" - "}"}, - {"VA", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"00120",)" - R"("languages":"it")" - "}"}, - {"VC", "{" - R"("fmt":"%N%n%O%n%A%n%C %Z",)" - R"("zipex":"VC0100,VC0110,VC0400",)" - R"("languages":"en")" - "}"}, - {"VE", "{" - R"("fmt":"%N%n%O%n%A%n%C %Z, %S",)" - R"("require":"ACS",)" - R"("state_name_type":"state",)" - R"("zipex":"1010,3001,8011,1020",)" - R"("languages":"es")" - "}"}, - {"VG", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%Z",)" - R"("require":"A",)" - R"("zipex":"VG1110,VG1150,VG1160",)" - R"("languages":"en")" - "}"}, - {"VI", "{" - R"("fmt":"%N%n%O%n%A%n%C %S %Z",)" - R"("require":"ACSZ",)" - R"("zip_name_type":"zip",)" - R"("state_name_type":"state",)" - R"("zipex":"00802-1222,00850-9802",)" - R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)" - R"("languages":"en")" - "}"}, - {"VN", "{" - R"("fmt":"%N%n%O%n%A%n%C%n%S %Z",)" - R"("lfmt":"%N%n%O%n%A%n%C%n%S %Z",)" - R"("require":"AS",)" - R"("zipex":"70010,55999",)" - R"("languages":"vi")" - "}"}, - {"VU", "{" - R"("languages":"bi~en~fr")" - "}"}, - {"WF", "{" - R"("fmt":"%O%n%N%n%A%n%Z %C %X",)" - R"("require":"ACZ",)" - R"("zipex":"98600",)" - R"("languages":"fr")" - "}"}, - {"WS", "{" - R"("languages":"sm~en")" - "}"}, - {"XK", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"10000",)" - R"("languages":"sq~sr~sr-Latn")" - "}"}, - {"YE", "{" - R"("languages":"ar")" - "}"}, - {"YT", "{" - R"("fmt":"%O%n%N%n%A%n%Z %C %X",)" - R"("require":"ACZ",)" - R"("zipex":"97600",)" - R"("languages":"fr")" - "}"}, - {"ZA", "{" - R"("fmt":"%N%n%O%n%A%n%D%n%C%n%Z",)" - R"("require":"ACZ",)" - R"("zipex":"0083,1451,0001",)" - R"("posturl":"https://www.postoffice.co.za/Questions/postalcode.html",)" - R"("languages":"en~zu~xh~af~nso~tn~st~ts~ss~ve~nr")" - "}"}, - {"ZM", "{" - R"("fmt":"%N%n%O%n%A%n%Z %C",)" - R"("zipex":"50100,50101",)" - R"("languages":"en")" - "}"}, - {"ZW", "{" - R"("languages":"sn~en~nd")" - "}"}, - }; - -} // namespace - -// static -const std::string& RegionDataConstants::GetDefaultRegionData() { - static const std::string kDefaultRegionData( - "{" - R"("fmt":"%N%n%O%n%A%n%C",)" - R"("require":"AC",)" - R"("zip_name_type":"postal",)" - R"("state_name_type":"province",)" - R"("locality_name_type":"city",)" - R"("sublocality_name_type":"suburb")" - "}"); - return kDefaultRegionData; -} - -namespace { - -// Binary search over kRegionData[i].region_code values. If a match is found, -// returns true and sets |position_out| to the position of |region_code| in -// kRegionData. If a match is not found, returns false. -bool FindPositionOfRegionCode(const std::string& region_code, - size_t* position_out) { - assert(position_out != nullptr); - size_t left = 0; // inclusive. - size_t right = size(kRegionData); // exclusive. - while (left < right) { - size_t mid = left + (right - left) / 2; - int comparison = region_code.compare(kRegionData[mid].region_code); - if (comparison == 0) { - *position_out = mid; - return true; - } else if (comparison > 0) { - left = mid + 1; - } else { - right = mid; - } - } - return false; -} - -std::vector InitRegionCodes() { - std::vector region_codes(size(kRegionData)); - std::transform(std::begin(kRegionData), - std::end(kRegionData), - region_codes.begin(), - [](const RegionData& region_data) { - return region_data.region_code; - }); - return region_codes; -} - -std::map InitMaxLookupKeyDepth() { - std::map max_depth; - for (const auto& region_data : kRegionData) { - std::vector fields; - // Here region_data.data actually contains the entire JSON blob for this - // region, and not only the format field, but it doesn't really matter when - // just checking whether a particular formatting code (eg. "%C") is present, - // as there isn't anything else in the JSON that erroneously could match a - // formatting code. - ParseFormatRule(region_data.data, &fields); - size_t depth = 1; - for (; depth < size(LookupKey::kHierarchy); ++depth) { - AddressField field = LookupKey::kHierarchy[depth]; - // Check to see if a particular field in the hierarchy is used by - // addresses in this country. If not, the maximum depth has been reached. - if (std::find(fields.begin(), fields.end(), FormatElement(field)) == - fields.end()) { - break; - } - } - max_depth.emplace(region_data.region_code, depth - 1); - } - return max_depth; -} - -} // namespace - -// static -bool RegionDataConstants::IsSupported(const std::string& region_code) { - size_t unused; - return FindPositionOfRegionCode(region_code, &unused); -} - -// static -const std::vector& RegionDataConstants::GetRegionCodes() { - static const std::vector kRegionCodes(InitRegionCodes()); - return kRegionCodes; -} - -// static -std::string RegionDataConstants::GetRegionData( - const std::string& region_code) { - static const std::string kEmptyString; - size_t position; - bool found = FindPositionOfRegionCode(region_code, &position); - return found ? kRegionData[position].data : kEmptyString; -} - -// static -size_t RegionDataConstants::GetMaxLookupKeyDepth( - const std::string& region_code) { - static const std::map kMaxDepth(InitMaxLookupKeyDepth()); - auto it = kMaxDepth.find(region_code); - return it != kMaxDepth.end() ? it->second : 0; -} - -} // namespace addressinput -} // namespace i18n diff --git a/cpp/test/fake_storage_test.cc b/cpp/test/fake_storage_test.cc index 672f9992..228cd89d 100644 --- a/cpp/test/fake_storage_test.cc +++ b/cpp/test/fake_storage_test.cc @@ -72,7 +72,7 @@ TEST_F(FakeStorageTest, GetWithoutPutReturnsEmptyData) { } TEST_F(FakeStorageTest, GetReturnsWhatWasPut) { - storage_.Put("key", std::string("value")); + storage_.Put("key", "value"); storage_.Get("key", *data_ready_); EXPECT_TRUE(success_); @@ -81,8 +81,8 @@ TEST_F(FakeStorageTest, GetReturnsWhatWasPut) { } TEST_F(FakeStorageTest, SecondPutOverwritesData) { - storage_.Put("key", std::string("bad-value")); - storage_.Put("key", std::string("good-value")); + storage_.Put("key", "bad-value"); + storage_.Put("key", "good-value"); storage_.Get("key", *data_ready_); EXPECT_TRUE(success_); diff --git a/testdata/countryinfo.txt b/testdata/countryinfo.txt index 9d034be4..ff3c24c2 100644 --- a/testdata/countryinfo.txt +++ b/testdata/countryinfo.txt @@ -10172,7 +10172,7 @@ data/IO={"id":"data/IO","key":"IO","name":"BRITISH INDIAN OCEAN TERRITORY","fmt" data/IQ={"id":"data/IQ","key":"IQ","name":"IRAQ","fmt":"%O%n%N%n%A%n%C, %S%n%Z","require":"ACS","upper":"CS","zip":"\\d{5}"} data/IR={"id":"data/IR","key":"IR","name":"IRAN","fmt":"%O%n%N%n%S%n%C, %D%n%A%n%Z","zip":"\\d{5}-?\\d{5}","zipex":"11936-12345","sublocality_name_type":"neighborhood"} data/IS={"id":"data/IS","key":"IS","name":"ICELAND","fmt":"%N%n%O%n%A%n%Z %C","zip":"\\d{3}","zipex":"320,121,220,110","posturl":"http://www.postur.is/cgi-bin/hsrun.exe/Distributed/vefur/vefur.htx;start=HS_landakort_postnumer"} -data/IT={"id":"data/IT","key":"IT","name":"ITALY","lang":"it","languages":"it","fmt":"%N%n%O%n%A%n%Z %C %S","require":"ACSZ","upper":"CS","zip":"\\d{5}","zipex":"00144,47037,39049","posturl":"http://www.poste.it/online/cercacap/","sub_keys":"AG~AL~AN~AR~AP~AT~AV~BA~BT~BL~BN~BG~BI~BO~BZ~BS~BR~CA~CL~CB~CI~CE~CT~CZ~CH~CO~CS~CR~KR~CN~EN~FM~FE~FI~FG~FC~FR~GE~GO~GR~IM~IS~AQ~SP~LT~LE~LC~LI~LO~LU~MC~MN~MS~MT~VS~ME~MI~MO~MB~NA~NO~NU~OG~OT~OR~PD~PA~PR~PV~PG~PU~PE~PC~PI~PT~PN~PZ~PO~RG~RA~RC~RE~RI~RN~RM~RO~SA~SS~SV~SI~SR~SO~TA~TE~TR~TO~TP~TN~TV~TS~UD~AO~VA~VE~VB~VC~VR~VV~VI~VT","sub_names":"Agrigento~Alessandria~Ancona~Arezzo~Ascoli Piceno~Asti~Avellino~Bari~Barletta-Andria-Trani~Belluno~Benevento~Bergamo~Biella~Bologna~Bolzano~Brescia~Brindisi~Cagliari~Caltanissetta~Campobasso~Carbonia-Iglesias~Caserta~Catania~Catanzaro~Chieti~Como~Cosenza~Cremona~Crotone~Cuneo~Enna~Fermo~Ferrara~Firenze~Foggia~Forlì-Cesena~Frosinone~Genova~Gorizia~Grosseto~Imperia~Isernia~L'Aquila~La Spezia~Latina~Lecce~Lecco~Livorno~Lodi~Lucca~Macerata~Mantova~Massa-Carrara~Matera~Medio Campidano~Messina~Milano~Modena~Monza e della Brianza~Napoli~Novara~Nuoro~Ogliastra~Olbia-Tempio~Oristano~Padova~Palermo~Parma~Pavia~Perugia~Pesaro e Urbino~Pescara~Piacenza~Pisa~Pistoia~Pordenone~Potenza~Prato~Ragusa~Ravenna~Reggio Calabria~Reggio nell'Emilia~Rieti~Rimini~Roma~Rovigo~Salerno~Sassari~Savona~Siena~Siracusa~Sondrio~Taranto~Teramo~Terni~Torino~Trapani~Trento~Treviso~Trieste~Udine~Valle d'Aosta~Varese~Venezia~Verbano-Cusio-Ossola~Vercelli~Verona~Vibo Valentia~Vicenza~Viterbo","sub_zips":"92~15~60~52~63~14~83~70~76[01]~32~82~24~13[89]~40~39~25~72~0912[1-9]|0913[0-4]|0901[0289]|0902[03468]|0903[0234]|0904|0803[035]|08043~93~860[1-4]|86100~0901[013-7]~81~95~88[01]~66~22~87~26[01]~88[89]~12|18025~94~638|63900~44~50~71~47[015]~03~16~34[01]7~58~18~860[7-9]|86170~67~19~04~73~23[89]~57~26[89]~55~62~46~54~75~0902[012579]|0903[015-9]|09040~98~20~41~208|20900~80~28[01]~080[1-3]|08100~08037|0804[024-9]~08020|0702|0703[08]~090[7-9]|09170|0801[039]|0803[04]~35~90~43~27~06~61~65~29~56~51~330[7-9]|33170~85~59~97~48~89[01]~42~02~47[89]~00~45~84~070[14]|0703[0-79]|07100~17|12071~53~96~23[01]~74~64~05~10~91~38~31~3401|341[0-689]|34062~330[1-5]|33100~11~21~30~28[89]~13[01]~37~89[89]~36~01"} +data/IT={"id":"data/IT","key":"IT","name":"ITALY","lang":"it","languages":"it","fmt":"%N%n%O%n%A%n%Z %C %S","require":"ACSZ","upper":"CS","zip":"\\d{5}","zipex":"00144,47037,39049","posturl":"http://www.poste.it/online/cercacap/","sub_keys":"AG~AL~AN~AR~AP~AT~AV~BA~BT~BL~BN~BG~BI~BO~BZ~BS~BR~CA~CL~CB~CI~CE~CT~CZ~CH~CO~CS~CR~KR~CN~EN~FM~FE~FI~FG~FC~FR~GA~GE~GO~GR~IM~IS~AQ~SP~LT~LE~LC~LI~LO~LU~MC~MN~MS~MT~VS~ME~MI~MO~MB~NA~NO~NU~OG~OT~OR~PD~PA~PR~PV~PG~PU~PE~PC~PI~PT~PN~PZ~PO~RG~RA~RC~RE~RI~RN~RM~RO~SA~SD~SS~SU~SV~SI~SR~SO~TA~TE~TR~TO~TP~TN~TV~TS~UD~AO~VA~VE~VB~VC~VR~VV~VI~VT","sub_names":"Agrigento~Alessandria~Ancona~Arezzo~Ascoli Piceno~Asti~Avellino~Bari~Barletta-Andria-Trani~Belluno~Benevento~Bergamo~Biella~Bologna~Bolzano~Brescia~Brindisi~Cagliari~Caltanissetta~Campobasso~Carbonia-Iglesias~Caserta~Catania~Catanzaro~Chieti~Como~Cosenza~Cremona~Crotone~Cuneo~Enna~Fermo~Ferrara~Firenze~Foggia~Forlì-Cesena~Frosinone~Gallura Nord-Est Sardegna~Genova~Gorizia~Grosseto~Imperia~Isernia~L'Aquila~La Spezia~Latina~Lecce~Lecco~Livorno~Lodi~Lucca~Macerata~Mantova~Massa-Carrara~Matera~Medio Campidano~Messina~Milano~Modena~Monza e della Brianza~Napoli~Novara~Nuoro~Ogliastra~Olbia-Tempio~Oristano~Padova~Palermo~Parma~Pavia~Perugia~Pesaro e Urbino~Pescara~Piacenza~Pisa~Pistoia~Pordenone~Potenza~Prato~Ragusa~Ravenna~Reggio Calabria~Reggio nell'Emilia~Rieti~Rimini~Roma~Rovigo~Salerno~Sulcis Iglesiente~Sassari~Sud Sardegna~Savona~Siena~Siracusa~Sondrio~Taranto~Teramo~Terni~Torino~Trapani~Trento~Treviso~Trieste~Udine~Valle d'Aosta~Varese~Venezia~Verbano-Cusio-Ossola~Vercelli~Verona~Vibo Valentia~Vicenza~Viterbo","sub_zips":"92~15~60~52~63~14~83~70~76[01]~32~82~24~13[89]~40~39~25~72~0912[1-9]|0913[0-4]|0901[0289]|0902[03468]|0903[0234]|0904|0803[035]|08043~93~860[1-4]|86100~0901[013-7]~81~95~88[01]~66~22~87~26[01]~88[89]~12|18025~94~638|63900~44~50~71~47[015]~03~070[235]|0802~16~34[01]7~58~18~860[7-9]|86170~67~19~04~73~23[89]~57~26[89]~55~62~46~54~75~0902[012579]|0903[015-9]|09040~98~20~41~208|20900~80~28[01]~080[1-3]|08100~08037|0804[024-9]~08020|0702|0703[08]~090[7-9]|09170|0801[039]|0803[04]~35~90~43~27~06~61~65~29~56~51~330[7-9]|33170~85~59~97~48~89[01]~42~02~47[89]~00~45~84~0901~070[14]|0703[0-79]|07100~090[1-5][0-9]|0906[0-6]|080[1-4]~17|12071~53~96~23[01]~74~64~05~10~91~38~31~3401|341[0-689]|34062~330[1-5]|33100~11~21~30~28[89]~13[01]~37~89[89]~36~01"} data/IT/AG={"id":"data/IT/AG","key":"AG","name":"Agrigento","lang":"it","zip":"92"} data/IT/AL={"id":"data/IT/AL","key":"AL","name":"Alessandria","lang":"it","zip":"15"} data/IT/AN={"id":"data/IT/AN","key":"AN","name":"Ancona","lang":"it","zip":"60"} @@ -10211,6 +10211,7 @@ data/IT/FG={"id":"data/IT/FG","key":"FG","name":"Foggia","lang":"it","zip":"71"} data/IT/FI={"id":"data/IT/FI","key":"FI","name":"Firenze","lang":"it","zip":"50"} data/IT/FM={"id":"data/IT/FM","key":"FM","name":"Fermo","lang":"it","zip":"638|63900"} data/IT/FR={"id":"data/IT/FR","key":"FR","name":"Frosinone","lang":"it","zip":"03"} +data/IT/GA={"id":"data/IT/GA","key":"GA","name":"Gallura Nord-Est Sardegna","lang":"it","zip":"070[235]|0802"} data/IT/GE={"id":"data/IT/GE","key":"GE","name":"Genova","lang":"it","zip":"16"} data/IT/GO={"id":"data/IT/GO","key":"GO","name":"Gorizia","lang":"it","zip":"34[01]7"} data/IT/GR={"id":"data/IT/GR","key":"GR","name":"Grosseto","lang":"it","zip":"58"} @@ -10259,11 +10260,13 @@ data/IT/RM={"id":"data/IT/RM","key":"RM","name":"Roma","lang":"it","zip":"00"} data/IT/RN={"id":"data/IT/RN","key":"RN","name":"Rimini","lang":"it","zip":"47[89]"} data/IT/RO={"id":"data/IT/RO","key":"RO","name":"Rovigo","lang":"it","zip":"45"} data/IT/SA={"id":"data/IT/SA","key":"SA","name":"Salerno","lang":"it","zip":"84"} +data/IT/SD={"id":"data/IT/SD","key":"SD","name":"Sulcis Iglesiente","lang":"it","zip":"0901"} data/IT/SI={"id":"data/IT/SI","key":"SI","name":"Siena","lang":"it","zip":"53"} data/IT/SO={"id":"data/IT/SO","key":"SO","name":"Sondrio","lang":"it","zip":"23[01]"} data/IT/SP={"id":"data/IT/SP","key":"SP","name":"La Spezia","lang":"it","zip":"19"} data/IT/SR={"id":"data/IT/SR","key":"SR","name":"Siracusa","lang":"it","zip":"96"} data/IT/SS={"id":"data/IT/SS","key":"SS","name":"Sassari","lang":"it","zip":"070[14]|0703[0-79]|07100"} +data/IT/SU={"id":"data/IT/SU","key":"SU","name":"Sud Sardegna","lang":"it","zip":"090[1-5][0-9]|0906[0-6]|080[1-4]"} data/IT/SV={"id":"data/IT/SV","key":"SV","name":"Savona","lang":"it","zip":"17|12071"} data/IT/TA={"id":"data/IT/TA","key":"TA","name":"Taranto","lang":"it","zip":"74"} data/IT/TE={"id":"data/IT/TE","key":"TE","name":"Teramo","lang":"it","zip":"64"}